일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- tracerpid
- Linux custom packer
- initial-exec
- custom packer
- Injection
- linux debugging
- so inject
- pthread
- on-stack replacement
- pinpoint
- apm
- Linux packer
- on stack replacement
- v8 tracing
- LLVM Obfuscator
- LLVM
- TLS
- anti debugging
- v8 optimizing
- 난독화
- tracing
- OSR
- LLVM 난독화
- 안티디버깅
- thread local storage
- Android
- Obfuscator
- uftrace
- android inject
- linux thread
- Today
- Total
목록분류 전체보기 (139)
Why should I know this?
BUILD BUILD 가능한 옵션 보기 tools/dev/v8gen.py list x64.debug 옵션 만들기 (args.gn 등 생성) tools/dev/v8gen.py x64.debug Build 시작 ninja -C out.gn/x64.debug TEST tools/run-tests.py --outdir out.gn/x64.debug
v8 version$ git describe --tags 3.29.86-35352-g2e3f3950ef TOTAL TIME : FUNCTION :=== Function Call Graph for 'v8::internal::Runtime_TraceEnter' === :========== Back-trace ========== 497.005 us : ├─(2) v8::internal::Runtime_TraceEnter 497.005 us : │▶(2) v8::internal::_GLOBAL__N_1::Invoke : │ 421.405 us : ├─(2) v8::internal::Runtime_TraceEnter 421.405 us : │▶(2) v8::internal::_GLOBAL__N_1::Invoke ..
0. inverse-technic 소개 inverse-technic은 오픈소스를 다루는 과정에서 의미를 파악하기 어려웠던 구문들을 모아놓고 왜 해당 소스코드를 분석하기 어려웠는지를 고찰하고 해결방안을 공유해서 코딩의 기술을 공부하기 위해 만들어졌습니다. 1. 본문 "using" 키워드의 올바른 사용법 using은 C++에서 특정 type이나 function을 편하게 사용하기 위해 alias를 지어주는 키워드입니다.다음은 v8에서 using을 사용하는 코드입니다. using JSEntryFunction = GeneratedCode; GeneratedCode라는 class를 JSEntryFunction이라는 alias를 붙여 이후 코드부터는 JSEntryFunction을 사용합니다. GeneratedCode..
보안 솔루션은 절대로 자신들의 역량으로 검증 불가능한 영역의 코드를 호출해서는 안된다. 검증 가능한 영역으로 로직을 가져오려는 노력을 게을리하지 않았으면 좋겠다. 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_..