탈옥된 기기에서 Jailbreak Test 1을 터치하면 "Device is Jailbroken"이라는 메시지가 나타난다.
앱에서 탈옥을 탐지하고 있다는 의미인데, 이를 우회하는 방법을 찾아야 한다.
일단, 위 url을 통해 frida-ios-dump를 다운로드하여 실행한 후, DVIA 앱을 복호화하여 원본 ipa 파일을 추출한다.
ipa 파일을 추출하고 나서 압축풀기를 한다.
압축풀기를 하고나서 디렉토리에 접근하면 앱 이름인 "DVIA-v2" 라는 파일이 있는데, 이게 바로 앱 실행파일이다.
IDA로 해당 파일을 열어, 앞서 메시지에 나왔던 문자열 "Device is Jailbroken"을 검색한다.
해당 문자열을 사용하는 부분을 더블클릭하면,
참조한 부분으로 이동할 수 있다.
위 TBZ 명령어의 결과에 따라 분기하는데, 왼쪽은 탈옥일 경우, 오른쪽은 탈옥이 아닐 경우이다.
따라서 TBZ 명령어 결과의 반대인 TBNZ로 수정하여 코드 패치해보기로 했다.
일단 TBZ 클릭 후 Hex View 탭을 클릭하면 해당 명령어의 hex 값을 알 수 있다.
hex 값이 60 1D 00 36인데, 이 중 명령어에 해당하는 부분이 어느 부분인지 확인하기 위해 TBZ를 사용하는 다른 곳을 찾아보았다.
TBZ를 사용하는 다른 곳에서 hex 값을 확인해보면 E3 00 00 36 으로 나오는데, 이를 통해 뒤 두자리 00 36을 수정해야 한다는 것을 알 수 있었다.
이제 TBNZ를 사용하는 부분을 찾아보면 hex 값이 00 0F 00 37 이라는 것을 알 수 있다.
다른 TBNZ도 찾아보면 뒤 두자리 00 37이 공통된 것을 알 수 있다.
이제 처음 변경하고자 했던 TBZ 부분의 hex 값을 뒤에 00 36 대신 00 37로 변경한다.
이제 IDA View 탭으로 확인해보면 TBZ 명령어가 TBNZ로 변경된 것을 알 수 있다.
수정 후 반드시 Edit - Patch program - Apply patches to input file... 을 통해 코드 패치 해주어야 한다.
단순히 저장만 하면 원본 파일에는 수정이 되지 않고 .i64 확장자의 신규 파일로 생성된다.
수정된 파일을 이제 아이폰 내 Bundle Container에 있는 실행파일과 교체해주어야 한다.
먼저 원본 파일을 백업해 두고, DVIA-v2 파일을 이동시킨다.
그 후, 반드시 수정한 파일의 권한을 수정해주어야 한다.
chmod 755 DVIA-v2
위 명령어로 원본 파일과 같은 권한으로 변경해준다.
실행 후 다시 테스트해보면 Device is Not Jailbroken 이라는 메시지로 변경되어 나타나는 것을 확인할 수 있다. (Test 2도 동일)
Jailbreak Test 3을 터치하면 위와 같은 메시지가 출력된다.
Test 1에서 했던 것과 마찬가지로 앱 실행파일을 IDA로 열어 메시지에 출력된 문자열을 검색한다.
검색결과를 클릭하여 로직을 확인한다.
마찬가지로 00 36을 00 37로 변경하면 TBZ 명령어가 TBNZ로 바뀐다.
코드 패치 후 앱 실행해보면 Jailbreak Test 3 터치 시 탈옥되지 않은 장치라는 메시지를 확인할 수 있다.
Jailbreak Test 4를 터치하면 위와 같은 메시지가 출력되며, 이 문자열을 검색해본다.
해당 로직에서 문자열을 사용하는 것을 알 수 있으며, 마찬가지로 TBZ 명령어로 분기하는 것으로 보아 이를 변경하기로 한다.
00 36 이었던 부분을 00 37로 변경한다.
TBNZ로 변경되었다.
이제 코드 패치를 하고 다시 아이폰에 있는 실행 파일과 교체한다.
앱 실행 후 다시 터치해보면 탈옥되지 않은 장치라는 메시지가 나온다.
Jailbreak Test 5를 터치하면 위와 같은 메시지가 나오며, 해당 문자열을 IDA에서 검색해본다.
해당 문자열이 사용되는 로직을 확인하고, TBZ 명령어를 통해 분기함을 알 수 있었다.
마찬가지로 00 36 부분을 00 37로 변경한다.
TBNZ로 변경된 것을 확인하고, 코드 패치를 진행한다.
그 후 코드 패치된 파일과 원본을 교체한다.
앱 실행 후 다시 터치해보면 탈옥되지 않은 장치라는 메시지가 나온다.