能力值:
( LV2,RANK:10 )
|
-
-
2 楼
大哥们帮我改改行不,我卡在这3天了。弄不机密这种函数咋HOOK。
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
我仔细看了一下,发现你卡在这里主要的问题是你没弄明白pSystemProcesses 这个指针所指向的内存中存储的是什么东西,这导致了你的代码里有一点问题,才会得不到ProcessId.
zwQuerySystemInformation这个函数的第二个参数是 pSystemProcesses所指向的一块开辟好的内存区,这里面会存放当前系统中的所有进程信息,它实际上是个数据,因此你想遍历所有进程的话,需要不断的操作pSystemProcesses这个指针,使它每次移动到下个进程结构的起始处,进而得到你想要的进程信息(processid, processname),那么问题来了,怎么知道下个进程结构的起始处呢?这就要用到pSystemProcesses.NextEntryDelta了。这个成员里面存储的就是下个进程结构起始地址相对当前地址的偏移量。所以你的代码中 pSystemProcessesy.NextEntryDelta:=pSystemProcessesy.NextEntryDelta-4 这个语句很无理头.你代码里所有出现对NextEntryDelta进行操作的语句都是无意义的,不知道你想实现什么。。
另外,说明一下,其实你的程序执行到第一次循环的时候,是得到了processid 的,只不过恰好这个值是0,因为它是系统的自举进程,进程号就是0. 后续由于你操作NextEntryDelta不当,导致你没能继续遍历其他进程,所以在你看来,好像是什么信息都没得到一样。。
不知道你明白了没有?
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
pSystemProcessesy.NextEntryDelta本来是减1的,一共输出过pSystemProcessesy.NextEntryDelta次(796次)pid全是0。遍历好像没有问题,
while pSystemProcesses<>nil do
begin
pSystemProcesses.NextEntryDelta:= pSystemProcessesy.NextEntryDelta;
if pSystemProcesses.NextEntryDelta>0 then
begin
pSystemProcessesy.NextEntryDelta:=pSystemProcessesy.NextEntryDelta-1
end else pSystemProcesses:=nil;
end;
|
|
|