请问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()后,想把行的高度变高一些,