|
本帖最后由 tangptr@126.com 于 2015-8-31 16:14 编辑
这只是据说,我测试的时候蓝屏了。。。
在删除文件的过程中要调用MmFlushImageSection判定文件在运行时是否已经释放,若没有释放,返回FALSE,若已释放,返回TRUE。如果判断文件没有被释放则删不掉。因此很多粉碎机工具会Hook这个函数,使之返回TRUE。
贴代码喽~(挂钩过程不贴了,我之前贴了太多的挂钩引擎的代码了)
- BOOLEAN NTAPI fake_MmFlushImageSection(IN PSECTION_OBJECT_POINTERS SectionObjectPointer,IN MMFLUSH_TYPE FlushType)
- {
- PFILE_OBJECT pfile;
- WCHAR *pwsz=NULL;
- if (FlushType == MmFlushForDelete)
- {
- if(SectionObjectPointer->DataSectionObject!=NULL)
- {
- pfile=(PFILE_OBJECT)( *(ULONG*)((ULONG)SectionObjectPointer->DataSectionObject + 0x24) );
- __try
- {
- pwsz=wcsrchr(pfile->FileName.Buffer,L'\\');
- if (pwsz!=NULL)
- {
- pwsz++;
- }
- if (!_wcsnicmp(pwsz,L"test.txt",wcslen(L"test.txt")*2))
- {
- return FALSE;
- }
- }
- __except(1)
- {
- return FALSE;
- }
- }
- }
- return MmFlushImageSection(SectionObjectPointer,FlushType);
- }
复制代码
加载驱动后,一打开冰刃就蓝了。。。。。。尼玛! |
|