能力值:
( LV12,RANK:300 )
|
-
-
2 楼
驱动都有了,当然想干啥就干啥,想怎么获取就怎么获取……
下载了TaskInfo v62.2.2118绿色版,一看有个驱动Tsknf602.sys,显然实现是在驱动里干的,于是索性直接看驱动。
结果发现没啥了不起。
DriverEntry中通过搜索ntoskrnl.exe或ntkrnlpa.exe(模块基址由ZwQuerySystemInformation(SystemModuleInformation)获取)的导出表,得到以下函数地址:
MmHighestUserAddress
NtQueryInformationProcess
NtQuerySystemInformation
NtQueryInformationThread
KeStackAttachProcess
KeUnstackDetachProcess
某些函数Nt*的获取不到就用Zw*的地址代替之。
尝试获取ZwReadVirtualMemory,获取不到就用自己写的一个函数(通过KeStackAttachProcess实现)代替之。
奇怪的是获取完NtQuerySystemInformation地址之后,又用ZwQuerySystemInformation地址把它给代替掉了,反而过不了SSDT HOOK,显然是BUG。
之后IRP_MJ_DEVICE_CONTROL的派遣函数,跟到底就是调用以上这些函数来实现获取相应信息或读取内核内存内容给Ring3程序等等,跟Ring3下的实现其实没大区别,就只是在驱动中做可以绕过SSDT HOOK罢了。
其中还有使用(ZwDuplicateObject->)ObReferenceObjectByHandle->(if (is FileObject))->ObQueryNameString来获取进程中文件对象句柄的文件名。
基本上就仅此而已,也没看见什么牛X的遍历进程方法。基本上可以判断只是可以绕过SSDT HOOK,跟一般ARK工具获取进程列表的方法根本没法比,显然算不上ARK工具。
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
谢谢 聪哥的帮助
如果taskinfo通过驱动去取的进程列表,
那么,他怎么取得驱动里读出的进程列表呢,因为我想在ring3 下改他取得的列表,我已经可以hook掉taskinfo在ring3下的API了
|
能力值:
( LV9,RANK:260 )
|
-
-
4 楼
都说了是IRP_MJ_DEVICE_CONTROL
可以Hook住Ring3下的DeviceIoControl分析一下
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
是不是分析DeviceIoControl的 OutBuffer 数据?
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
我想改取得的进程列表数据,
我用DeviceIOView看,他返回的nOutBuffer,一直就为00 00 00 00,
InBuffer,固定长度100,估计是包含了结构指针,
又不知道怎么样用ollyice分析他的结构
有了结构,我就可以隐藏taskinfo的指定进程了
|
能力值:
( LV12,RANK:300 )
|
-
-
7 楼
不一定要在OutputBuffer返回结果,InputBuffer里面可以指定写入的用户态缓冲区指针。
另外我觉得通过Ring3 HOOK来针对性地anti这一个软件没有啥意思……
|
能力值:
( LV2,RANK:10 )
|
-
-
8 楼
聪哥, 能帮我看一下他的ring0是写到InputBuffer的哪个指针位置吗?
|
|
|