반응형
ios) 안티디버깅 - getppid
일반적인 앱은 launchd process에 의해 실행된다.
launchd 프로세스는 user mode로 첫번째로 돌아가는 프로세스로 PID=1이다.
따라서 일반적인 앱의 ppid(parent process id)는 1로 조회된다면 정상이다.
반면 디버거에서 자식프로세스로 생성한 경우는 ppid는 디버거의 PID로 설정된다.
따라서 getppid() 함수 호출 결과가 launchd인 1이 아니라면 디버거에서 생성했다고 판단할 수 있다.
func AmIBeingDebugged() -> Bool {
return getppid() != 1
}
[우회]
물론 getppid() 함수에 후킹 걸어서 항상 1이 반환되도록 하면 됨.
아니면 반환 결과를 보고 판단하는 함수를 패치해도 됨.
반응형
'iOS 앱 점검(ObjC) > 안티디버깅' 카테고리의 다른 글
ios) 안티디버깅 - sysctl (0) | 2020.07.27 |
---|---|
ios) ptrace관련 안티디버깅 정리 (0) | 2020.07.27 |