일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 분석 보고서
- ImageSwitching
- Self-Creation
- UTF-32
- OllyDbg
- x32dbg
- Advanced안티디버깅
- 서비스프로세스
- 안티디버깅
- CP949
- PEImageSwitching
- PEImage
- dotPeek
- CodeEngn
- JIT
- 리버싱
- Python
- 디버깅
- 서비스디버깅
- hxd
- RedLine Stealer
- Exe2Aut
- 리버싱핵심원리
- UTF-16
- DebugBlocker
- Dynamic안티디버깅
- Visual Studio
- Static안티디버깅
- IL코드
- .net
- Today
- Total
목록리버싱 핵심원리 (7)
-榮-
1. Debug Blocker Dubug Blocker 기법은 프로세스가 자기 자신(또는 다른 실행 파일)을 디버깅 모드로 실행하는 기법이다. 이 기법은 다양한 안티 디버깅 기법 중 하나로, 몇몇 PE 프로텍터에서 사용되고 있다. Debug Bolcker 기법이 적용된 프로세스는 디버거로 동작할 때와 디버기로 동작할 때 각각 다른 코드를 실행하도록 프로그래밍되어 있다. 만약 중요한 코드가 디버기 프로세스에서 실행된다면 그쪽을 디버깅해야 한다. 하지만 디버거-디버기 관계 자체가 안티 디버깅 역할을 하기 때문에 디버기 프로세스의 디버깅이 까다로워진다. 2. 안티 디버깅 특성 Debug Blocker 기법이 안티 디버깅으로 분류되는 이유는 아래와 같다. ● 부모-자식 관계 디버거-디버기 프로세스 관계는 기본적..
1. PE Image ‘PE Image’(혹은 Process Image나 Image라고 함)란 간단히 말해 ‘PE 파일이 프로세스 메모리에 매핑(mapping)된 모습’이라고 할 수 있다. PE 파일(notepad.exe)을 프로세스로 실행시키면 그 프로세스의 가상 메모리는 아래 그림과 같은 형태가 된다. 즉, OS는 프로세스를 위한 가상 메모리를 생성하고, USER 메모리 영역에 notepad.exe 파일을 매핑시킨다. 그리고 notepad.exe에 사용되는 Import DLL 파일들(kernel32.dll, user32.dll, gui32.dll 등)을 차례대로 매핑시킨다. 이때, 프로세스의 USER 메모리에 매핑된 Notepad.exe 영역을 (notepad.exe 파일에 대한) PE Image라고..
1. Self-Creation 실행 중에 자기 자신을 자식(Child) 프로세스로 생성시키는 것을 Self-Creation이라고 한다. 이 파일들은 같은 실행 파일이면서 부모(Parent)로 실행될 때와 자식으로 실행될 때 서로 다르게 동작한다. 즉, 하나의 실행 파일에 두 가지 실행 경로가 존재하는 것이다. - 동작 원리 Self-Creation 기법의 동작 원리는 아래 그림과 같다. ● Create Child Process (SUSPEND mode) 부모 프로세스가 실행되면 main() 함수가 호출되고, main()에서 SUSPEND 모드로 자식 프로세스를 생성한다. SUSPEND 모드로 생성되면, Import DLL들은 로딩되지만 메인 스레드(Main Thread)가 멈춘 상태가 된다.(‘스레드를 ..
1. 가비지 코드 의미 없는 코드를 대량으로 추가시켜 디버깅을 힘들게 만드는 기법 중간 중간에 진짜 의미 있는 고드를 섞어 버리거나 다른 안티 디버깅 기법을 혼합해서 사용하면 디버깅이 매우 힘들다. 정교하고 복잡한 형태의 가비지 코드는 수많은 조건 분기와 끝없이 이어지는 함수 호출로 인하여 건너뛰기도 쉽지 않다. 2. Breaking Code Alignment IA32-Instruction을 잘 이해한 상태에서 정교하게 어셈블리 프로그래밍을 하면, 디버거의 디스어셈블 과정에 혼란을 줄 수 있다. 즉, 디스어셈블리 코드가 깨진 것처럼 보인다. 코드 사이에 (정교하게 계산된) 불필요한 코드를 삽입시켜 디스어셈블리 코드의 가독성을 떨어뜨리는 것이 ‘Breaking Code Alignment’ 기법 사람이 파악..
내부 코드와 데이터를 리버싱으로부터 감추고 보호하는 것이 목적으로, PE 프로텍터들에서 많이 사용된다. 원본 프로그램의 핵심 알고리즘을 보호하기 위해 사용 디버거로 프로그램을 실행할 수 있을지언정 원본 프로그램의 핵심 코드(OEP)를 트레이싱으로 찾지 못하도록 방해 1. 예외(Exception) 안티 디버깅의 단골 메뉴 예외가 발생하면 일반 실행은 SEH(Structured Exception Handling) 메커니즘에 의해 처리되고, 디버깅 중이면 디버거가 예외 처리를 담당한다. 이 특징을 이용해서 정상 실행 경우와 디버깅당하는 경우를 판별해서 서로 다른 동작을 수행할 수 있는 안티 디버깅 기법. -1. SEH(Structured Exception Handling) SEH의 대표적인 예외 EXCEPTI..
디버거 탐지, 디버깅 환경 탐지, 디버거 강제 분리 많은 static 안티 디버깅은 OS 의존성을 가지고 있다. 1. PEB 현재 프로세스의 디버깅 여부 판단에 사용. PEB 구조체 정보 이용 +0x002 BeingDebugged +0x00C Ldr +0x018 ProcessHeap +0x068 NtGlobalFlag BeingDebugged - 디버깅 여부를 표시하는 Flag Ldr, ProcessHeap, NtGlobalFlag - 디버깅 프로세스의 독특한 힙(Heap) 메모리 특성과 관련 TEB.ProsessEnvironmentBlock (+ 0x30) == PEB PEB 구조체구하는법 바로 PEB 구하기 MOV EAX, DWORD PTR FS:[0x30]; FS:[0x30]=address of P..
1. 서비스 프로세스 동작 원리 - 서비스 시스템 개요 서비스(Service) 프로그램은 SCM(Service Control Manager)에 의해서 관리된다. 서비스 애플리케이션이 실행되기 위해서는 시작 명령을 내려줄 수 있는 서비스 제어기(Service Contro-ller)가 필요하다. 서비스 제어기는 SCM에게 서비스 제어를 요청하면 SCM이 서비스 프로그램에게 제어 명령을 전달하고 리턴 값을 돌려받는 구조로 되어있다. 서비스 제어기에서 서비스 프로그램에 직접 명령을 내릴 수 없고, SCM을 통해서 명령을 내려야 된다. - 서비스 시작 과정 서비스 프로그램의 시작 과정을 간략히 정리해 보면 아래 그림 2와 같다. 모든 서비스 프로그램은 외부(서비스 제어기)에서 StartService() API를 ..