constWORLDant

코드 가상화 개인 공부 [0x05] 본문

0x03 Reversing Theory

코드 가상화 개인 공부 [0x05]

data type ConS_tanT 2017.12.26 01:17

몇일 가족여행 갔다온다고 푹 잠만 자고 쉬었으니 다시 공부를 시작해본다.



 INT 2D Debugger Detection

ntoskrnl.exe에서 사용되는 INT 2D가 디버깅 시에 사용되면 예외가 일어나지 않고, 일반 실행시에만 예외를 일으키는 것을 이용한다.


Kernel32 CloseHandle and NtClose

잘못 된 시스템 핸들러에 대한 종료를 요청 할 경우 Debugging 시 잘못 된 주소로의 리턴이 이루어짐을 이용함.


LordPE Anti Dumping

프로세스의 크기를 크게 늘려서 LordPE를 혼란시키거나 사용할 수 없도록 하는 방법


POPF and trap flag

popf명령어의 실효성과 trap flag 사용 체크를 통해 디버깅 여부 확인


RDG OEP Signature Spoofing

RDG가 패턴을 통해서 OEP를 찾는 원리를 이용. 

RDG가 찾는 패턴을 임의로 삽입하여 잘못 된 OEP를 지정하게 하는 기법 


Stack Segment Register

stack segment register의 push, pop 이후에는 flag register의 push pop이 존재하는 암묵적인 규칙을 위반하여 디버거에 혼란을 준다.


Using the CMPXCHG8B with the LOCK Prefix

CMPXCHG8B명령어가 SEH를 실행하지 못하고 종료됨을 이용하여 디버거를 혼란시킴


CheckRemoteDebuggerPresent Windows API

kernel32.dll에 포함 된 CheckRemoteDebuggerPresent API를 사용해서 현재 디버깅되고 있는지 체크 


Debug registers manipulation

디버거 작동에 사용되는 DR0~7까지 레지스러를 조작하여 디버깅 할 수 없도록 만듬


Detecting BreakPoints by CRC

프로그램의 CRC값을 사용하는 방법으로, 프로그램 수행 중에 CRC값을 계산하여 변경되었는지 여부를 체크, 메모리 값 변조 방지에도 효과적이다.


Hardware Breakpoints Detection

Hardware Breakpoint가 setting  되었는지를 체크하여 디버깅을 탐지함


IsDebuggerPresent Direct PEB Access

TEB(Thread Environment Block)를 통해 PEB(Process Environment Block)의 BeingDebugged의 값을 체크하여 디버깅 중인지 체크함


IsDebuggerPresent Windows API

PEB의 BeingDebugged값을 체크하는 IsDebugger Present API를 사용하여 디버깅 중인지 체크 


NtGlobalFlag Debugger Detection

PEB의 NtGlobalFlag 정보를 이용하여 디버깅 중인지 체크 


Obfuscated RDTSC

시스템의 클럭 사이클의 증가 값을 저장하는 TSC값을 리턴하는 RDTSC명령을 사용하여 시간의 지연을 측정하여 디버깅 중인지를 체크함


여기까지가 General Disassembler 였고, Target Disassembler이라는 것도 있다. 


Target Disassembler 


OllyDBG Filename Format String

OllyDBG가 디버깅 대상파일을 오픈 할 때의 포맷스트링 버그를 이용해서 디버깅을 방지하는 방법 


OllyDBG Instruction Prefix Detection

INT1, INT3 등의 1BYTE 인터럽트들에 대한 예외핸들러를 미리 설정해놓고, OllyDBG가 이들을 무시하는 것을 이용하여 디버깅 중인지 체크 


OllyDBG OutputDebugString() Format String Vulnerability

OutputDebugString() 이란 함수를 사용할 때, 인자 값으로 %s%s%s%s%s%s를 주면, OllyDBG에서 충돌이 발생되는 취약점을 이용 


OllyDBG PE Header Parsing Dos Vulnerability

실행 파일의 일부 값을 변경하여, OllyDBG의 충돌을 발생시키거나, 섹션을 찾지 못하도록 하는 기법 


PEid GenOEP Spoofing

PEiD에서 사용하는 GenOepFinder.dll을 분석하여 fakeoep를 가리키도록 수정 


PEid OEP Signature Spoofing

PEiD가 분석하는 패커의 패턴을 혼란스럽게 하도록 몇 개의 바이트를 수정하는 기법 


ProcDump PE Header Corruption

VirtualProtect를 이용해 PE헤더를 쓰기 가능하도록 설정, 헤더로부터 섹션을 지워서 디버깅 방지

 

0 Comments
댓글쓰기 폼