以下是引用hahayezhe在2010-7-31 17:19:14的发言:
再说的更啰嗦点
如果该人物结构是动态创建,那么我们不需要去找出变量,不管那个人物对象都会有以下判断
血量减少 必然是, 血量 = 当前血量-当前受到的伤害, 用OD或者CE找出这条指令,修改血量 = 当前血量 - 0;
将伤害变量用0代替,血都不动了 还需要加血么?
查看修改的机器码(OD), 直接用WinHex修改文件数据,都不需要什么动态库,
如果不想改变程序的结构用代码实现,那么该程序运行,肯定会读取文件,随便在ReadFile CreateFile(注意A码和U码)里调用修改那段内存指令就可以了。
BOOL MyCharClass::CharMemoryChage(char *p,BYTE *p1,int i){
if(*p == NULL || p1 == NULL || i == 0){
TRACE("*p *p1 i is error");
return 0;
}
DWORD lpfoldprotect;
BOOL err = VirtualProtect((PVOID)p1,i,PAGE_EXECUTE_READWRITE,&lpfoldprotect);
if(err == 0){
TRACE("change Memory is error");
return 0;
}
memcpy(p1,p,i);
DWORD lpfoldprotect1;
VirtualProtect((PVOID)p1,i,lpfoldprotect,&lpfoldprotect1);
return 1;
}
看上面代码,在程序运行期间修改一段内存数据 达到修改一条指令的目的
呵呵。。。不是喝血这个问题,我是打个比喻的,如果我是要移动人物到某个地方呢,显然改变量就不得了。