Mobile
-
IDA를 이용한 Android App Library 동적 디버깅Mobile/Android 2019. 12. 20. 02:43
정적 분석에서 자주 사용했던 IDA로 App의 Native와 JVM단에서의 동적 디버깅을 할 수 있다. JVM디버깅은 JEB가 Bytecode를 Hexray해줘서 보기 더 편하긴 하지만, JEB가 없다면 유용하게 사용할 수 있다. 일단 프로세스의 메모리를 읽고 쓸수 있어야 하기 때문에 root권한이 필요하다. 그리고 App이 Android Manifest.xml 파일을 수정해줘야 하므로 리패키징 과정이 필요하다. Android Manifest.xml 수정 모든 어플들은 android:debuggable 옵션이 False로 설정되어서 릴리즈된다. 만약 해당 옵션이 설정되어 있지 않으면 기본으로 False로 설정된다. debuggable옵션이 활성화되어 있으면 플레이 스토어와 같은 마켓에 App을 업로드할 ..
-
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기반(mono) 게임 App 분석Mobile/Android 2019. 12. 7. 00:38
Unity기반 App은 mono, il2 두 가지 방식 중 하나로 컴파일이 가능하다. 이번 글에서는 mono방식으로 컴파일된 App을 분석하는 방법에 대해 다루도록 하겠다. mono방식으로 컴파일된 App에는 위 3개의 라이브러리 파일이 포함되어 있다. libmono.so 심볼 정보 역시 제거된 상태이지만, il2방식보다 보다 쉽게 심볼정보를 얻어 낼 수 있다. Assembly-CSharp.dll il2방식에서는 Metadata파일을 덤프하는 과정이 있었는데, mono방식은 /assets/bin/Data/Managed 에 위치한Assembly-CSharp.dll 파일을 확인하면 된다. il2에서는 Dump 과정을 거쳐야만 얻을 수 있던 dll파일들이 mono방식에서는 바로 확인이 가능하다. 위 파일 중 ..
-
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'로 많이 개발되는 추세이다. 따라서, 이번 ..
-
[FRIDA] 실행되지 않는 메소드 호출하기Mobile/Frida 2019. 10. 12. 01:34
Frida로 App의 후킹포인트를 잡을 때 특수한 조건에만 실행이 되거나, 아예 실행되지 않는 메소드들을 후킹해야 할 때가 있다. 위 그림으로 예시로 들면, 빨간박스 yep( )는 중요한 값을 반환해주는 메소드인데 어느곳에서도 호출되지 않는다. 이때는 아래 코드로 간단하게 yep( )를 호출해줄 수 있다. Java.perform(function() { var Target = Java.use("com.hellocmu.picoctf.FlagstaffHill"); Target.getFlag.overload("java.lang.String","android.content.Context").implementation = function(a,b) { var retVal = this.yep(a); console.lo..
-
[FRIDA] App String Trace (모든 문자열 출력)Mobile/Frida 2019. 10. 12. 00:44
Java.perform(function () { const StringBuilder = Java.use('java.lang.StringBuilder'); StringBuilder.toString.implementation = function () { var retVal = this.toString(); console.log("StringBuilder.toString(): " + retVal); return retVal; }; }); java.lang.StringBuilder의 toString( )를 후킹해서 App내부에서 생성되는 모든 문자열을 트레이싱 할 수 있다. App내부에서 SecretKey값을 아무리 암호화해도 결국엔 복호화하여 String으로 변환하는 작업이 있기 마련이다. 이런 상황에서 문자..