Frida
-
Taint Analysis ( IDA lighthouse & FRIDA )System/Reversing 2020. 4. 17. 00:53
Taint Analysis란, 프로그램이 동작하면서 실행되는 코드의 흐름을 파악하는 분석 기술이다. 좀 더 직관적으로 설명하면, 실행되는 Instruction마다 색을 칠해놓고 전체적인 결과를 보면 실행된 Instruction만 색이 칠해져 있을 것이다. 실제 코드가 실행되는 부분을 파악할 수 있기 때문에 분석할 때 엄청난 이점이 될 수 있다. IDA의 lighthouse은 DBI툴로 얻은 Taint Analysis결과를 코드블럭에 표시해주는 플러그인이다.lighthouse와 호환되는 DBI툴은 PIN, DynamoRIO, FRIDA가 있으며, 그 중 FRIDA를 사용하는 방법을 소개하려고 한다. PIN툴은 Intel아키텍처에서만 지원되고, DynamoRIO는 MacOS 64bit를 지원하지 않는 것 같..
-
FRIDA Cheat SheetMobile/Frida 2020. 3. 2. 06:32
1. 메모리 스캔 및 검색 2. Boolean 값 생성 3. Class 인스턴스 생성 및 Method 호출 4. ByteArray 출력 5. Native 함수 NOP 처리 6. Natvie 함수 인자값 및 반환값 조작 메모리 스캔 및 검색 function Memory_scan() { var ranges = Process.enumerateRangesSync({protection: 'r--', coalesce: true}); var range; function Next_Range(){ range = ranges.pop(); if(!range) { console.log("Memory Scan Done!"); return; } Memory.scan(range.base, range.size, "70 79 30 7..
-
Anti-Debugging 우회 ( ptrace 선점 )Mobile/Frida 2020. 2. 29. 03:23
안티디버깅이 적용되어 있는 어플을 IDA나 GDB로 Attach하려고 하면 앱이 바로 종료되어 버린다. 또한, ptrace를 미리 선점하는 방식으로 안티디버깅이 적용된 경우도 있다. 이런 방식의 안티디버깅을 우회할 수 있는 방법 중 dlopen( )으로 우리가 원하는 라이브러리가 로드됐을 때, 바로 sleep을 걸어서 안티디버깅이 동작하기 전에 디버거를 Attach 해주는 방법이 있다. Interceptor.attach(Module.findExportByName(null, "dlopen"), { onEnter: function(args) { this.libc_name = Memory.readUtf8String(args[0]); if (this.libc_name.indexOf("libfoo.so") !==..
-
FRIDA Hooking (OWASP - UnCrackable2)Mobile/Frida 2019. 12. 22. 01:30
OWASP-mstg : https://github.com/OWASP/owasp-mstg/tree/master/Crackmes OWASP Mobile Crack 트레이닝 중 Level2 문제풀이이다. 문제풀이는 FRIDA를 이용할 것이며, Level1 문제풀이는 여기에서 확인할 수 있다. UnCrackable2_exit( ) Hook adb install을 통해 App을 디바이스에 설치해주고 실행 시켜보도록 하자 루팅된 디바이스일 경우, 위와 같이 "Root Detected!" 경고창이 팝업되면서 [OK]를 누르면 App이 종료된다. 따라서, App이 종료되는 루틴을 먼저 확인하고 루팅된 디바이스에서도 App을 사용할 수 있게끔 해줘야 한다. MainActivity를 보면, b.a( ) / b.b( ) /..
-
Fridump (메모리 덤프)Mobile/Frida 2019. 12. 19. 04:38
Frida를 이용한 메모리덤프를 소개 하고자 한다. 'Fridump'라는 툴인데, 프로세스의 모든 메모리영역을 Dump해서 파일로 저장해주는 툴이다. 메모리를 통째로 가져와서 분석해야할 때 유용하게 사용할 수 있다. 예를 들어, 암호화된 모듈,데이터가 Runtime 중 복호화되어 메모리에 로드되는 시점이 있을 것이다. 이 때 Fridump를 이용해서 메모리를 통째로 가져오면 복호화된 데이터를 얻을 수 있을 것이다. Fridump Fridump는 https://github.com/Nightbringer21/fridump 여기에서 다운받을 수 있다. 그리고 당연히 Frida API를 사용하기 때문에 pip install frida로 모듈을 설치해줘야 한다. Known App은 위처럼 Safari로 줘도 되지..
-
Unity Game App Hacking (궁수의 전설)Mobile/Frida 2019. 12. 18. 06:19
페이스북같은 곳에서 궁수가 활을 쏘는 게임 광고 한번씩은 보셨을 것이다. '궁수의 전설'이라는 Unity Engine기반 게임인데 FRIDA를 이용해서 게임해킹을 한번 해볼까한다. 대부분의 게임 해킹은 App을 직접적으로 변조해서 다시 리패키징하는 방식으로 진행된다. 이런 방식을 'Modding'이라고 하는데, 이렇게 하는건 별로 마음이 내키지 않았다. 그래서 App변조가 아닌, FRIDA를 이용해서 동적으로 App을 후킹하는 방식으로 시도해봤다. 우선 시작에 앞서, 궁수의 전설은 싱글 플레이 게임으로 다른 플레이어에게 영향을 끼치지 않는다. 순위나 경쟁 시스템이 없는 오로지 자신만 즐기는 게임이기 때문에 오해 없길 바란다. Method Symbol 궁수의 전설은 il2cpp방식으로 빌드된 게임이다. 따..
-
Runtime Memory PatchMobile/Frida 2019. 12. 17. 07:15
Windows의 CheatEngine처럼 App실행 중에 메모리를 스캔해서 특정 메모리를 패치하는 방법이다. FRIDA의 Process API와 Memory API를 활용하면 된다. Memory Patch Script function memscan() { var patched = false; var scan_result; // 프로세스에서 'rw-'영역 메모리 가져옴 Process.enumerateRanges('rw-', { // 'rw-'영역 Callback함수 정의 onMatch: function(range) { if(!patched) {// pattern: py0zz1 scan_result = Memory.scanSync(range.base, range.size, '70 79 30 7a 7a 31'..
-
Unity기반(il2) 게임 App 분석Mobile/Android 2019. 11. 24. 05:52
요즘 재밌고 인기있는 게임들은 대부분 Unity Engine으로 개발되고 있다. 대표적으로 포켓몬Go, 궁수의전설, 거지키우기 등 이 있다. Unity기반의 게임들은 JVM이 아닌 Native에서 코드가 구현되어 실행된다. JVM단에서는 Native라이브러리를 로드만 해주고, 실질적인 게임기능들은 Native단에 로드된 라이브러리에서 처리된다. 해당 라이브러리들은 '/lib'에 위치하고 있다. Unity게임 개발자들은 컴파일 방식을 'mono'와 'il2cpp' 두 가지 방식 중 선택해서 빌드가 가능한데, 예전에는 대부분 게임들이 Interpreter처리방식으로 속도가 빠른 'mono'를 선호했다. 하지만, 안정성 이슈와 보안적인 부분이 미흡하여 'il2cpp'로 많이 개발되는 추세이다. 따라서, 이번 ..