阅读:1837回复:6
SSDT HOOK的一些想法,希望大牛帮忙看看
我HOOK SSDT后,常规的就是获取调用该函数的进程,但是这往往不够
我希望获取调用该函数的具体模块名,我的想法是 1、反向跟踪用户态堆栈-》获取函数调用关系【类似windbg的堆栈功能】 这个比较cool,不知可有哪位兄弟研究过没有?貌似比较复杂啊 2、或者当前进程的调用线程以及线程代码位置,根据该位置查询进程模块空间来定位模块 以上想法不知可行不?我感觉第二种应该简单一点,大牛们给点建议吧 好久没有发帖了 |
|
沙发#
发布于:2008-07-25 16:33
估计是我想法比较难实现???还是大牛们都忙于吃草???hoho
还是期待我自己搞定发源码吧 |
|
板凳#
发布于:2008-07-26 09:20
第一个很难实现,第二个很容易做到~~
不过有些时候CurrentThread是会成为ntdll.dll的~~嘿嘿~~ 所以需要更好的方法,就是Attack到进程上面,然后利用寄存器读取法,读出XX。 然后自己读取进程空间的ring3下的那个堆栈,完了说完了——我现在网游的反作弊就这么搞的。 |
|
|
地板#
发布于:2008-07-26 09:25
读取某个寄存器,当然这个寄存器里只有调ntdll.dll的那个地址了,没有ntdll.dll做sysentry的地址。你可以仔细研究下。
|
|
|
地下室#
发布于:2008-07-28 20:30
KeGetCurrent->win32startaddress
然后根据进程模块内存分布情况获取调用模块,不知老V看看可否?下面是windbg输出 Thread:815d2020 Process-815d2660 peb-7ffdf000 ldr-00071e90 modList-00071ea4 01000000:C:\WINNT\system32\notepad.exe 77f80000:C:\WINNT\system32\ntdll.dll 76af0000:C:\WINNT\system32\comdlg32.dll 77c50000:C:\WINNT\system32\SHLWAPI.DLL 77f40000:C:\WINNT\system32\GDI32.DLL 77e60000:C:\WINNT\system32\KERNEL32.DLL 77df0000:C:\WINNT\system32\USER32.DLL 796d0000:C:\WINNT\system32\ADVAPI32.DLL 786f0000:C:\WINNT\system32\RPCRT4.DLL 77b30000:C:\WINNT\system32\COMCTL32.DLL 78f90000:C:\WINNT\system32\SHELL32.DLL 78000000:C:\WINNT\system32\MSVCRT.DLL 777c0000:C:\WINNT\system32\WINSPOOL.DRV 79a90000:C:\WINNT\system32\MPR.DLL 75e00000:C:\WINNT\system32\IMM32.DLL 6dd30000:C:\WINNT\system32\INDICDLL.dll +:C:\WINNT\system32\notepad.exe kd> dt !_ethread 815d2020 nt!_ETHREAD +0x230 StartAddress : 0x77e687b3 +0x234 Win32StartAddress : 0x01006420 -> 01000000 01006420 为notepad.exe模块调用 Thread:816ddb40 Process-815e8b40 peb-7ffdf000 ldr-00071e90 modList-00071ea4 00400000:C:\WINNT\Explorer.EXE 77f80000:C:\WINNT\system32\ntdll.dll 796d0000:C:\WINNT\system32\ADVAPI32.DLL 77e60000:C:\WINNT\system32\KERNEL32.DLL 786f0000:C:\WINNT\system32\RPCRT4.DLL 77f40000:C:\WINNT\system32\GDI32.DLL 77df0000:C:\WINNT\system32\USER32.DLL 77c50000:C:\WINNT\system32\SHLWAPI.DLL 77b30000:C:\WINNT\system32\COMCTL32.DLL 75e00000:C:\WINNT\system32\IMM32.DLL 782f0000:C:\WINNT\system32\shim.dll 23000000:C:\WINNT\AppPatch\AcLayers.DLL 78f90000:C:\WINNT\system32\SHELL32.dll 77a30000:C:\WINNT\system32\OLE32.DLL 72c50000:C:\WINNT\system32\CLBCATQ.DLL 77990000:C:\WINNT\system32\OLEAUT32.dll 78000000:C:\WINNT\system32\MSVCRT.dll 77810000:C:\WINNT\system32\cscui.dll 77080000:C:\WINNT\system32\CSCDLL.DLL 795b0000:C:\WINNT\system32\SHDOCVW.DLL 76dd0000:C:\WINNT\system32\browseui.dll 794d0000:C:\WINNT\system32\USERENV.DLL 76f60000:C:\WINNT\system32\ntshrui.dll 773a0000:C:\WINNT\system32\ATL.DLL 75100000:C:\WINNT\system32\NETAPI32.DLL 797b0000:C:\WINNT\system32\SECUR32.DLL 75150000:C:\WINNT\system32\NETRAP.DLL 750e0000:C:\WINNT\system32\SAMLIB.DLL 74fb0000:C:\WINNT\system32\WS2_32.DLL 74fa0000:C:\WINNT\system32\WS2HELP.DLL 77930000:C:\WINNT\system32\WLDAP32.DLL 77960000:C:\WINNT\system32\DNSAPI.DLL 74fd0000:C:\WINNT\system32\WSOCK32.DLL 79a90000:C:\WINNT\system32\MPR.DLL 10000000:C:\WINNT\system32\hgfs1.dll 750f0000:C:\WINNT\System32\ntlanman.dll 751a0000:C:\WINNT\System32\NETUI0.DLL 75160000:C:\WINNT\System32\NETUI1.DLL 76ee0000:C:\WINNT\system32\NETSHELL.dll 76620000:C:\WINNT\system32\webcheck.dll 76670000:C:\WINNT\system32\stobject.dll 766e0000:C:\WINNT\system32\BATMETER.DLL 6d990000:C:\WINNT\system32\SETUPAPI.DLL 76690000:C:\WINNT\system32\POWRPROF.DLL 77530000:C:\WINNT\system32\WINMM.DLL 01120000:C:\WINNT\system32\MSI.DLL 77520000:C:\WINNT\system32\wdmaud.drv 773c0000:C:\WINNT\system32\msacm32.drv 773d0000:C:\WINNT\system32\MSACM32.dll 76230000:C:\WINNT\system32\es.dll 784a0000:C:\WINNT\system32\TxfAux.Dll 6dd30000:C:\WINNT\system32\INDICDLL.dll 76bc0000:C:\WINNT\system32\WININET.DLL 766b0000:C:\WINNT\system32\LINKINFO.DLL 76db0000:C:\WINNT\system32\mydocs.dll 77070000:C:\WINNT\system32\CfgMgr32.dll +:C:\WINNT\explorer.exe ->C:\WINNT\system32\winspool.drv 60 +0x230 StartAddress : 0x77e69824 -》Kernel32线程开始地址 +0x234 Win32StartAddress : 0x76671949 0x76671949 0x76670000:C:\WINNT\system32\stobject.dll |
|
5楼#
发布于:2008-07-29 09:50
如果在VISTA下都可以的话,那一般问题就不大了。
|
|
|
6楼#
发布于:2008-07-29 18:48
老V啊?什么寄存器?
怎么得到当前线程的Win32StartAddress地址啊?不会要硬编码吧?找了下好像有个PsGetContextThread什么的,但是又不导出,其他什么的都要一个HANDLE ThreadHandle的东西,貌似我只有ETHREAD的地址,用ObFindHandleForObject又不成功,郁闷啊 |
|