또~ 다시 오랜만에 포스팅을 하게 되네요~ =0=;;;
얼마 전 XP용 서비스팩3 출시가 되었다죠~ (물론 약간의 문제로 인해 연기하기로 됐지만;;)
서비스팩3 와 관련된~ 정보를 하나 올려봅니다;
이쪽 일(어느쪽인지는 알아서들 상상하세용 ^^;;)을 하는 분들이..
굉장히 자주 애용하는 프로그램중에~ "Olly Debugger(이하 올리)" 가 있습니다.
올리의 강점이라고 한다면~ 다양한 플러그인이라고 할 수 있는데요...
플러그인 중에 올리의 버그 교정 및 기능을 확장해주는 "Olly Advanced" 라는 플러그인이 있습니다.
Olly Advanced
Olly Advanced 의 확장 기능 중에 Anti-Debug 부분에 "ZwQueryInformationProcess" 가 있는데요~
서비스팩3 가 설치된 상태에서 저 녀석을 체크해두면 =0=;; 비정상적인 동작을 하게 됩니다.
( 확실한 예로 실행중인 프로세스를 Attach 한 다음 실행시키면~ 프로세스가 죽어버림;; )
왜 죽어버리는지~~ 궁금해서 이것저것 뒤적거려봤습니다.
우선 "ZwQueryInformationProcess" 체크할 때 문제가 발생하니 요놈부터~~;;
"ZwQueryInformationProcess" 는 NTDLL.DLL 에 있는 함수이기 때문에~
서비스팩2, 서비스팩3 의 NTDLL.DLL 을 살짝 비교해봤습니다..
서비스팩2 의 NTDLL.DLL
서비스팩3 의 NTDLL.DLL
살짝(?)다르긴 합니다만 기본틀은 똑같고~ NOP 개수가 좀 다르죠;;;
저 정도로 문제가 생길것 같지는 않아서~ Olly Advanced 를 조금 살펴봤습니다.
OllyAdvanced 에서 ZwQueryInformationProcess 조작하는 부분
"ZwQueryInformationProcess" 를 체크를 하면 위와 같은 루틴을 타더군요;;.
"ZwQueryInformationProcess" 부분을 읽어와서 "FF 12" 로 된 부분이 나오면...
WriteProcessMemory 를 하는 루틴인데... 서비스팩2 에서 정상적으로 동작하는 경우..
아래와 같이 됩니다.
OllyAdvanced 동작중일 때 서비스팩2 의 NTDLL.DLL
위의 서비스팩2 의 NTDLL.DLL 과 비교를 해보면 CALL 과 RETN 명령으로 되어있던 부분("FF 12 XX XX XX")이
JMP 명령으로 바뀐것을 볼 수 있습니다.
서비스팩3 에서 OllyAdvanced 를 활성화시켰을 때의 캡쳐는 미쳐 준비하지 못했는데...
OllyAdvanced 에서 "FF 12" 를 찾아서 WriteProcessMemory 를 하는 부분에서 문제가 발생하더군요;;;
무엇때문인지는 모르겠지만... 서비스팩3 에서는 "FF 12" 뒤에서부터 5바이트를 쓰게 됩니다;
그 때문에 "ZwQueryInformationThread" 의 시작부분이 뭉게져버리고...
결국 프로세스가 죽어버리더군요;;..
서비스팩2 의 NTDLL 이나 서비스팩3 의 NTDLL 이나 "FF 12" 가 있는 부분은 똑같고;;
CALL, RETN 명렁이 5바이트로 되어있는 것도 똑같은데;;
서비스팩2 에서는 제대로 바뀌는게~ 서비스팩3 에서는 왜 엉뚱하게 바뀌는지;;;;
사실 =0=;; 전 서비스팩3 를 설치를 하지 않았는데...
회사의 어떤분이 올리가 제대로 동작하지 않는다면서~~ 얘길하셔서 이것저것;;ㅋ
자신의 PC 를 희생해가며(?) 저의 호기심을 자극해준;;..
재황씨에게 감사를 드립니다~ -0-;;;
'Reverse Engineering' 카테고리의 다른 글
Anti-Unpacker Tricks ( by Peter Ferrie ) (3) | 2009.02.25 |
---|---|
Themida 의 API Wrapping 분석(?) (28) | 2008.11.20 |
XP SP3 와 OllyAdvanced 문제..;;; (3) | 2008.05.15 |
중국산 실행압축프로그램~ Upack~! (6) | 2007.12.02 |
[Crack] Abex's CrackMe... Lv1 (2) | 2007.10.07 |