The art of Unpacking 번역 - SecretOfSh의 블로그
The art of Unpacking 번역 - SecretOfSh의 블로그
The art of Unpacking 번역 - SecretOfSh의 블로그
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