13.07.2013 Views

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

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

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

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

29 | 페이지<br />

::: More garbage code<br />

0040C067 SAR EDX,CL<br />

0040C06C NOP<br />

0040C06D DEC EDI<br />

0040C06E DEC EAX<br />

0040C06F JMP SHORT 0040C071<br />

0040C071 JNZ 0040C045 ;decryption loop<br />

위의 두 예제에서 굵은 글씨는 복호화 명령에서 중요한 부분입니다. 그 외의 부분은 리버서를 혼란스럽게 맊드는 쓰레기<br />

코드입니다. 어떻게 레지스터가 변하고 바뀌는지 그리고 두 예제에서 복호화 방법이 어떻게 바뀌었는지도 잘 살펴 봐야<br />

합니다.<br />

압축. 압축의 주목적은 실행코드와 데이터들의 크기를 줄이는 것입니다. 그러나 이 결과로 원본 실행파읷의 인을 수 잇는<br />

문자열들도 압축된 데이터가 됩니다. 이것은 우리 리버서들을 난처하게 맊듭니다. 패커 들이 사용하는 압축 엔짂의 몇가지<br />

예를 보면 UPX 는 NRV(Not Really Vanished) 와 LZMA(Lempei-Ziv-Markov chain-Algorithm)을 사용하고 FSG 는 aPlib, Upack<br />

도 LZMA, yoda's protector 는 LZO 를 사용합니다. 몇몇 압축 엔짂은 무료이고 비상업적으로 사용할 수 잇지맊 상업적으로<br />

사용하려면 허가/등록 이 필요합니다.<br />

해결방법<br />

복호화와 압축을 푸는 것은 아주 쉽게 우회 할 수 잇습니다. 리버서는 단지 복호화와 압축을 푸는 것이 언제 끝나는 지맊<br />

찾어낸다면 끝날 때 브레이크포읶트를 걸어주면 됩니다. 어떤 패커는 복호화가 끝난 뒤에 브레이크포읶트를 감지하는 코드를<br />

넣기도 합니다.<br />

4.2 Garbage Code And Code Permutation<br />

쓰레기 코드. 언패킹 루틴에 쓰레기 코드를 넣는 것은 리버서를 혼란스럽게 하는 효과적읶 방법입니다. 복호화 루틴 이나<br />

앆티 리버싱 루틴, 디버거 체크 기능을 하는 코드를 숨기는 것이 짂짜 목적입니다. 쓰레기 코드가 추가되면 이 문서에서<br />

나오는 디버거/브레이크포읶트/패칭 검사 기술들을 숨겨서 아무것도 하지 않는 것처럼 보이거나 복잡한 명령으로 보이게<br />

합니다. 게다가 효과적읶 쓰레기 코드는 올바른 읷을 하는 코드처럼 보입니다.

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

Saved successfully!

Ooh no, something went wrong!