能力值:
( LV2,RANK:10 )
|
-
-
2 楼
怎么这么多人看,没一个人回哦,,
VC不是很懂,本想用delphi仿写上面的代码,谁知在VC下就出错了!
|
能力值:
( LV13,RANK:410 )
|
-
-
3 楼
你hook的地方的原始指令是啥?
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
是这个:
地址 指令
0044A250 CALL 004A7541
|
能力值:
( LV12,RANK:210 )
|
-
-
5 楼
*((DWORD*)0x0044A251)=(DWORD)dwp;
===》
WriteProcessMemory(..............)
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
jjnet老兄,
请问下您的意思是:用WriteProcessMemory语句去代替“*((DWORD*)0x0044A251)=(DWORD)dwp;”实现?
能否具体点,在线等!
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
唉!!
三天多了,网上的贴子看了无许!
还没搞定,请高手指点下哈。。。
我用:
WriteProcessMemory(ghd,(void*)0x0044A251,&dwp, 4 , NULL );
代替:
*((DWORD*)0x0044A251)=(DWORD)dwp;
也出现一样的错误,不能写!
凌晨2点了,睡了,明天还得上班
|
能力值:
( LV12,RANK:210 )
|
-
-
8 楼
VirtualProtectEx(ghd,(void*)00x0044A251,4,PAGE_EXECUTE_READWRITE,&dwoldflag);
*((DWORD*)0x0044A251)=(DWORD)dwp;
VirtualProtectEx(ghd,(void*)0x0044A251,4,dwoldflag,&dwoldflag);
}
}
CDialog::OnOK();
}
void CEDlg::OnClose()
{
// TODO: Add your message handler code here and/or call default
DWORD dwP=0x004A7541-0x0044A250-0x5; //0x004A7541 为原函数
DWORD dwOldFlag;
VirtualProtect((void*)0x0044A251,4,PAGE_READWRITE,&dwOldFlag);
*((DWORD*)0x0044A251)=dwP;
VirtualProtect((void*)0x0044A251,4,dwOldFlag,&dwOldFlag);
你这个本来就是自相矛盾
前面的代码, 找个进程, 修改其他进程.
后面的代码又是修改自己.
修改其他进程需要用WriteProcessMemory.
如果是你 插到别的进程的代码, 那么这中代码里面才是
VirtualProtect((void*)0x0044A251,4,PAGE_READWRITE,&dwOldFlag);
*((DWORD*)0x0044A251)=dwP;
VirtualProtect((void*)0x0044A251,4,dwOldFlag,&dwOldFlag);
|
能力值:
( LV2,RANK:10 )
|
-
-
9 楼
可能是我没写清楚。。。。大家都没看明白?
我就是要读写另外一个程序窗口的进程内存,,DLL注入到进程里的。
HWND hwnd = ::FindWindow( NULL , "Title" ); //获取窗口句柄
上面这句“Title"不是自已窗口的标识,是另外一个程序窗口的标识哈!
好象没有自相矛盾吧,就是不行,搞不懂为什么,
是不是后面那段不要?这个:
void CEDlg::OnClose()
{
// TODO: Add your message handler code here and/or call default
DWORD dwP=0x004A7541-0x0044A250-0x5; //0x004A7541 为原函数
DWORD dwOldFlag;
VirtualProtect((void*)0x0044A251,4,PAGE_READWRITE,&dwOldFlag);
*((DWORD*)0x0044A251)=dwP;
VirtualProtect((void*)0x0044A251,4,dwOldFlag,&dwOldFlag);
CDialog::OnClose();
}
刚才试了试,一样不行!
|
能力值:
( LV2,RANK:10 )
|
-
-
10 楼
UP
这里高手好少来哈,看来要满30贴,贴到调试论坛去了
|
能力值:
( LV12,RANK:210 )
|
-
-
11 楼
还说不自相矛盾。
仔细想想。
|
能力值:
( LV2,RANK:10 )
|
-
-
12 楼
jjnet 麻烦你帮我改改,贴上来,我实在找不出原因,
|
能力值:
( LV2,RANK:10 )
|
-
-
13 楼
什么都要慢慢来
|
能力值:
( LV2,RANK:10 )
|
-
-
14 楼
我这代码搞了5天了,在不同论坛发了贴,也试了很多,就是不能写,头都大了
|
能力值:
( LV2,RANK:10 )
|
-
-
15 楼
嘿嘿,我来学习
|
能力值:
( LV9,RANK:530 )
|
-
-
16 楼
OnOK 与 OnClose 两处都应该是下面这样:
...
HANDLE ghd = OpenProcess( PROCESS_ALL_ACCESS,FALSE,hProcId);
if (ghd) {
dwP=0x004A7541-0x0044A250-0x5;
VirtualProtectEx(ghd,(void*)00x0044A251,4,PAGE_EXECUTE_READWRITE,&dwoldflag);
WriteProcessMemory(ghd,(void*)0x0044A251,&dwp, 4 , NULL );
VirtualProtectEx(ghd,(void*)0x0044A251,4,dwoldflag,&dwoldflag);
}
CloseHandle(ghd);
你的问题:
1. ::OnOK()
*((DWORD*)0x0044A251)=(DWORD)dwp; 是在改你的程序的内存, 不是改被打开的进程的内存;
没有调CloseHandle()
2. ::OnClose()
改别的进程要用 VirtualProtectEx/WriteProcessMemory, 而不是VirtualProtect, *(DW*)xxx=yyy, 那就是在改自己了.
当然, 也要有h = OpenProcess(), 除非前面的OpenProcess()返回的句柄没调CloseHandle(), 而且存下来了.
|
|
|