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
디버거