能力值:
( LV2,RANK:10 )
|
-
-
2 楼
这个确实很简单。
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
VirtualProtect
http://bbs.pediy.com/showthread.php?t=33014
http://sluttery.spaces.live.com/blog/cns!3569FEA80C717FD4!3501.entry
http://baike.baidu.com/view/1786426.htm
http://topic.csdn.net/u/20081012/19/4a63ba7f-460f-4b22-ab81-fe46f6dea267.html
"首先应该 OpenProcess
然后在VirtualProtectEx
再 ReadProcessMemory/WriteProcessMemory
再 VirtualProtectEx"
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
我不太明白楼主为什么说要用到VirtualProtectEx这个函数
这是个修改指定内存为可读写的函数
我现在要做的是
mov edx, dword ptr [esp+1C]
push edx
这两句改成我想要压入的数据比如push 00140000,但00140000处的数据为零,我需要的数据是一个IP地址
如192.168.1.200
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
你不用virtualprotect写不了啊。你要先用此函数把该段代码所在内存页的只读属性去掉。。。
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
if (ul_reason_for_call == DLL_PROCESS_ATTACH) {
MessageBox(NULL,L"XX",L"XXX",MB_OK);
__asm{
mov eax,ChangeMemory
add eax,3
sub eax,0x4133d9
mov ebx,0x4133d3
mov word ptr [ebx], 0xe990
mov dword ptr [ebx+2],eax
mov byte ptr[ebx+6],0x90
}
return TRUE;
}
VOID ChangeMemory()
{
__asm{
push ebx
push lpiwant
mov edi,esi
add edi,0xd4
mov esi,lpiwant
movsb
movsb
movsb
mov eax,0x00404b03
call eax
mov eax,0x004133da
pop esi
pop edi
jmp eax
}
}
额 代码很笨拙多处硬编码...意思大概就是这个了,修改mov edx, dword ptr [esp+1C]附近代码,跳入你自己的DLL代码中然后修改这[esp+1C]里面的值,再跳回去注意堆栈平衡,貌似叫inlinehook ?不知道 楼主加油吧.
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
CreateProcess后挂起, 然后 WriteProcessMemory ,再恢复
|
能力值:
( LV4,RANK:50 )
|
-
-
8 楼
[QUOTE=gubukelx;867395]已知某程序A,它所用到的参数其种一个如下
mov edx, dword ptr [esp+1C] 由于这个[esp+1C]的值不符合我们的实际需要
现在我想将上面的
mov edx, dword ptr [esp+1C]
修改成push 00140000
用OD是可以直...[/QUOTE]
你贴的不全 ----我无法写
动态修改 那就是 内存PATCH,即补丁
主要用 调试API设断点,捕获异常,修改欲改处,执行,写回被修改地方原来的代码
主要函数:CreateProcess,指定DEBUG_PROCESS or DEBUG_ONLY_THIS_PROCESS
WaitForDebugEvent
GetThreadContext
SetThreadContext
ReadProcessMemory
WriteProcessMemory
|
能力值:
( LV5,RANK:70 )
|
-
-
9 楼
没钱了 ,来骗点钱花花 ,(1)我感觉你要考虑是否有能够容纳代码的空间,(2)可能由于代码段一般都是只读的所以要改变一下节属性用 楼上所说的VirtualProtectEx,然后在指定位置写入你要的代码。 不知帮到你没有,要是感觉可以就给些kx花花 。
|
|
|