또~ 다시 오랜만에 포스팅을 하게 되네요~ =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-;;;