能力值:
( LV3,RANK:20 )
|
-
-
2 楼
如果代码形式不变,而且能在下一行下断的话,[esp]就是你想找到的那个数值。
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
[QUOTE=justlovemm;924862]如果代码形式不变,而且能在下一行下断的话,[esp]就是你想找到的那个数值。[/QUOTE]
这里的[esp] 是怎么获得的
如果用OD下端的话 [esp]就是我所要的那个push值是吗?
|
能力值:
( LV4,RANK:50 )
|
-
-
4 楼
从文件解析PE
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
文件是不是c:\windows\system32\ntoskrnl.exe?
具体是怎么分析 ?用工具吗?
|
能力值:
( LV3,RANK:20 )
|
-
-
6 楼
大牛正解。
另外,那个地址是8开头的,你在OD里是看不到的。
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
正解? 额 好吧 正解~~
|
能力值:
( LV3,RANK:30 )
|
-
-
8 楼
你用IDA 逆向ntoskrnl.exe,就能发现NtReadVirtualMemory,不过这个函数加载到内核中后好多偏移都变化了,需要重新定位。我看过NtReadVirtualMemory这个函数,第二个PUSH,好像是一个结构体的地址入栈了,如果程序加载到内核中,那么这个结构体的地址是会变化的,然后如果把立即数入栈,就不存在偏移了。
因此有两种方法,一种比较假单,就是在你那有没还没有启动的时候,扫描一下NtReadVirtualMemory,把没有被HOOK的数据保存下来,然后运行程序,这样就被HOOK了,然后你在把保存起来的数据恢复就行了。
还有一种复杂一点,不用再开始的时候扫描,自己分析ntkrnlpa.exe和win32k.sys文件了。
|
能力值:
( LV2,RANK:10 )
|
-
-
9 楼
如果我说的没错的话, jmp eax 是跳到自己的函数 那么在那个函数返回的地方找到原形不可以吗?
mov eax, myFunction
jmp eax
myFunction:
xxxxx
//做完后一定会
push 1c
push xxxx
....
jmp NtReadVirtualMemory+8
|
|
|