Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
SlideShare a Scribd company logo
[IGC2018] 넷마블 이상철 - 모바일 게임 보안 AR(Android Republic) 변조앱 내부를 파헤치다
[IGC2018] 넷마블 이상철 - 모바일 게임 보안 AR(Android Republic) 변조앱 내부를 파헤치다
iosgods Android Republic
[IGC2018] 넷마블 이상철 - 모바일 게임 보안 AR(Android Republic) 변조앱 내부를 파헤치다
[IGC2018] 넷마블 이상철 - 모바일 게임 보안 AR(Android Republic) 변조앱 내부를 파헤치다
[IGC2018] 넷마블 이상철 - 모바일 게임 보안 AR(Android Republic) 변조앱 내부를 파헤치다
[IGC2018] 넷마블 이상철 - 모바일 게임 보안 AR(Android Republic) 변조앱 내부를 파헤치다
[IGC2018] 넷마블 이상철 - 모바일 게임 보안 AR(Android Republic) 변조앱 내부를 파헤치다
[IGC2018] 넷마블 이상철 - 모바일 게임 보안 AR(Android Republic) 변조앱 내부를 파헤치다
[IGC2018] 넷마블 이상철 - 모바일 게임 보안 AR(Android Republic) 변조앱 내부를 파헤치다
[IGC2018] 넷마블 이상철 - 모바일 게임 보안 AR(Android Republic) 변조앱 내부를 파헤치다
[IGC2018] 넷마블 이상철 - 모바일 게임 보안 AR(Android Republic) 변조앱 내부를 파헤치다
[IGC2018] 넷마블 이상철 - 모바일 게임 보안 AR(Android Republic) 변조앱 내부를 파헤치다
[IGC2018] 넷마블 이상철 - 모바일 게임 보안 AR(Android Republic) 변조앱 내부를 파헤치다
[IGC2018] 넷마블 이상철 - 모바일 게임 보안 AR(Android Republic) 변조앱 내부를 파헤치다
[IGC2018] 넷마블 이상철 - 모바일 게임 보안 AR(Android Republic) 변조앱 내부를 파헤치다
[IGC2018] 넷마블 이상철 - 모바일 게임 보안 AR(Android Republic) 변조앱 내부를 파헤치다
[IGC2018] 넷마블 이상철 - 모바일 게임 보안 AR(Android Republic) 변조앱 내부를 파헤치다
system.png.so
new.png.so
1st classes.dex
libcompatible.so
aegis_e.so
① 로드
aegis_e_x86.
so
② 로드
2nd classes.dex
③ 2nd dex 복호화 및 동적로드
libjasdiasodiasodiaosd.so
④ 로드
androidrepublic.org
로그전송
⑤ 전송 ⑥ 로드 & 후킹
hook_dlopen()
hook_fopen()
hook_strcmp()
…
[IGC2018] 넷마블 이상철 - 모바일 게임 보안 AR(Android Republic) 변조앱 내부를 파헤치다
[IGC2018] 넷마블 이상철 - 모바일 게임 보안 AR(Android Republic) 변조앱 내부를 파헤치다
Obfuscator-LLVM(Low Level Virtual Machine)
https://github.com/obfuscator-llvm/obfuscator/wiki
[IGC2018] 넷마블 이상철 - 모바일 게임 보안 AR(Android Republic) 변조앱 내부를 파헤치다
[IGC2018] 넷마블 이상철 - 모바일 게임 보안 AR(Android Republic) 변조앱 내부를 파헤치다
aegis_e.so 파
일
쓰레드
부모 프로세스
aegis_e.so 파
일
쓰레드
자식 프로세스
pipe 통신(read, write)
ptrace(PTRACE_ATTACH, 부모pid)2
fork()1
3 모니터링(still alive?)
/proc/<자식 pid>/task 폴더
/proc/<자식 pid>/status 파일
디버거
부모 또는 자식 프로세스가 Kill 되는 조건
1)ptrace() 함수 실패 시
2)자식 프로세스 task 폴더가 존재하지 않는경우
3)/proc/<자식 pid>/status 파일 내에 state가 ‘t’ 일(tracing) 경우
4)/proc/<자식 pid>/status 파일 내에 TracePid 값이 0이 아닐 경우
Name: marble.mherosgb -> 프로세스명
State: R (running) -> 프로세스 상태
…
Pid: 23892 -> 나
PPid: 23175 -> 부모 프로세스 zygote
TracerPid: 23907 -> 제대로 실행되고 있다면
자식 프로세스 pid 값이어야 한다.
/proc/<부모 pid>/status 파일
Name: marble.mherosgb
State: S (sleeping)
…
Pid: 23907 -> 나
PPid: 23892 -> 부모 프로세스
TracerPid: 0 -> 제대로 실행되고 있으면 pid는 0이
어야 한다.
/proc/<자식 pid>/status 파일
부모 프로세스 자식 프로세스
aegis_e.so 파
일
쓰레드
부모 프로세스
aegis_e.so 파
일
쓰레드
자식 프로세스
pipe 통신(read, write)
ptrace(PTRACE_ATTACH, 부모pid)2
fork()1
3 모니터링(still alive?)
/proc/<자식 pid>/task 폴더
/proc/<자식 pid>/status 파일
sys_kill 패치
무한루프
(0xFE 0xE7)
gdb
디버거
[IGC2018] 넷마블 이상철 - 모바일 게임 보안 AR(Android Republic) 변조앱 내부를 파헤치다
[IGC2018] 넷마블 이상철 - 모바일 게임 보안 AR(Android Republic) 변조앱 내부를 파헤치다
4.TK_InlineHookFunction - 인라인후킹
[IGC2018] 넷마블 이상철 - 모바일 게임 보안 AR(Android Republic) 변조앱 내부를 파헤치다
[IGC2018] 넷마블 이상철 - 모바일 게임 보안 AR(Android Republic) 변조앱 내부를 파헤치다
[IGC2018] 넷마블 이상철 - 모바일 게임 보안 AR(Android Republic) 변조앱 내부를 파헤치다

