일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- on-stack replacement
- custom packer
- v8 optimizing
- 안티디버깅
- pthread
- Obfuscator
- android inject
- so inject
- 난독화
- linux thread
- v8 tracing
- Linux custom packer
- Injection
- Linux packer
- Android
- uftrace
- LLVM 난독화
- LLVM Obfuscator
- apm
- on stack replacement
- tracerpid
- tracing
- anti debugging
- linux debugging
- OSR
- initial-exec
- pinpoint
- LLVM
- TLS
- thread local storage
- Today
- Total
목록Knowledge (33)
Why should I know this?
Android 파헤치기 0. 시작하기 전에...'Android 파헤치기'에서 다루고자 하는 것은 Android라는 오픈소스를 구성하는 Stack 중에 가상머신(현재는 Runtime으로 대체되었다) 자체이다. 그러므로 응용 개발이나 프레임워크 개발을 하시는 분들에게 유용한 정보가 많지 않을 수도 있다. 1. Android의 어플리케이션 구동 구조Android의 Application이 구동하는 구조는 다소 복잡하다. 이렇게 복잡한 구성을 갖게 된 이유는 Android가 OS의 필요성에 따라 여러 상태로 전환되야 하기 때문이다. 그리고 Android의 응용 어플리케이션은 가상머신에서 동작하기 때문에 가상머신을 Process에 녹여내는 기술도 함께 포함이 되어있다. 이 부분은 굉장히 재미있는 요소가 많은데 예를..
Android 파헤치기 0. 시작하기 전에...'Android 파헤치기'에서 다루고자 하는 것은 Android라는 오픈소스를 구성하는 Stack 중에 가상머신(현재는 Runtime으로 대체되었다) 자체이다. 그러므로 응용 개발이나 프레임워크 개발을 하시는 분들에게 유용한 정보가 많지 않을 수도 있다. 1. 다양한 Class Load path 전 글에서 언급했듯이, Class는 Android 가상머신의 핵심 중에 핵심이며 Class가 로드, 링킹되는 과정만 이해해도 사실상 안드로이드의 대부분은 이해했다고 해도 무리가 아니다. 그만큼 Class를 로드하는 일은 매우 높은 빈도로 다양한 곳에서 많이 발생한다. 이처럼 Class를 로드하는 Path가 다양한 이유는 다음과 같다. -. System Class와 F..
Android 파헤치기 0. 시작하기 전에...'Android 파헤치기'에서 다루고자 하는 것은 Android라는 오픈소스를 구성하는 Stack 중에 가상머신(현재는 Runtime으로 대체되었다) 자체이다. 그러므로 응용 개발이나 프레임워크 개발을 하시는 분들에게 유용한 정보가 많지 않을 수도 있다. 1. 가상머신?Android는 흔히 알다시피 가상머신이다. 가상머신이라는 개념에 대해 아주 간단히 설명드리자면, 기존의 프로그래밍 패러다임은 '하나의 언어에 하나의 머신'으로 시작됐다. 여기서 언어는 고도화되어 C가 등장하여 공용어라는 개념이 생겨났으며 머신은 OS로 대체되어 플랫폼이 되었다. 하지만 C++이 등장하여 여러 Standard 라이브러리들이 제공되고, 여러 아키텍처와 플랫폼으로 크로스컴파일 및 ..
Thread Local Storage 파헤치기 0. 개요Thread Local Storage는 Multi-Thread 프로그램을 작성하는데 거의 필수로 사용되는 기능이다.Linux에서의 Thread Local Storage에 대하 자세히 다뤄보고자 한다. 이 글에서 다루는 모든 소스코드와 예제는 github 저장소에 존재한다. https://github.com/ParkHanbum/study_tls.git 0-0. 배경 -. 프로그래밍 공학시간에 배웠듯, 프로그래밍 언어에서 지역변수는 Stack에, 전역변수는 Data 영역에 보관된다.-. 모든 프로세스에는 아키텍처에 가용한 최대한의 메모리가 가상 메모리로 제공된다. 이것을 Flat 혹은 Linear 메모리 모델이라고 부른다. 0-1. Thread 란?먼저..
apt를 통해 설치할 수 있는 debian packages들은 prebuilt되어 있으며 strip되어 있다.이를 위한 symbol 정보를 -dbg 으로 제공하는데, 이를 사용하기 위해 해야 할 작업이 있따. 여기 참고https://wiki.ubuntu.com/Debug%20Symbol%20Packages
execv로 실행한 프로세스에서 PRELOAD된 라이브러리를 구동하는 시점에.plt.got의 실행이 정상적으로 이뤄지지 않고 segfault를 발생시키는 문제가 있다.
만약 gcc를 사용하는 중에 의도치 않게 메모리 관련 에러가 발생한 경우, gcc에서 제공하는 스펙이나 표준 스펙에서 벗어난 코딩을 했을 경우가 높다.하지만 gcc가 내재한 버그일 가능성은 여전히 존재한다. gcc의 최적화는 각 단계가 독립적으로 진행되기 때문에 이전 단계에서 발생한 버그가 차후 스텝에 영향을 미쳐이를 디버깅하는게 절망적으로 어렵게 느껴지기도 한다. 이를 gcc 측에서도 인지하고 있기 때문인지 각 단계마다 결과물을 dump하여 확인할 수 있도록 제공하고 있다. gcc는 front-end에서는 tree라는 구조체를 메인으로 사용하며, front-end가 종료되는 시점에 tree를 rtl로 변환하여 back-end에 전달한다. -fdump-tree-all; gcc front-end의 각 스텝..
-fno-inline static으로 선언된 함수들은 소스코드 상에서는 함수로 존재하지만, 바이너리에는 inline 됨. 컴파일 시에 GCC 옵션으로 이를 방지하면 tracing하기 편해짐. (참고 링크 : stackoverflow )-fkeep-inline-functionsinline function 유지 옵션. -gdwarf-2 dwarf 2이상의 format을 사용. -fdump-tree-alltree 생성 과정을 모두 덤프하여 파일로 저장 -fdump-tree-all-detailstree 생성 과정에서 발생하는 모든 event를 함께 저장 -fdump-rtl-all최적화 과정을 모두 덤프하여 파일로 저장
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 지정...