본문 바로가기

iOS 앱 점검(ObjC)/안티디버깅

ios) 안티디버깅 - getppid()

반응형

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