More Related Content

[IGC2018] 넷마블 이상철 - 모바일 게임 보안 AR(Android Republic) 변조앱 내부를 파헤치다

  • 19. system.png.so new.png.so 1st classes.dex libcompatible.so aegis_e.so ① 로드 aegis_e_x86. so ② 로드 2nd classes.dex ③ 2nd dex 복호화 및 동적로드 libjasdiasodiasodiaosd.so ④ 로드 androidrepublic.org 로그전송 ⑤ 전송 ⑥ 로드 & 후킹 hook_dlopen() hook_fopen() hook_strcmp() …
  • 22. Obfuscator-LLVM(Low Level Virtual Machine) https://github.com/obfuscator-llvm/obfuscator/wiki
  • 25. aegis_e.so 파 일 쓰레드 부모 프로세스 aegis_e.so 파 일 쓰레드 자식 프로세스 pipe 통신(read, write) ptrace(PTRACE_ATTACH, 부모pid)2 fork()1 3 모니터링(still alive?) /proc/<자식 pid>/task 폴더 /proc/<자식 pid>/status 파일 디버거
  • 26. 부모 또는 자식 프로세스가 Kill 되는 조건 1)ptrace() 함수 실패 시 2)자식 프로세스 task 폴더가 존재하지 않는경우 3)/proc/<자식 pid>/status 파일 내에 state가 ‘t’ 일(tracing) 경우 4)/proc/<자식 pid>/status 파일 내에 TracePid 값이 0이 아닐 경우
  • 27. Name: marble.mherosgb -> 프로세스명 State: R (running) -> 프로세스 상태 … Pid: 23892 -> 나 PPid: 23175 -> 부모 프로세스 zygote TracerPid: 23907 -> 제대로 실행되고 있다면 자식 프로세스 pid 값이어야 한다. /proc/<부모 pid>/status 파일 Name: marble.mherosgb State: S (sleeping) … Pid: 23907 -> 나 PPid: 23892 -> 부모 프로세스 TracerPid: 0 -> 제대로 실행되고 있으면 pid는 0이 어야 한다. /proc/<자식 pid>/status 파일 부모 프로세스 자식 프로세스
  • 28. aegis_e.so 파 일 쓰레드 부모 프로세스 aegis_e.so 파 일 쓰레드 자식 프로세스 pipe 통신(read, write) ptrace(PTRACE_ATTACH, 부모pid)2 fork()1 3 모니터링(still alive?) /proc/<자식 pid>/task 폴더 /proc/<자식 pid>/status 파일 sys_kill 패치 무한루프 (0xFE 0xE7) gdb 디버거