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