DVIA - Jailbreak 우회 4 (Frida)

 

준비사항

  1. iOS Device에 버전과 플랫폼에 맞는 frida-server가 설치 및 구동중이어야 한다.
  1. workstation(PC)에 Frida가 설치된 상태여야 한다.
  1. iOS Device가 workstation(PC)와 USB 케이블로 연결된 상태여야 한다.
  1. 준비 완료.
  1. frida-trace를 이용해 우회해 보자. (PC에서 명령 줌)
 

우회 : (void)jailbreakTest1Tapped:(id)arg1;

우선 frida-trace로 DVIA의 첫번째 탈옥탐지 함수를 우회해 보자.
 
Copy of DVIA - Jailbreak 우회 1 (Cycript)
앞서 살펴본 글에서 "jailbreakTest1Tapped" 함수는 _Bool 값을 반환하는 isJailbroken 함수의 결과값을 통해 탈옥이다 아니다를 판단하는 함수였다.
 
cycript에서는 메소드 구현부를 변경하여 항상 0을 반환하도록 변경하여 우회를 하였다.
frida로도 우선 동일한 맥락으로 우회해보자.

pc에서 명령어 입력

#-U(usb) -m(method include) #USB로 연결된 장치의 DVIA라는 앱에서 isJailbroken 함수를 추적하겠다는 의미. $ frida-trace -U DVIA -m "-[JailbreakDetectionVC isJailbroken]" #.js 파일이 자동으로 생성된다. Instrumenting functions... -[JailbreakDetectionVC isJailbroken]: Loaded handler at "/Users/night-ohl/__handlers__/__handlers__/__JailbreakDetectionVC_isJailbroken_.js" Started tracing 1 function. Press Ctrl+C to stop.
#Ctrl+C를 눌러 frida를 중지하고 생성된 .js파일 열어서 onEnter과 onLeave함수를 편집하자. $ nano __JailbreakDetectionVC_isJailbroken_.js #onLeave 함수를 다음과 같이 변경한다. #원래 retval을 0으로 변경하는 단순한 함수다. onLeave: function (log, retval, state) { console.log("Function [JailbreakDetectionVC isJailbroken] originally returned:"+ retval); retval.replace(0); console.log("Changing the return value to:"+retval); }
#.js 파일 수정이 완료됐으면 다시 frida 명령어를 입력한다. $ frida-trace -U DVIA -m "-[JailbreakDetectionVC isJailbroken]" #첫번째 탈옥탐지 버튼을 누르면 아래와 같이 콘솔결과가 찍히고 #실제 앱 화면에서도 정상적으로 우회가 되어, "Device is Not Jailbroken"이라고 뜬다. Instrumenting functions... -[JailbreakDetectionVC isJailbroken]: Loaded handler at "/Users/night-ohl/__handlers__/__handlers__/__JailbreakDetectionVC_isJailbroken_.js" Started tracing 1 function. Press Ctrl+C to stop. Function [JailbreakDetectionVC isJailbroken] originally returned:0x1 Changing the return value to:0x0 /* TID 0x403 */ 12195 ms -[JailbreakDetectionVC isJailbroken]
 
notion image