티스토리 툴바


오늘 드라이버에서 ZwReadVirtualMemroy, ZwWriteVirtualMemory를 SSDT 훅 할 일이 있어 코드를 작성해보았다.


대충 어느정도 작성되었다 싶어 실행시키는 순간....

드라이버 로드가 안된다. -_-;


에러를찍어보니,, 

127 (ERROR_PROC_NOT_FOUND), 

2 (ERROR_FILE_NOT_FOUND)

에러가 번갈아 가면서 나온다. 뭥미..-_-^


왜!! 왜왜왜왜왜 다른 함수들과 동일하게 훅을 했는데도 불구하고,, 안될까... 

한참 헤메다가 외국의 어느 포럼의 한줄 댓글에서 원인을 찾았다.ㅠ


헤더에 다른 함수들 과 마찬가지로 

아래 처럼 작성 했었는데,,


NTSYSAPI 

NTSTATUS

NTAPI

ZwReadVirtualMemory(

HANDLE              ProcessHandle,

PVOID               BaseAddress,

PVOID             Buffer,

LONG                NumberOfBytesToRead,

PULONG              NumberOfBytesReaded OPTIONAL );


문제는 ZwReadVirtualMemory는 Export함수가 아니라는거,,,

그러니 암만


SYSTESERVICE( ZwReadVirtualMemory );


해도 안되는 것이었다. 


드라이버 자체가 로드가 안되다니,,,..


결국 인덱스 하드코딩해서,, 해결....ㅠㅠ

하루 반이 걸렸던,, ZwReadVirtualMemory SSDT Hook...


이와 같은 실수를 더 이상 범하기 싫어 남겨본다.

저작자 표시

'Windows Programming' 카테고리의 다른 글

ZwReadVirtualMemory, ZwWriteVirtualMemory  (0) 2012/05/11

어느 보안 모듈의 드라이버를 분석해보았다.

이유는 뭐 그냥 ? ㅎㅎ


난 이제껏 제대로 된 보안모듈 분석을 해 본적이 없어 두근 거렸었다.

하지만 의외로 할만하다는 사실을 깨달았다. 

물론.... 패킹이 안되었기 때문에 할만했지, 패킹이 되 있었더라면, 엄청 고생했을 듯.



분석해본 과정 및 결과를 간단하게 작성해보자면,


NtOpenProcess 등등의 SSDT 후킹이 되어 있어 후킹부터 풀어야 했다. 

하지만 원복하고 조금 지나니 변조체크로 인해 꺼지는 듯 하였다.


그래서 일단 KdEnteredDebugger & KdDebuggerEnabled 라는 변수로 디버깅 체크를 하길래 간단하게 무력화 한 다음, 


SSDT 후킹하고 있는게 풀렸는지 체크하는 루틴 마저 무력화 했다.


이 작업들은 드라이버가 로드 될 때 무력화 했는데, 나중에.. 그러니 완전히 로드 된 후 한참 있다 수정하면

감지가 되어버렸다. 


결국 로드되자마자 CRC를 구한 후 구한 CRC값으로 무결 체크를 한다는 것을 알고는 

CRC체크하는 루틴마저 무력화 했다.


그러다가 갑자기 생각난 방법... 이 정도면, 내가 수정한 드라이버파일을 올리는게 가능하지 않을까 싶어 

도전 하던 도중...


드라이버가 로드되지 못했는데도 불구하고 종료없이 잘 동작한다!!!!!!!


드라이버가 없으니 SSDT 훅은 물론이요 여러 드라이버에서 하는 동작들은 사라졌다.


캬... 이럴 수가.. 이럴수가.. 너무 허무하다.;;


이럴꺼면 SSDT 훅이 정상인지 체크는 왜 하며 CRC체크는 왜 하며 디버깅 모드인지는 왜 체크하는지,,


내가 모르는 뭔가가 있을 수도 있지만, 엄청 기대하고 보았지만, 드라이버 단에서는 별거 없더라~ 하는게 나의 생각이다.




이상 끝.

저작자 표시

'Reversing' 카테고리의 다른 글

보안 모듈 드라이버 무력화 해본 소감.  (0) 2012/05/06
NtSetInformationThread API 2012/02/28 17:30

NtSetInformationThread 함수에 두번째 인자로  ThreadHideFromDebugger( 0x11 ) 라는 옵션을 주게 되면
스레드에 브포를 걸었을 경우에 디버거로 넘어오지 않게 된다.

좀 더 공부해야겠지만, 우선 핵툴이 이렇게 방해하는 관계로

NtSetInformationThread를 훅 해서 두번째 인자에   ThreadHideFromDebugger 가 넘어오면 실패하던지 다른 인자로 바꿔 넘기던지 
하는 툴을 만들어야겠다.

혹시 모르니 ThreadHideFromDebugger 로 셋팅 되어 있는지 확인해서 무력화 시키는 것도 연구해봐야겠다.

 오늘 간만에 어마어마한걸 건졌다.

끗 


저작자 표시

'API' 카테고리의 다른 글

NtSetInformationThread  (0) 2012/02/28