일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Frida
- 프리다
- UnCrackable
- Blind Injection
- 호갱노노
- 매물
- 부동산
- 안드로이드
- 웹해킹
- NOX
- Mid()
- Lord of SQLInjection
- ADB
- 블라인드 인젝션
- 아파트실거래가
- 서울
- 월세
- 모의해킹
- SQL INJECTION
- 아파트
- 부동산분석
- APKManager
- Los
- 일기
- 스마트폰
- 투자
- 후킹
- jeb
- webhacking.kr
- 전세
- Today
- Total
일단 쓰고보자
Uncrackable-Level1 문제 풀이(frida Hooking) 본문
#서론
이전 게시글에 Uncrackable-Level1.apk 풀이를 업로드 했었다.
apk 파일 Decompile 한 후 smail 파일 직접 수정 및 JEB 디버깅을 통해 풀어보았는데
이번엔 frida를 사용하여 Hooking code 작성함으로써 문제를 해결해볼 예정이다.
Hooking을 통해 우회하는 것의 장점은 앱 자체 수정이 필요 없다는 점에 있다.
간혹, 자체 코드든 솔루션을 사용하든 앱 무결성을 탐지하는 앱의 경우,
아무리 내부 수정을 하더라도 설치가 어렵거나, 되더라도 정상 작동이 되지 않을 수 있기 때문이다.
혹은, 내부 무결성을 우회하는 시간이 더 걸릴 때도 있다.
무슨 짓을 하던 원하는 것을 얻어내기만 하면 되므로, 시도해볼 수 있는 방법이 여러개인 것이 나쁠 것은 없다.
#준비물
1. Nox
2. ADB
3. Python
4. Hooking Code
5. Uncrackable-Level1.apk
6. JEB
#시작
frida Hooking은 심플하다.
1) 스마트폰에서 frida-server 실행
2) Python으로 Hooking 코드 실행
frida-server 등 준비물들 설치하는 방법은 이전 글 참고바란다.
https://kinghy7.tistory.com/1?category=791142
[스마트폰]
1. Uncrackable1 앱 설치
- Nox 에서는 APK 파일 드래그만으로 설치가 가능함
2. frida-server 설치 및 실행
- 아래 명령어로 밀어넣어도 되고, Nox로 드래그 해도 된다.
c:\> adb push [Windows 내 frida-server 파일경로] [스마트폰 내 설치경로]
예) 다운로드 폴더에 위치한 frida-server-12.8.9-android-arm 파일을 스마트폰 /data/local/tmp/ 경로 안에 frida-server 로 변경하여 밀어넣겠다.
c:\> adb push C:\Users\Administrator\Downloads\frida-server-12.8.9-android-arm /data/local/tmp/frida-server
- frida-server 실행
# /data/local/tmp/./frida-server &
[PC]
3. 코드 분석하여 Hooking 대상 함수 선정
- 코드 분석하여 Hooking 대상 함수 찾는 부분은 이전 글 참고바란다.
https://kinghy7.tistory.com/3?category=791142
1) Rooting, Debugging 탐지 우회
sg.vantagepoint.uncrackable1.MainActivity 클래스 내 사용된 System.exit 함수
※ 사실 System.exit 함수는 java.lang.System 클래스에 선언되어 있음
2) SecretKey 값
sg.vantagepoint.a.a 클래스 내 a 함수
4. Hooking 코드 작성(*****)
- 기본 틀은 아래와 같고, 골자 부분은 jscode 부분이라고 보면 된다.
가져다 쓰실 땐 코드 전체 복사하신 후 PACKAGE_NAME, jscode 부분만 수정해서 쓰시면 되겠다.
- PACKAGE_NAME 변수에 패키지명을 작성하도록 되어 있는데, 패키지명은 아래 명령어를 통해 얻도록 하자.
#pm list packages -f | grep uncrackable1
package:/data/app/owasp.mstg.uncrackable1-1/base.apk=owasp.mstg.uncrackable1
import frida, sys def on_message(message, data): if message['type'] == 'send': print("[*] {0}".format(message['payload'])) else: print(message) PACKAGE_NAME = "[패키지명]" jscode = """ Java.perform(function() { var [변수1] = Java.use("[Hooking할 함수의 클래스]"); [변수1].[Hooking할 함수].implementation = function (args){ [원하는 코드 작성] } }); """ try: device = frida.get_usb_device(timeout=10) pid = device.spawn([PACKAGE_NAME]) print("App is starting ... pid : {}".format(pid)) process = device.attach(pid) device.resume(pid) script = process.create_script(jscode) script.on('message',on_message) print('[*] Running Frida') script.load() sys.stdin.read() except Exception as e: print(e)
- 코드 실행시켜보고 동작이 잘 되는지 의문이 생기면 아래와 같이 실행창에 로그를 남겨서 확인하기를 추천한다.
console.log("~~ 함수 들어옴");
console.log("~~ 함수 값 : " + asdf);
5. 작성한 Hooking 코드 전문
import frida, sys def on_message(message, data): if message['type'] == 'send': print("[*] {0}".format(message['payload'])) else: print(message) PACKAGE_NAME = "owasp.mstg.uncrackable1" jscode = """ console.log("[*] Start Hooking"); Java.perform(function() { var bypassExit = Java.use("java.lang.System"); bypassExit.exit.implementation = function (){ console.log("[*] System.exit() is called"); } var aClass = Java.use("sg.vantagepoint.a.a"); aClass.a.implementation = function (a, b){ console.log("[*] aClass.a function is called"); var findCode = this.a(a, b); var secret = ""; for (var i=0; i<findCode.length; i++){ secret = secret + String.fromCharCode(findCode[i]); } console.log("[*] SecretKey = " + secret); return findCode; } }); """ try: device = frida.get_usb_device(timeout=10) pid = device.spawn([PACKAGE_NAME]) print("App is starting ... pid : {}".format(pid)) process = device.attach(pid) device.resume(pid) script = process.create_script(jscode) script.on('message',on_message) print('[*] Running Frida') script.load() sys.stdin.read() except Exception as e: print(e)
지금은 Uncrackable-Level2 를 풀어보고 있는데, 이번엔 네이티브 함수를 후킹해야 할 것 같다.
무궁무진한가보다 ㅎㅎ...
#오류
없다. 머리가 아프다.
'모의해킹 > Uncrackable' 카테고리의 다른 글
Uncrackable-Level2 문제 풀이(frida Hooking) (0) | 2020.04.01 |
---|---|
Uncrackable-Level1 문제 풀이 (0) | 2020.02.10 |