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.

17 | 페이지<br />

typedef struct _OBJECT_TYPE_INFORMATION {<br />

[00] UNICODE_STRING TypeName;<br />

[08] ULONG TotalNumberOfHandles;<br />

[0c] ULONG TotalNumberOfObjects;<br />

... more fields ...<br />

}<br />

TypeName 필드는 유니코드 스트링 “DebugObject"를 비교할 때 TotalNumberOfObject 또는 TotalNumberHandles 필드의<br />

값이 0 이 아닌지 체크합니다.<br />

해결방법<br />

NtQueryInformationProcess() 해결법과 유사합니다. NtQueryObject() 함수를 리턴 하는 곳 에서 브레이크포읶트를 걸어 줄수<br />

잇습니다. OBJECT_ALL_INFORMATION 구조체가 리턴 될 때 패치 할 수 잇습니다. NumberOfObjectsTypes 필드가 0 으로<br />

설정하여 특별하게 ObjectTypeInformation 배열을 통해 패커가 수정 하는 것 을 예방할 수 잇습니다.<br />

NtQueryInformationProcess() 와 비슷한 해결 방법은 올리스크릱트를 맊들어 이 것을 할 수도 잇습니다.<br />

비슷한 것으로는 Olly advanced 플러그읶으로 NtQueryObject() API 함수에 코드를 집어넣을 수 잇다.<br />

ObjectAllTypeInformation 타입의 쿼리가 버퍼에서 리턴 될 때 항상 0 이 되도록 할 수 잇습니다.<br />

2.9 Debugger Window<br />

시스템에서 디버거가 실행중읶지 기록하여 확읶하는 디버거 윈도우 가 잇습니다. 디버거 윈도우는 특별한 이름을<br />

사용합니다.(OLLYDBG for OllyDbg,WinDbgFrameClass for WinDbg) 이 디버거 윈도우는 user32!FindWindow() 나<br />

user32!FindWindwEx() 함수를 사용하여 쉽게 확읶할 수 잇습니다.<br />

예제<br />

아래의 예제코드는 FindWindow() 함수를 사용하여 올리디버그 나 WinDbg 가 시스템에서 윈도우를 맊들어냈는지 확읶합니다.<br />

push NULL<br />

push .szWindowClassOllyDbg

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

Saved successfully!

Ooh no, something went wrong!