일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Android
- Injection
- LLVM Obfuscator
- custom packer
- pinpoint
- TLS
- 안티디버깅
- Linux packer
- on-stack replacement
- initial-exec
- OSR
- LLVM
- Obfuscator
- v8 tracing
- LLVM 난독화
- 난독화
- v8 optimizing
- linux thread
- on stack replacement
- linux debugging
- tracerpid
- apm
- anti debugging
- Linux custom packer
- so inject
- android inject
- thread local storage
- uftrace
- tracing
- pthread
- Today
- Total
목록Knowledge/Android (17)
Why should I know this?
모종의 이유로 Linux에서 AOSP를 빌드한 후 DEX를 실행하고 싶다면 이 글이 도움이 될 겁니다. 먼저 Linux에서 AOSP를 빌드할 때 사용하시는 컴퓨터에 맞는 아키텍처로 빌드하세요. 아직까지 AOSP는 x86에서만 빌드할 수 있으므로 x86_64를 선택하시면 될겁니다. dalvikvm을 실행하기 위한 스크립트 : #!/bin/sh # base directory, at top of source tree; replace with absolute path base=`pwd` # configure root dir of interesting stuff root=$base/out/target/product/generic_x86_64/system export ANDROID_ROOT=$root # confi..
여러가지 이유(?)로 SystemCall를 직접 하는 경우가 존재합니다. 해서 이번 글에서는 간단히 SystemCall을 직접하는 방법을 알아볼까 합니다. /* * Generic syscall call. * Upon entry: * %rax: system call number * %rdi: arg0 to system call * %rsi: arg1 * %rdx: arg2 * %rcx: arg3 - syscall expects it at %r10 * %r8: arg4 * %r9: arg5 */ #include "arch/bionic_asm.h" ENTRY_PRIVATE(syscall) # All arguments are passed via registers. # (Not all will be valid, ..
Frida 같은 도구가 Hooking을 통해 여러가지 인터페이스를 제공하죠. 이번 글에서는 Android의 Java Layer에서 어떻게 Hooking이 벌어지는지 아주 간단히 살펴보고자 합니다. >Class 가 LOAD 되는 과정 입니다. 위 그림처럼 Class의 설계도는 .dex=안드로이드 파일에 보관되어 있습니다. class를 생성하는 과정에서 해당 설계도를 기반으로 ClassObject를 만듭니다. Class는 Variable/Method 로 이루어져있고 Variable은 ClassObject에, Method들은 Method 를 보관하는 테이블에 보관되며 해당 Method들에 대한 Index가 vtable에 보관됩니다. 위에서 언급한 과정을 좀더 자세히 도식화하면 위와 같습니다. 1. 첫 번째 H..
/system/bin/dex2oat --zip-fd=6 --zip-location=/system/app/Email.apk --oat-fd=7 --oat-location=/data/dalvik-cache/system@app@Email.apk@classes.dex --profile-file=/data/dalvik-cache/profiles/com.android.email /system/bin/dex2oat --image=/data/dalvik-cache/system@framework@boot.art --runtime-arg-Xms64m --runtime-arg -Xmx64m --dex-file=/system/framework/core-libart.jar --dex-file=/system/framework/c..
ARMv7 아키텍처에서 동적생성된 코드를 실행하거나 복호화 후 실행 시에 알 수 없는 이유로 SIGSEGV 나 SIGILL이 발생하는 경우가 있습니다. 빈도 또한 일정치 않고, 디버깅조차 어려우므로 이곳에 해결책을 기재해 공유하고자 합니다. 해결책은 Android의 다음 commit 을 참조하시면 됩니다. git clone https://android.googlesource.com/platform/art git show aeba572be73559c310de758dbcdac901e064ec07 platform/art - Git at Google android.googlesource.com 위의 코드에 대한 설명은 다음과 같습니다. 가상메모리가 물리메모리와 매핑되어 있지 않을때 Cacheflush는 실패합니..
보안 솔루션은 절대로 자신들의 역량으로 검증 불가능한 영역의 코드를 호출해서는 안된다. 검증 가능한 영역으로 로직을 가져오려는 노력을 게을리하지 않았으면 좋겠다. 1. Shared Object 암호화 은닉 후 Runtime에 복호화하여 로드하기 Android 보안솔루션 중에는 shared object를 로드하는 경로를 변경하는 경우가 있다. System.loadLibrary("library_name");Android에서 라이브러리를 로드하는 방법은 위처럼 System.loadLibrary를 사용하거나 뭐 딴 방법을 쓰거나 여러가지 있다. 특정 보안솔루션들은 shared object가 공격자에게 노출되면 위험하다는 생각을 하는 것 같다. 그래서 이들은(N사) shared object를 실행 전에 임의의 경..
Android에서 모든 Activity는 ActivityThread에 mInstrumentation이란 녀석이 관장한다. Android에서 제공하는 Test Framework도 이녀석을 사용하는데... 이를 활용하면 재미있는 작업을 할 수 있다. Application 보호용 솔루션을 자동화 테스트하는데 이만한 방법이 없다는 생각을 했었다. 왜 그런 생각을 했는지 소스코드와 함께 살펴보자. 아래는 reflection 패턴을 활용하여 mInstrumentation을 교체하는 소스코드이다. private void changeInstrumetation() { try { // replace instrumentation. Application -> LoadedApk -> ActivityThread Object mL..
안드로이드에서 Application의 시작부터 Debugging을 하고 싶다면 JNI_OnLoad부터 시작해야 한다.해당 지점은 아래처럼 찾을 수 있다. Dump of assembler code for function dvmLoadNativeCode(char const*, Object*, char**): 0x40957c08 : stmdb sp!, {r4, r5, r6, r7, r8, r9, r10, r11, lr} 0x40957c0c : mov r6, r1 0x40957c0e : ldr r1, [pc, #604] ; (0x40957e6c ) 0x40957c10 : sub sp, #36 ; 0x24 0x40957c12 : ldr.w r11, [pc, #604] ; 0x40957e70 0x40957c16 :..
## 생각나면 나중에 정리할 예정 Download AOSP from googlesource.com https://source.android.com/setup/build-numbers download Drivers for Nexus7(grouper).https://developers.google.com/android/drivers build! Flush!EnJoy it!