일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 디버깅
- 서비스프로세스
- Self-Creation
- UTF-16
- PEImageSwitching
- 안티디버깅
- Exe2Aut
- Dynamic안티디버깅
- OllyDbg
- x32dbg
- Static안티디버깅
- JIT
- hxd
- Advanced안티디버깅
- 서비스디버깅
- 리버싱
- IL코드
- 리버싱핵심원리
- Python
- CodeEngn
- dotPeek
- PEImage
- CP949
- UTF-32
- RedLine Stealer
- ImageSwitching
- .net
- Visual Studio
- DebugBlocker
- 분석 보고서
- Today
- Total
목록분류 전체보기 (42)
-榮-
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. ASCII (American Standard Code for Information Interchange) ASCII는 최초의 문자열 인코딩 7bit로 구성 영어를 위한 문자, 숫자, 특수문자, 기호 등 128개 문자를 표현 (2^7 == 128) 영어를 위한 문자(American Standard Code)이기 때문에 다른 언어는 표현이 불가능 2. ANSI (American National Standard Institute) ANSI는 ASCII의 확장판 느낌으로 영어 이외의 다른 언어를 지원할 목적으로 만들어짐 8bit로 256개의 문자를 표현 앞의 7bit는 ASCII와 동일하며, 뒤의 1bit로 다른 언어의 문자표를 의미 각 언어별로 Code 값을 가짐 - CodePage ANSI = ASCI..
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를 ..
● CodeEngn Advance RCE L15 문제 ◎ 파일 실행 화면 Username and Serial Validation으로 넘어가려면 리버싱으로 Unlock Code를 찾아야 되는 것으로 확인됩니다. ◎ 패킹 및 난독화 여부 확인 ● CodeEngn Advance RCE L15 풀이 현재 모듈에서 호출되는 함수를 찾아보면 없다고 뜹니다. [그림 2]에서 패킹이 없다는 것을 확인했으니 파일이 암호화되어있을 겁니다. [그림 3]에서 진행하면, [그림 5]를 걸치면서 코드가 복호화됩니다. 복호화가 된 최종 결과는 [그림 6]이며, 이 곳이 OEP입니다. [그림 6]에서 [Plugins > Scylla]에서 DUMP 파일을 생성합니다. 현재 모듈에서 호출되는 함수를 찾아보면 GetDlgItemTextA..
● CodeEngn Advance RCE L14 문제 ◎ 파일 실행 화면 ◎ 패킹 및 난독화 여부 확인 ● CodeEngn Advance RCE L14 분석 및 풀이 문자열 검색에서 [그림 1] 실패 화면의 "Invalid Registration Code"문자열을 찾으면 성공 문자열과 함께 바로 보입니다. 실패 문자열 주소로 이동하면 성공 문자열과 함께 분기점(0047F448)을 확인할 수 있습니다. 분기 조건의 파라미터를 확인하면 입력된 Serial의 숫자 부분과 Name으로 생성된 Serial 숫자를 비교하는 것을 확인할 수 있습니다. 분기 조건 앞의 CALL 00404B2C와 CALL 0047F0B8은 각각 입력된 Serial과 입력된 Name을 파라미터로 가집니다. 즉, 앞의 CALL 0047F0..