티스토리 뷰
루팅된 폰에서 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))
}
})
참고
'보안 > App' 카테고리의 다른 글
[DVIA-v2] Bypassing Biometrics (0) | 2023.07.05 |
---|---|
[DVIA-v2] Side Channel Data Leakage (0) | 2023.07.04 |
[DVIA-v2] Runtime Manipulation(Login Method 1) (2) | 2023.07.03 |
[Android] Open redirect vulnerability Using Deeplink (2) | 2023.06.29 |
[DVIA-v2] Local Data Storage (0) | 2023.06.26 |
- Total
- Today
- Yesterday
- InsecureShop
- 케쉴주
- dvia-v2
- Face ID bypass
- Webkit Caching
- 탈옥 우회
- IoTGoat
- SNOMED CT
- Local Data Storage
- SNOMED CT Mapping
- Couchbase Lite
- deep learuning
- Pasteboard
- LAContext
- Jailbreak iOS
- K-Shield Jr 9기 단기
- Touch bypass
- YapDatabase
- IoT Analysis
- Runtime Manipulation
- iOS 15 jailbreak
- Data Leakage
- Objection
- Android 7.0
- SNOMED
- UserDefaults
- Android
- Keystroke logging
- core data
- 케이쉴드주니어
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |