일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- pthread
- LLVM
- custom packer
- v8 optimizing
- v8 tracing
- Injection
- Android
- uftrace
- so inject
- on stack replacement
- Linux custom packer
- android inject
- initial-exec
- LLVM 난독화
- LLVM Obfuscator
- anti debugging
- linux debugging
- 안티디버깅
- 난독화
- on-stack replacement
- OSR
- apm
- Obfuscator
- pinpoint
- thread local storage
- linux thread
- Linux packer
- TLS
- tracing
- Today
- Total
목록분류 전체보기 (139)
Why should I know this?
* DroidKnights 2021 에서 발표했던 내용 일부를 발췌한 글 입니다.* Native 코드를 개발할 때, 특히 Android 와 같이 개발사/기기사 간 특수성이 존재하는 개발환경에서는 시스템에 밀접한 작업을 하는 보안 모듈 특성 때문에 충분한 테스트가 늘 아쉽기 마련이다. 혹시 모를 경우를 대비해 Crash를 Handling함으로서 적어도 Crash 때문에 배포날의 긴장도를 낮춰보도록 하자. 예제 코드 : https://github.com/ParkHanbum/mystudy/tree/master/signal_handler 시나리오는 다음과 같다. 1. 갱신된 함수를 실행하기 전에 signal 들에 대한 handling 추가. 2. signal 이 발생했을 경우를 위한 복원점 지정 3. signa..
여러가지 이유(?)로 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..
AOSP 에서 ART 라고 불리는 Android runtime은 DEX Bytecode를 Compile 하는 기능이 포함되어 있습니다. 해당 Compile에는 Optimizing 도 포함되어 있으며 이 글은 LoopOptimizing을 살펴보고자 작성했습니다. 최적화는 매우 어렵운 분야라는 생각이 있고 실제로도 그렇지만 LoopOptimizing 은 얕게 보면 이런것도 최적화야? 라는 생각이 들게 합니다. 그만큼 입문으로 좋지 않을까 하네요?! ETRI에서 낸 PAPER중에 Static Dalvik Bytecode Optimization for Android Applications 이 있습니다. 이 논문에서는 DEX bytecode를 LLVM IR로 변환하여 Loop 최적화를 하는 과정을 소개하고 있습니..
Hashmap을 uftrace에서 활용하기 위해 Android 구 버전에서 hashmap 구현을 복붙하는 과정에서, https://github.com/ParkHanbum/android_c_hashmap GitHub - ParkHanbum/android_c_hashmap: C collection hashmap from android (4.3) C collection hashmap from android (4.3). Contribute to ParkHanbum/android_c_hashmap development by creating an account on GitHub. github.com Hashmap의 구현에 대해 조금 공부를 해보게 됐다. Hashmap에 대해서는 이 블로그를 참고하면 좋을 것 같다...
Ctrl + , 로 설정을 열고 clang_format 검색 { BasedOnStyle: LLVM, IndentWidth: 2, UseTab: Never, TabWidth: 2, ColumnLimit: 0 }
C++ / JAVA 와 같이 class와 상속을 지원하는 언어들은 class를 linking 하는 과정이 필요하다. AOSP에 구현된 JVM을 통해 이 과정을 간단히 살펴보자. 왜? 재밌으니까~? Class와 Instance 의 차이를 알고 계십니까? Class는 설계도이고 Instance는 Class 설계도를 메모리에 적재한 것을 말하죠. 위 그림처럼 Class의 설계도는 ..dex=안드로이드 파일에 보관되어 있습니다. class를 생성하는 과정에서 해당 설계도를 기반으로 ClassObject를 만듭니다. Class는 Variable/Method 로 이루어져있고 Variable은 ClassObject에, Method들은 Method 를 보관하는 테이블에 보관되며 해당 Method들에 대한 Index가 ..
OPT 의 PASS를 개발하는 경우 OPT가 불러들이기 때문에 LLVM LIBS를 링킹하지 않아도 된다. 하지만 LLVM을 기반으로 새 TOOL을 작성하고자 하면 다음처럼 LLVM LIBS를 링킹해줘야 한다. LDFLAGS_LLVM := $(shell llvm-config --system-libs --ldflags --libs) LDFLAGS := -g -lstdc++ -lz -lpthread -ldl $(LDFLAGS_LLVM) 이걸 몰라서 얼마나 고생했는지 ㅠ
설명 : C/C++ 코드의 초기 버전을 찾아 히스토리를 보는게 가끔은 유용할 때가 있다. 위처럼 초기 버전을 찾아가는 C/C++ 코드에서는 소스코드 마지막 라인을 blame해서 쉽게 초기 버전을 찾을 수 있는 경우가 많다. 예2) m@M:~/llvm-project/llvm/lib/Transforms/Scalar$ wc -l LoopInstSimplify.cpp 247 LoopInstSimplify.cpp m@M:~/llvm-project/llvm/lib/Transforms/Scalar$ git blame -L247,+1 LoopInstSimplify.cpp e6c30fdda7991 (Chandler Carruth 2018-05-25 01:32:36 +0000 247) } m@M:~/llvm-project..
LLVM IR 중에 PHI 라는 것이 종종 보인다. PREDS와 PHI 는 처음 LLVM 을 접하게 된다면 생소한 개념이라 약간 헤깔린다. phi 관련 내용은 wiki 에 자세히 나와있으니 참고하시고 (https://en.wikipedia.org/wiki/Static_single-assignment_form) 몇 가지 핵심만 요약정리 해보자. 1. 일단 이름부터 왜 phi 인가하면 기호가 진짜 phi 이다 = called a Φ (Phi) function 2. phi 의 정의 preds가 명목상 모든 연관 노드라고 하면, phi 는 특별하게 연관된 노드이다. 구체적으로 이전 노드에 의존적인 관계에 있는 노드이다. %retval = phi i32 [%a, %btrue], [%b, %bfalse] 위의 ph..