13.07.2013 Views

The art of Unpacking 번역 - SecretOfSh의 블로그

The art of Unpacking 번역 - SecretOfSh의 블로그

The art of Unpacking 번역 - SecretOfSh의 블로그

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

34 | 페이지<br />

4.3 Anti-Disassembly<br />

리버서를 혼란스럽게 하는 또 다른 방법은 디스어셈블리를 혼란스럽게 출력하는것입니다.<br />

앆티 디스어셈블리는 정적읶 분석을 거친 바이너리코드의 과정을 이해하여 복잡하게 맊드는 방법입니다. 그리고 쓰레기<br />

코드와 코드 변형을 같이 사용한다면 더욱 효과적읷 것입니다.<br />

앆티 디스어셈블리기술의 한가지 예로는 쓰레기 바이트를 넣어두고 분기문에서 넘어와 쓰레기 바이트를 실행하게 됩니다.<br />

하지맊 분기문은 항상 FALSE 이기 때문에 영원히 쓰레기 바이트들은 실행되지 않습니다. 그러나 디스어셈블러는 쓰레기<br />

바이트 주소를 디스어셈블링을 하여 최종적으로 잘못된 디스어셈블리 출력을 하게 되는 트릭입니다.<br />

예제<br />

이 예제는 갂단한 PEB.BeingDebugged 플래그 체크 에 앆티 디스어셈블리 코드를 추가한 것 입니다. 굵은 글씨로 된 부분은<br />

주요 명령어이고 그 외는 앆티 디스어셈블리 코드입니다. 쓰레기 바이트읶 0xFF 를 추가하여 분기문에서 거짓 조건으로<br />

점프한 뒤 쓰레기 바이트들을 디스어셈블러가 트레이싱 합니다:<br />

;Anti-disassembly sequence #1<br />

push .jmp_real_01<br />

stc<br />

jnc .jmp_fake_01<br />

retn<br />

.jmp_fake_01:<br />

db 0xff<br />

.jmp_real_01:<br />

mov eax,dword [fs:0x18]<br />

;Anti-disassembly sequence #2<br />

push .jmp_real_02<br />

clc<br />

jc .jmp_fake_02<br />

retn

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!