일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- linux debugging
- initial-exec
- Obfuscator
- Android
- v8 tracing
- 안티디버깅
- on stack replacement
- on-stack replacement
- apm
- tracing
- TLS
- LLVM 난독화
- pthread
- uftrace
- LLVM Obfuscator
- tracerpid
- LLVM
- linux thread
- OSR
- v8 optimizing
- anti debugging
- so inject
- pinpoint
- Linux custom packer
- 난독화
- custom packer
- Linux packer
- thread local storage
- Injection
- android inject
- Today
- Total
목록Knowledge (33)
Why should I know this?

ARM 에서는 Self-Modifying code를 사용할 경우를 위한 Guide를 제시하고 있다. ARM Cortex-M Programming Guide to Memory Barrier Instructions 위 링크에서 다루는 내용은 ARM cortext M0 이후 세대 M3 ARMv7 이후 제품군에서 필요할 수도 있는 Memory Barrier 명령군에 대해서 다루고 있다. 상업적으로 말하면, ARMv7 이후 제품들이 실질적으로 안드로이드 스마트폰에서 사용되었으므로, 거의 대부분의 Self-Modifying code를 Android에서 구현하고자 하는 개발자들이 알아두면 좋을 내용이다. ARMv7 이후 제품군에서는 Super-Scalar (슈퍼스칼라 or 슈퍼스케일러) 아키텍처를 채택하여 Memor..

오픈소스 uftrace(https://github.com/namhyung/uftrace)의 개발에 참여하면서, Tracing 도구를 개발하고 동시에 이용하는 입장으로서 Tracing에 대한 고찰을 정리해보고자 한다. 지난 주에 Naver에서 주최한 Pinpoint 세미나에 참석했었다. Pinpoint는 Naver에서 개발하여 공개한 오픈소스이며, APM (Application Performance Management) 도구이다. 위 그림처럼 Pinpoint는 수려한 UI를 갖추고 있다. 고품질의 UI에 걸맞게 Pinpoint는 github에서도 인기가 좋다. (https://github.com/naver/pinpoint) 8,900의 스타로 9천개 스타에 진입하고 있다. 국내 IT 대기업들은 자체적으로 ..
보안 솔루션은 절대로 자신들의 역량으로 검증 불가능한 영역의 코드를 호출해서는 안된다. 검증 가능한 영역으로 로직을 가져오려는 노력을 게을리하지 않았으면 좋겠다. 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!
안드로이드의 ndk-build 시 기본으로 object의 디버깅 정보를 strip하도록 되어있다.디버깅 하기 편하려면 이를 끄는게 좋다. # Don't strip debug builds ifeq ($(APP_OPTIM),debug) cmd-strip := endif 뒤의 옵션을 .mk에 추가하자.
가장 강력하고 높은 수준으로 Android OS를 제어하고자 한다면 자체 빌드한 AOSP를 기기에 설치하는 것보다 좋은 방법은 없다. 다음은 grouper(넥서스 7)용 커널의 빌드 방법을 cmd 순서로 정리한 내용이다. export ARCH=arm export CROSS_COMPILE=`pwd`/../prebuilts/gcc/linux-x86/arm/arm-eabi-4.6/bin/arm-eabi-make tegra3_android_defconfig http://dmitry.gr/?r=06.%20Thoughts&proj=04.%20Android%20M%20on%20Grouper #get Android M AOSP into folder called M mkdir L mkdir M cd M repo init..
Android에서 특별한 목적으로 shared object를 injection하고자 할 때, 사용할 수 있는 가장 쉬운 방법이다. 아래처럼 app_main.cpp 소스를 수정하여 zygote가 app_process를 실행하기 전에 LD_PRELOAD 환경을 지정하여 shared object를 우선적으로 로드하도록 만들 수 있고 여러 재밌는 행위를 할 수 있다. frameworks/base/cmds/app_process/app_main.cpp:166 char value[PROPERTY_VALUE_MAX]; property_get("ro.kernel.qemu", value, ""); bool is_qemu = (strcmp(value, "1") == 0); if ((getenv("NO_ADDR_COMPAT_..
0. 개요 이 글의 내용은 DEX를 메모리에서 로드하는 기법을 다루고 있습니다. 제가 2018년 고안하였으며 이 글은 2019년에 글을 작성되었습니다. 그간 비공개로 해놨으며, github를 통해 다음 프로젝트처럼 동일 기법이 오픈소스로 공개되어 있는것을 확인되어 공개로 전환합니다. https://github.com/yongyecc/dexshellerInMemory GitHub - yongyecc/dexshellerInMemory: android APK一键DEX加固脚本(内存加载DEX) android APK一键DEX加固脚本(内存加载DEX). Contribute to yongyecc/dexshellerInMemory development by creating an account on GitHub. githu..