탈옥탐지3 - system(0)
system(0); 함수 호출 시 반환값을 보고 탈옥여부를 판단한다.
/bin/sh가 있는지 여부에 따라서 return 값이 달라지므로 이걸 보고 판단하는 것.
- return 0 : 비탈옥장치 (정상장치)
- return 1 : 탈옥장치
예시 코드
보안코드 - 앱에 적용
+(BOOL)doShell{ if(system(0)) //system(0) 호출결과를 보고 탈옥판단 return YES; return NO; }
우회 - MobileSubstrate로 후킹
static int (*old_system)(char *) = NULL; int st_system(char* cmd){ if(!cmd) return nil; return old_system(cmd); } __attribute__((constructor)) static void initialize() { MSHookFunction(system, st_system, &old_system); //system()함수 구현부 후킹 }
변동사항

ios11부터 Xcode에서 system()함수 사용 불가.
==> /bin/sh 존재여부 확인으로 대체하자.