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