일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Obfuscator
- TLS
- linux thread
- custom packer
- Linux packer
- v8 optimizing
- so inject
- pinpoint
- anti debugging
- Linux custom packer
- on-stack replacement
- 안티디버깅
- v8 tracing
- Injection
- on stack replacement
- 난독화
- pthread
- uftrace
- OSR
- initial-exec
- LLVM Obfuscator
- Android
- android inject
- LLVM
- LLVM 난독화
- tracing
- tracerpid
- thread local storage
- apm
- linux debugging
- Today
- Total
목록분류 전체보기 (139)
Why should I know this?
# UFTRACE option-DCMAKE_BUILD_TYPE=debug-DCMAKE_CXX_FLAGS="-pg -g" cmake -G Ninja ../work/llvm-project/llvm -DLLVM_ENABLE_PROJECTS="clang" -DLLVM_TARGETS_TO_BUILD="host;" -DLLVM_USE_LINKER=gold -DCMAKE_BUILD_TYPE=Debug -DLLVM_ENABLE_RUNTIME=libcxx -DLLVM_ENABLE_RUNTIMES=libcxxabi // 타겟 프로젝트 clang 하나만 지정-DLLVM_ENABLE_PROJECTS="clang" // 타겟 빌드 host 하나만 지정-DLLVM_TARGETS_TO_BUILD="host;" 다음고 같은 옵션은 ..
Droid knights에서 발표한 "Android Native Module 안정적으로 개발하기" 내용 중에 내가 만든 TRY-CATCH 매크로를 공유했었는데 대충 이런식이었다. void do_signal_handling() { int sig = 0; int watch_signals = sigill | sigtrap | sigabrt | sigbus | sigsegv; fprintf(stderr, "fn size : %lx\n", get_func_size((unsigned long)&do_segv)); TRY(sig, watch_signals, do_segv1) { do_segv1(); } CATCH (sig, sigsegv, e) { fprintf(stderr, "inside catch!!\n"); f..
역공학이란 ? 역공학이란 대상에 대해 알려진 정보를 기반하여 설계 구조와 원리를 역으로 추적하는 공학 기법을 의미합니다. 프로그래밍 언어로 작성된 소스코드가 컴파일 되어 프로그램이 됩니다. 여기서 우리가 다루고자 하는 내용은 우리가 익히 알고 있는 내용(=프로그래밍 언어를 컴파일 하는 방법, 원리, 구조에 대한 정보)에 기반하여, 컴파일 된 프로그램의 구조와 원리를 역으로 추적해내는 방법입니다. 역공학은 해커들에게 기본 중에 기본인 소양입니다. 해킹을 배우고자 하는 사람들에게 프로그래밍 언어를 먼저 배우라고 권하는 이유가 여기 있습니다. 해킹이란, 프로그램(=커널 등을 포함한)의 구조와 원리를 역으로 추적하여 그 과정과 기술적 설계에 문제의 여지가 없는지를 찾아내는 학술이기 때문입니다. 하지만 꼭 프로그..
오픈소스에서 원하는 코드를 쉽게 찾는 방법을 알아보겠습니다. 이번에 찾고자 하는 코드는 gdb에서 특정 함수를 호출할 수 있게 해주는 로직! 예를 들면, gdb에서는 다음과 같은 명령을 수행할 수 있습니다 (gdb) call (void *)dlopen("/home/m/signal-checker.so", 2) I am 18500 Hello, I'm loaded!! $1 = (void *) 0x55555555a2d0 위의 명령처럼 target process context에서 특정 함수의 호출이 가능합니다. 예제에서는 dlopen을 통해 so를 로드했고, 그 결과 so의 init에서 출력해주는 메시지를 볼 수 있습니다. 1. gdb 를 tracing 가능한 형태로 컴파일한다! m@Hanbum:~/binutil..
nox 탐지 이건 빼박캔트 nox 뿐 아니라 vbox 사용하는 x86 계열 에뮬레이터 다 잡을 수 있는 시그니처 핵심은 탐지하고자 하는 대상에서 결코 사용하지 않을 수 없는 부분을 찾는 것. i8042 는 가상머신과 리얼머신간 키보드 연결을 위해 사용하되는 가상화 디바이스. 즉, 가상머신이 키보드를 사용하지 않기로 하지 않은 이상 없어질 수 없다. (동시에 i8042는 구형 IBM/PC의 키보드 스펙이므로 리얼머신에 존재할리 없다. 모바일은 더더욱)
https://docs.microsoft.com/en-us/windows/wsl/wsl-config#in-preview-options-1 Configure Linux distributions A reference guide to help you manage and configure multiple Linux distributions running on the Windows Subsystem for Linux. docs.microsoft.com WSL 2 setting preview options These options are only available in the latest preview builds if you are on the latest builds of the Windows Insiders ..
C/C++ 에서 특수한 목적으로 함수의 크기를 구하려고 한다면 셋 중 하나의 결과가 나온다. 1. 컴파일 된 binary를 nm 등을 사용해 symbol 주소와 크기를 구한다. 이런 방식으로 함수의 크기를 사용하려면 컴파일 한 후 binary에 writing해주는 과정이 필요하다. 2. 선언된 함수 뒤에 크기 계산용 더미 함수를 추가하여 주소를 계산한다. 아래와 같은 방식이다. static void fn_need_to_know_size() { return 0; } static void fn_to_mark_end() { return 0; } unsigned long size = (unsigned long)&fn_need_to_know_size - (unsigned long)&fn_to_mark_end; 하..
0. Control-flow integrity 란 무엇인가? 아래 글은 redhat blog에서 퍼온 글입니다. "CFI, or Control-flow integrity, may refer to any mechanism which tries to ensure the execution flow is valid when calling or returning from functions during the software’s runtime. Some of the hardenings mentioned earlier in the introduction can be considered CFI protection. Most of them are implemented by both GCC and Clang, howeve..
본문 작성에 앞서 해당 난독화 기법의 모티브를 소개합니다. 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 -..