본문 바로가기

Technical Docs/Android

[Frida] Root Check : getpid

"getpid"를 통해 루팅 탐지하는 로직이 있음

  1. getpid ?
    함수를 호출한 프로세스 ID 리턴
    returns the process ID (PID) of the calling process.
  2. getppid ?
    함수를 호출한 부모 프로세스 ID 리턴
    returns the process ID of the parent of the calling process.

실행되는 앱 프로세스 정보는 아래와 같음

 

만약, 해당 앱이 슈퍼 유저 권한을 부여 받을때 "[App Name]"에 슈퍼유저 권한이 허용됨" 문구를 확인할 수 있으며, 

 

프로세스 정보를 다시 확인해 보면 "su" 프로세스가 생성됨


추측, "getpid"를 통한 로팅 탐지 방법

  • "getpid" 함수 호출 하여 해당 앱 프로세스 리스트 출력
  • 해당 프로세스 리스트에 "su" 프로세스 있는지 확인
    2-1. 있다면 -> 프로세스 종료
    2-2. 없다면 -> 다음단계 실행


자식 프로세스에 루팅 사용된 프로세스가 존재하지 않은 PID 값 리턴

Interceptor.attach(Module.findExportByName(null, 'getpid'), {
    onEnter: function (args) {},
    onLeave: function (retval) {
        console.log('\tgetpid : ' + retval);
        retval.replace(ptr('0x0'));
        console.log('\tNew getpid : ' + retval);
    }
})