일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- LLVM 난독화
- v8 optimizing
- tracerpid
- linux thread
- pthread
- Injection
- v8 tracing
- tracing
- so inject
- Linux custom packer
- 난독화
- linux debugging
- 안티디버깅
- Android
- Linux packer
- on stack replacement
- uftrace
- on-stack replacement
- initial-exec
- LLVM Obfuscator
- thread local storage
- pinpoint
- TLS
- OSR
- Obfuscator
- android inject
- anti debugging
- LLVM
- custom packer
- apm
- Today
- Total
목록Knowledge/Compiler (6)
Why should I know this?
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 최적화를 하는 과정을 소개하고 있습니..
본문 작성에 앞서 해당 난독화 기법의 모티브를 소개합니다. engineering.linecorp.com/ko/blog/code-obfuscation-compiler-tool-ork-2/ 오크(ORK) – 난독화 컴파일러 도구 2편 - LINE ENGINEERING 안녕하세요. LINE에서 클라이언트 보호 솔루션인 AIR ARMOR 개발을 담당하고 있는 정상민입니다. 지난 1편에선 예제 소스 코드의 컴파일 과정을 살펴보며 난독화가 실행되는 단계를 확인했습니다. engineering.linecorp.com Line에서 자체 개발 중인 난독화 기법 중에 Control Flow Graph Flattening 이라고 소개된 기법이 있습니다. 말하자면, 뭐 이것은 Line에서도 쓰는 기법이다! 라고 호가호위 해보려..
난독화 기법을 조금이라도 더 쉽게 개발하는 방법은 다음과 같다. - C로 짠 로직을 통해 IR을 뽑아내기 - IR을 기반으로 LLVM OPT 패스 만들기 먼저 순수 C로 예제코드를 만들고, C에서 목적한 난독화 기법을 구현해본다. 이번에 구현하고자 하는 난독화는 CALL 을 난독화 하는 것이며, C 로 구현된 코드는 아래와 같다. #include void foo(); void (*t)() = foo; void (*tt)() = (void (*)())((long)&foo + 1); long test = ((long)&foo) + 65536; long test2 = (long)&foo + 1; void foo() { puts("TEST\n"); } int main() { ((int (*)()) (test -..
LLVM은 GCC와 함께 컴파일러의 양대 산맥을 이루는 오픈소스 컴파일러 프로젝트이며, 컴파일러를 넘어 자신들을 '컴파일러 툴킷'으로 소개한다. 요컨데 컴파일러를 제작하기 위해 필요한 여러가지 공구들을 모아놓은 공구함이라고 할 수 있겠다. LLVM은 Front/Middle/Back 의 3단 분리를 명확하게 하고, 분리된 단 간 그리고 각 단 속에서의 PLUGIN 을 지원하기 위해 추상화 된 데이터 표현 계층인 Intermdediate Reperesntation (=IR)을 사용한다. 이런 구조를 통해 LLVM은 LLVM 참여자 뿐 아니라 컴파일러를 활용하거나 독자 모듈을 구현하는 사람들에게 광풍과도 같은 인기를 얻었으며 거의 모든 컴파일러 논문 및 연구가 LLVM을 기반으로 이뤄지게 되는 원동력을 제공할..
GCC 컴파일 관련 정리. 소스코드 다운 : (mirror - locate at japan) wget http://ftp.tsukuba.wide.ad.jp/software/gcc/releases/gcc-7.3.0/gcc-7.3.0.tar.gz 의존성 라이브러리 설치 : ./contrib/download_prerequisites 빌드 환경 설치 : sudo apt install build-essential configure :gcc source가 있는 곳에서 ./configure 하지 말 것을 권하므로, 한 단계 올라간다.cd.. mkdir buildcd build../gcc-7.3.0/configure make -j6 custom option:configure할 때 CFLAGS 와 CXXFLAGS 지정...