APP/IOS

DVIA-v2 - Jailbreak Test1,2

3년안에 내집 마련 2023. 2. 14. 20:42
반응형

DVIA-v2 앱을 실행시킨 후 Jailbreak Detection 메뉴를 선택하면 다음과 같은 화면이 출력된다.

여기서 Jaibreak Test1번 문제를 클릭하게 되면

루팅된 폰에서는 "Device is Jailbroken"이라는 문구가 나온다.

일단 APP을 추출한 후 해당 앱을 압축 해제 한다.

압축을 해제 한 후 폴더에 들어가보면

다음과 같이 DVIA-v2 파일을 확인할 수 있다.

이 파일을 IDA를 통해 열어준다.

(open 시 DVIA-v2 파일이 보이지 않을 경우 All files를 탐색하도록 한다.)

(IDA를 통해 열어주면 무엇인가 alert 창이 엄청 나오는데 그냥 확인 눌러주면 된다.)

IDA를 통해 해당 파일을 열었으면 View -> Open subviews -> Strings을 눌러준다.

그렇게 되면 문자열 검색이 가능한 Strings 메뉴가 보이게 될 것이다.

그 후 Strings 메뉴에서 ctrl + F를 눌러 "device is jailbroken"을 검색한다.

네모친 부분을 클릭하게 되면

다음과 같이 나오는데 여기서 빨간 네모친 부분을 클릭하게 되면

해당 토스트 메시지가 분기문을 통해서 출력되는 것을 확인할 수 있다.

그러므로 우리는 해당 분기문에서 현재 값의 반대 값을 보내 TBNZ일 때의 결과가 출력되도록 변조를 하면 된다.

그렇기 위해서는 분기문의 시작되는 주소를 확인하면 된다.

IDA를 통해 확인해보면 해당 분기문의 시작 주소는 빨간 네모 부분에 마우스를 올리면 나오는 파란색이다.(0x1CBDD0)

다음과 같이 주소를 확인 하면 후킹 코드를 작성 준비가 된 것이다.

var realBase = Module.findBaseAddress('DVIA-v2') // process 명
console.log(realBase)

var hookingBase = realBase.add('0x1CBDD0') // IDA를 통해 찾아준 분기점 시작 주소 더한다
console.log(hookingBase)

process명은 frida가 설치된 아이폰을 컴퓨터와 연결 후 cmd 창에서 "frida-ps -Uai" 명령어를 입력하면 나오는 "NAME"을 적어주면 된다.

다음과 같이 작성한 뒤 후킹 코드를 동작 시켜준다.

frida -U -f "동작 시키려는 APP의 Identifier" -l "후킹코드.js"

그럼 앱이 자동으로 실행되면서 주소값이 출력되는 것을 확인할 수 있다.

이제 해당 후킹코드가 동작시 출력되는 값을 확인해야한다.

Interceptor.attach(hookingBase, { //hookingBase 주소의 함수 호출 가로챈다.
	onEnter:function(args){ // 함수 시작 시
	console.log(JSON.stringify(this.context)) // 레지스트리 값을 출력한다.
	}
})

다음과 같이 코드를 작성 한 후 frida를 통해 다시 실행시켜보면 자동으로 DVIA-v2 앱이 실행되고 jailbreak Test1 메뉴를 선택 시

다음과 같이 레지스트리 값들이 출력되는 것을 확인할 수 있다.

IDA를 다시 들어가서 분기점 시작할 때의 레지스트리 값을 확인한다.

분기점 시작할 때의 레지스트리 값이 W0이므로 우리는 출력되는 값중에서 x0 값을 변조해주면 된다.

현재 x0의 값은 0x1이므로 이 값을 0x0으로 변조 해준다.

Interceptor.attach(hookingBase, {
	onEnter:function(args){
	console.log(JSON.stringify(this.context)) // 레지스트리 값을 출력한다.
        this.context.x0 = 0x0 //x0 레지스트리 값을 0x0으로 변조한다.
        console.log(JSON.stringify(this.context)) // 변조 후 레지스트리 값을 출력한다.
	}
})

다음과 같이 코드를 작성 한 후 다시 한번 후킹코드를 실행 시키면

x0 레지스트리 값이 "0x1"에서 "0x0"으로 변조되었고

"Device is Not Jailbroken"이라는 Toast 메시지를 띄울 수 있다.

최종코드

var realBase = Module.findBaseAddress('DVIA-v2')
console.log(realBase)

var hookingBase = realBase.add('0x1CBDD0')
console.log(hookingBase)

Interceptor.attach(hookingBase, {
	onEnter:function(args){
	console.log(JSON.stringify(this.context))
        this.context.x0 = 0x0
        console.log(JSON.stringify(this.context)) 
	}
})

 

출처 : 타쿠대디님 블로그(https://takudaddy.tistory.com/594)

 

반응형