能力值:
( LV4,RANK:50 )
|
-
-
26 楼
还有一个问题,test_ReadProcessMemory函数的声明少了WINAPI ,
__declspec( naked ) void WINAPI test_ReadProcessMemory( HANDLE hProcess, LPCVOID lpBaseAddress, LPVOID lpBuffer, DWORD nSize, LPDWORD lpNumberOfBytesRead)
{
__asm
{
mov edi,edi
push ebp
mov ebp,esp
mov eax,ReadProcessMemory
add eax,5
jmp eax
}
}
|
能力值:
( LV2,RANK:10 )
|
-
-
27 楼
7C8021CE 90 nop
7C8021CF 90 nop
7C8021D0 > 8BFF mov edi,edi ; ReadProcessMemory
7C8021D2 55 push ebp
7C8021D3 8BEC mov ebp,esp
7C8021D5 8D45 14 lea eax,dword ptr ss:[ebp+0x14] 我要从这里执行
7C8021D8 . 50 push eax
7C8021D9 . FF75 14 push dword ptr ss:[ebp+0x14]
7C8021DC . FF75 10 push dword ptr ss:[ebp+0x10]
我曾经遇到过这样的问题,API模糊调用就与此类似。看你的地址这段代码应该是在某个dll中,如果你想直接该dll中的函数应该是
call 7C8021D0这种格式吧,或者是call XXXXXXXX,然后在XXXXXXXX地址是个jmp 7C8021D0。如果你想从7C8021D5位置调用,原理上是没有问题的,但是前提是你要保持堆栈平衡。如果是正常调用,在call之后,堆栈应该压入函数的返回地址,在程序正常执行到7C8021D5之前,7C8021D2处的push改变了堆栈,如果你想直接从7C8021D5处开始调用,那么就要保证在调用7C8021D5之前的堆栈和正常调用7C8021D0时的堆栈是一样的,也就是说你在程序中使用call 7C8021D5之前还要单独的调用一次push语句用来保持堆栈平衡。
|
能力值:
( LV2,RANK:10 )
|
-
-
28 楼
naked 要自己ret,无它
|
能力值:
( LV5,RANK:60 )
|
-
-
29 楼
再次领略了乌龟大师的风范!
|
能力值:
( LV2,RANK:10 )
|
-
-
30 楼
一般都用汇编,就是嫌这些太麻烦了。
|
能力值:
( LV13,RANK:388 )
|
-
-
31 楼
直接调ZwWriteVirtualMemory?
|
能力值:
( LV2,RANK:10 )
|
-
-
32 楼
可以理解问test_ReadProcessMemory会把堆栈重写,而ReadProcessMemory则不会重写堆栈吗?
|
能力值:
( LV2,RANK:10 )
|
-
-
33 楼
高手!
|
能力值:
( LV13,RANK:388 )
|
-
-
34 楼
晕 我只是问问潜水中的各位牛 这么做可不可以
感觉上应该是可以的,不过没试过
r3下inline hook readprocessmemory 防止读进程 好像没用吧
|
|
|