Inline Hook NtQueryDirectoryFile

  • Post author:
  • Post category:其他




Inline Hook NtQuery




DirectoryFile






首先声明这个是菜鸟—我的学习日记

,

不是什么高深文章

,

高手们慎看

.




都总是发一些已经过时的文章真不好意思

,

几个月以来沉迷于游戏也是时候反省了

,

我真的几个月没写博客了

,

怎么办

~

怎么办

~

我要补充自己的博客

,

但真想不到写什么了

,

唯有将自己以前写的一些

Demo

写上来

.




当初我其实是不会这样做的

,

看了一篇关于





怎么

inline hook NtDeviceIoControlFile

隐藏端口





的文章后有启发

,

于是自己试着用在隐藏文件这个函数上

,


忘记了这篇文章的出处

,

对作者深感抱歉

.







l







原理分析






inline hook


的原理相信已经为大家所知了


,


方法就有几种


.




1.


原函数入口


call


之前改无条件跳到自己函数


,


处理数据


,


然后原函数改回正常


,


调用原函数


,


再改回原函数入口


call


之前改无条件跳到自己函数


.(


这样做操作繁复


,


调用频繁可能出错


)




2.


就是我以下做的方法了


.


只要实现一次修改就可以了


.




3. ……..


还有更多的


.



nt!NtQueryDirectoryFile:

//



这个函数入口的原来样子



80574515 8bff


mov


edi,edi


80574517 55


push


ebp


80574518 8bec


mov


ebp,esp


8057451a


8d 452c


lea


eax,[ebp+2Ch]


8057451d 50


push


eax


8057451e 8d4528


lea


eax,[ebp+28h]


80574521 50


push


eax


80574522 8d4524


lea


eax,[ebp+24h]


80574525 50


push


eax


80574526 8d4520


lea


eax,[ebp+20h]


80574529 50


push


eax


8057452a


8d4530


lea


eax,[ebp+30h]


8057452d 50


push


eax


8057452e 6a 01


push


1


80574530 ff7530


push


dword ptr [ebp+30h]


80574533 ff 752c


push


dword ptr [ebp+2Ch]


80574536 ff7528


push


dword ptr [ebp+28h]


80574539 ff7524


push


dword ptr [ebp+24h]


8057453c


ff7520


push


dword ptr [ebp+20h]


8057453f


ff 751c


push


dword ptr [ebp+1Ch]


80574542 ff7518


push


dword ptr [ebp+18h]


80574545 ff7514


push


dword ptr [ebp+14h]


80574548 ff7510


push


dword ptr [ebp+10h]


8057454b ff 750c


push


dword ptr [ebp+0Ch]


8057454e ff7508


push


dword ptr [ebp+8]


80574551 e82bfdffff


call


nt!PsLookupProcessByProcessId+0x 3f 4 (80574281)


——————————————————————————————–


nt!NtQueryDirectoryFile:

//



这个函数入口修改后的样子



……



80574542 ff7518


push


dword ptr [ebp+18h]


80574545 ff7514


push


dword ptr [ebp+14h]


80574548 ea 1c 3224f 50800


jmp


0008:F 524321C



//



无条件跳自己的函数

,

其实这段可以写在



8057454b 90






nop



// call



前的任何地方

,

自己构建的函数要有



8057454e 90






nop



//



相应的改动而已

.


80574551 e82bfdffff


call


nt!PsLookupProcessByProcessId+0x 3f 4 (80574281)


——————————————————————————————–


__declspec


(

naked

) NTAPI


Detour_NtQueryDirectoryFile(




IN HANDLE


FileHandle,




IN HANDLE


Event


OPTIONAL,




IN PIO_APC_ROUTINE


ApcRoutine


OPTIONAL,




IN PVOID


ApcContext


OPTIONAL,




OUT PIO_STATUS_BLOCK


IoStatusBlock,




OUT PVOID


FileInformation,




IN ULONG


FileInformationLength,




IN FILE_INFORMATION_CLASS


FileInformationClass,




IN ULONG


ReturnSingleEntry,




IN PUNICODE_STRING


FileName


OPTIONAL,




IN ULONG


RestartScan)


{





__asm




//



恢复好堆栈先





{




add esp,40




mov esp,ebp




pop ebp





push ebp




mov ebp,esp




pushad



版权声明:本文为cooblily原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。