-
[2019picoCTF] droids0System/CTF 2019. 10. 12. 22:28
이번에 진행된 picoCTF에서 안드로이드(.apk) 문제가 있어서 한번 풀어봤다. 뉴비들 상대로 진행된 CTF이기 때문에 난이도는 쉬운 편에 속한다. 우선 어플을 실행하면 입력박스/버튼/텍스트뷰 3가지로 구성된 화면을 볼 수 있다. 우리가 입력한 값이 어플 내부에서 검증된 값이면 "I'm a flag!"위치에 Flag값이 출력되는 구조이다. JEB로 어플의 MainActivity를 보면, 주황박스에서는 버튼을 눌렀을 때의 처리를 하고 빨간박스에서는 hellojni.so를 로드하는 모습을 볼 수 있다. 우선 버튼을 눌렀을 때의 동작을 살펴보자 getFlag( )의 첫 번째 인자에는 우리가 텍스트박스에 입력한 값이, 두 번째 인자에는 어플의 Context값이 넘어간다. 우리가 입력한 값(arg2)를 pap..
-
[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으로 변환하는 작업이 있기 마련이다. 이런 상황에서 문자..
-
[FRIDA] App 변수 후킹하는 법Mobile/Frida 2019. 10. 7. 20:17
Frida로 App의 변수값에 접근하여 값을 출력하고 수정하는 법에 다루도록 하겠다. App을 JEB로 열어보면 위 그림처럼 변수들이 사용되고 있는 것을 확인할 수 있다. Frida Javascript API 중 'Java.choose("class",Callback)'API를 이용해서 위 변수들에 접근할 수 있는데, 여기서는 MainActivity에 선언된 lose변수에 접근해서 값을 출력하고 원하는대로 조작하는 것을 목표로 해보겠다. Java.choose("com.example.HOOKAPP.MainActivity", { onMatch: function(instance) { HOOKING CODE~~~ }, onComplete: function() { HOOKING CODE~~~ } }); Java.c..
-
DLL 바이너리 수정으로 BreakPoint 걸기System/Reversing 2019. 10. 7. 19:23
프로그램을 분석하다보면, 안티디버깅의 탐지로 인해일반적인 디버거(x64dbg, windbg...)의 동적분석이 불가능한 경우가 있다.디버거로 탐지를 우회하는 방법도 있지만, CheatEngine은 탐지 안하는 경우가 많기 때문에해당 툴로 동적분석을 진행할 수 있다. CheatEngine자체의 BP기능을 사용할 수도 있지만, 이것 또한 사용하지 못하는 경우에는아래와 같은 방법으로 BP를 걸 수 있다. [ DLL 바이너리 수정 ]DLL의 2Byte opcode를 "EB FE"로 수정하면 해당 부분에서 BP가 걸린듯한 효과를 볼 수 있다. 또한, "int3"(CC) Interrupt를 탐지하는 안티 디버깅도 우회할 수 있다. "EB FE"는 자기 자신으로 JMP하는 opcode로서, CheatEngine으로 ..
-
[FRIDA] Android HashMap 오브젝트 출력하는 법Mobile/Frida 2019. 10. 4. 10:59
Frida로 HashMap 오브젝트의 값을 출력해야 할 때가 있다. var HashMapNode = Java.use('java.util.HashMap$Node'); var iterator = hashmap.entrySet().iterator(); while (iterator.hasNext()) { var entry = Java.cast(iterator.next(), HashMapNode); console.log(entry.getKey()); console.log(entry.getValue()); } 그럴 때는 위 코드로 HashMap 오브젝트에 접근할 수 있다. 2020.04.03 추가 - java.util.Map 오브젝트도 위와 동일한 방법으로 출력할 수 있다. 출처 - https://github.co..
-
Android App에서 Memory Corruption Exploit이 불가능한 이유Mobile/Android 2019. 9. 21. 21:06
[ 안드로이드 시스템 아키텍처 ] 위 그림은 Android System을 나타낸다.일반적으로 사용하는 App들은 DalvikVM 내부에서 SmaliCode가 해석되어 실행된다. [1] DalvikVM은 Register-based System이라는 특징을 가지고 있다.약 64,000개의 레지스터가 있으며, 이 중 16개 또는 256개만 사용하는게 일반적이다.따라서, DalvikVM에는 Stack이라는 개념이 없고 이 때문에 Stack-based Buffer Overflow가 발생하지 않는다.다르게 해석하면, DalvikVM이 아닌 Native Code(JNI)에서는 Stack-based Buffer Overflow가 발생할 수 있다. [2] Java에는 Array Layout Check기능이 기본으로 적용..
-
Android Hacker's Handbook_2장 [정리 및 번역]Mobile/Android 2019. 9. 21. 20:34
해당 번역글은 개인 공부를 위해 번역한 글로써, 다소 틀린 표현들이 있을 수 있으니 참고할 때 유의해주시길 바랍니다. 원문은 https://www.pdfdrive.com/android-hackers-handbookpdf-e39599871.html 여기에서 받으실 수 있습니다. [2장. 안드로이드 보안 설계 및 아키텍처] 안드로이드는 보안 검사 및 처리를 몇 가지 메커니즘으로 구성하고 있다. 다른 운영 체제와 마찬가지로 이러한 메커니즘(App/User), 객체(App/File,Device) 및 수행할 작업(읽기,쓰기,삭제 등)에 대한 정보를 교환할 수 있다. 대부분의 경우에서는 이러한 과정에서 문제가 발생하지 않지만, 어떠한 균열을 통해 이러한 정보들이 빠져나가 공격자에게 좋은 기회를 제공하기도 한다. 2..