티스토리 뷰

보안/App

[DVIA-v2] Jailbreak Test 1,2

damti 2023. 6. 12. 18:18

 

루팅된 폰에서 Jailbreak Test 1 터치 시,

"Device is Jailbroken" 문구 나옴

 

 

탈옥 여부를 탐지해 alert창을 띄워줌

 

 

procedure

- 분기점 조건 별 주소 확인

- js 파일 생성

- frida에 파일 로드 후 주소 값 확인

- 레지스터 값 확인

- 코드 추가 및 탈옥 탐지 우회

 

 

 

IDA를 통해 파일 오픈함

 

 

View -> Open subviews -> Strings 접근함

 

 

 

문자열 검색이 가능한 Strings 메뉴 보임

Strings 메뉴에서 ctrl + f 눌러 "device is jailbroken"을 검색함

 

 

 

여기서 빨간 box 클릭하면

 

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

 

따라서

해당 분기문에서 현재 값의 반대 값을 보내

TBNZ일 때의 결과가 출력되도록 변조 할 예정임.

 

 

그렇기 위해서는 분기문의 시작되는 주소를 확인해야 함

 

 

IDA를 통해 확인 시

해당 분기문의 시작 주소는 빨간 box에 마우스를 올리면 나오는 파란색임

(0x1CBDD0)

 

 

 

주소 확인 후 후킹 코드 작성함

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

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

(process명은 "frida-ps -Uai" 명령어를 통해 NAME을 확인함)

 

 

 

다음과 같이 후킹 코드를 동작시킴

frida -U -f "동작 시키려는 APP의 Identifier" -l "파일.js"


앱이 자동으로 실행되면서

주소값이 출력되는 것을 확인할 수 있음

 

console.log로 출력시킨 첫 번째 주소는 DVIA-v2 바이너리가 실제 할당된 주소

두 번째 주소는 수정하고 싶은 주소

 

 

 

그 다음 해당 후킹코드가 동작 시 출력되는 값을 확인해야 함

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

위와 같이 코드를 작성 한 후 frida를 통해 다시 실행시킴.

 

자동으로 DVIA-v2 앱이 실행되고,

jailbreak Test1 메뉴를 선택 시 레지스트리 값들이 출력되는 것을 확인함

 

 

 

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

분기점 시작할 때의 레지스트리 값이 W0이므로

출력되는 값 중에서 x0 값을 변조할 예정임

 

 

현재 x0의 값은 0x1이므로 이 값을 0x0으로 변조함

 

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

var jailBreak_address = realBase.add('0x1cbdd0')
console.log(jailBreak_address)

Interceptor.attach(jailBreak_address, {
	onEnter:function(args){
		console.log(JSON.stringify(this.context))
     // 위 코드는 주소 값을 확인하기 위해 그냥 두고 아래부터 추가 설정
     // 레지스터 지정 및 변경 시도 (레지스터 받을 때는 this.context)
        this.context.x0 = 0x0   // 현재 코드 블럭내 레지스터 값은 x0 : 1x0 인데 이를 강제 변경
        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