当前位置:编程学习 > VC++ >>

请问VC环境中 如何做到OD中的反汇编修改汇编指令

我向一个游戏中写入一个数据,就能做到G的目的,基本的流程就是 1. FindWindow 2.GetWindowThreadProcessId 3.OpenProcess 4.WriteProcessMemory 可是这样有些功能并不能实现,OD中可以轻松实现 比如植物大战僵尸的自动收集阳光 0043158F 这个地址,汇编语句原本是jne 00431599,HEX内容是75 08 只要改成jmp 00431599,HEX则自动变为E8 08 那么就实现了自动收集阳光的功能 那么请问,如何在VC中实现呢?需要我提供什么数据,我追过来,然后帮我写好代码,WIN32控制台程序就可以。。 问题解决 一定加分!
追问:谢谢你,功能已实现 可有个疑问麻烦吗,保证追分!
关于写入值BYTE bCode = 0xE5;
我只把一个E5写入 可还有种情况
如jne 004140EC要NOP掉,本身是  6个字节,NOP掉后,就变成6个NOP,也就是6个0x90  是不是我就要定义数组bCode[6] = {0x90,0x90,0x90,0x90,0x90,0x90}  然后写入?
假如是0F 84 1F 09 00 00 ,改了以后变成E9 20 09 00 00 00,就定义{0xE9,0x20,0x09,0x00}
CloseHandle( hProcess );//什么意思呢?能否发给我教程呢 179819998@qq.com
答案:你实际上就是想统一个能写植物大战僵尸进程内存的程序?
如果0x43158F这个地址是不变的话,可以这样写:
HWND hWnd = FindWindowEx( NULL, NULL, "xxxx", "xxxx" );//这里是游戏进程的窗口名和窗口类名。
PVOID pAddr = (PVOID)0x43158F;
DWORD dwProcessId = 0;
GetWindowThreadProcessId( hWnd, &dwProcessId );
HANDLE hProcess = OpenProcess( PROCESS_VM_WRITE|PROCESS_VM_OPERATION, FALSE, dwProcessId );//相应的权限打开游戏进程,获取句柄。
 
DWORD dwWritten = 0;
BYTE bCode = 0xE5;
WriteProcessMemory( hProcess, pAddr, &bCode, sizeof( bCode ), &dwWritten );
CloseHandle( hProcess );//把0xE5写入0x43158F处。
//这样就完成了修改
其他:你用WriteProcessMemory也可以直接把jne 00431599改成jmp 00431599啊,WriteProcessMemory又不是只能改阳光的数量这些的,改的是内存的数据,这些个执行代码本身在内存中也是数据呀。你在OD中把jne 00431599改成jmp 00431599,然后看这一句代码在内存中是怎么写的,你也就在VC中将该地址中的数据改成那样!!!我已经改过,而且有一个视频是讲VC WG的,老师就是这样做的 ;这样做你就可以做一个复选按钮,选中的时候内存中的数据是
E8 08,实现自动收集阳光,把复选的勾去掉,内存中就变成75 08,恢复以前的自己手动收集了! 

上一个:vc++6.0 安装过程中问题
下一个:最近在弄MFC中的CListCtrl控件,有几个问题一直弄不出来:1)就是insertitem()后,想把行的高度变高一些,

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,