본문 바로가기

삽질

SDT를 후킹하여 파일 삭제 모니터링 하기

ZwDeleteFIle(NtDeleteFile) 이라는 함수가 있어서 파일 삭제가 될때 이 ZwDeleteFile이라는 함수가 불리어 질것이라고 예상을 하여 ZwDeleteFIle함수를 후킹하였으나 DbgPrint로 뿌리니 아무런 반응이 없어서, 인터넷을 찾는 도중 원인을 알아냈다.

http://www.rohitab.com/discuss/index.php?showtopic=29037

This should be interesting for you(Windows Nt/2000 Native Api Reference By Gary Nebbett):
"There are alternative methods of deleting a file, and the Win32 DeleteFile function uses ZwSetInformationFile with a FileInformationClass of
FileDispositionInformation."

간단하게 말해서 Win32의 파일 삭제 함수는 ZwSetInformation으로 FileInformationClass 정보가 FileDispostionInformation면 삭제되는 것이다.

대략적으로 소스코드를 보면

NTSTATUS NewZwSetInformationFile(
IN HANDLE FileHandle,
OUT PIO_STATUS_BLOCK IoStatusBlock,
IN PVOID FileInformation,
IN ULONG Length,
IN FILE_INFORMATION_CLASS FileInformationClass
)
{
NTSTATUS rc;

rc = ((ZWSETINFORMATIONFILE)(OldZwSetInformationFile)) (
FileHandle,
IoStatusBlock,
FileInformation,
Length,
FileInformationClass
);

if(FileInformationClass == FileDispositionInformation) {
DbgPrint("Deleted File");

}
return rc;
}


이렇게 처리하면 된다.