这些都是本人学习找基址的体会,写作水平有限表达得不清楚,网友或看不懂,或这个体会本来就是错的。贴出来认吧!哎。。。-_-!
查找什么代码写入该地址:
首先,当然会弹出一个框框,有代码显示出来。之后,怎么去判断我们到底应该选择哪一条代码呢?
举个例: MOV [eax+1C],ebx 查找EAX的值的内存地址
之后,框框就会显示这类格式的代码(中括号在后面);如果前面是EAX的话,就是对的了。
MOV eax,[ecx+2F]
MOV ecx,[ebp+1A]
MOV ebx,[eax+3D]
因为在OD里是以这样的顺充执行代码 //也就是逆向;
MOV eax,[ecx+2F]
MOV [eax+1C],ebx
以上只是一般会遇到的情况,还有可能会出奇意料以外的,例如:
MOV eax,[ecx+2F];
PUSH eax
EBP+18 //EBP就充当一个变量,变量EBP+偏移18的值指向其它寄存器的值;这样在框框中就找不到eax
,判断的难度又提高了;还有待以后继续学习。
查找什么代码读取该地址:
同样,框框里有很多代码,怎么判断,选择哪一条呢?无论选择哪一条代码,结果只有一个。就是查找到的内存
地址的值在当前游戏里是不会产生变化的。举个例:框框显示有代码如下,都是读取同一个内存地址。
MOV eax,[edx+3E]
MOV edx,[ecx+3E]
MOV ebx,[eax+3E]
MOV esi,[ebx+3E]
MOV ecx,[esi+3E]
下一步,我们要做的就是用CE查找括号中的edx,ecx,eax,ebx,esi的值的内存地址。得出这些寄存器的值的内存
地址;然后,继续操作游戏,观察数值有没有变化,内存地址的值在当前游戏中是一定不会发生变化的(这个很重要)。
内存地址的值发生变化就不要选择了肯定是错的。
写到最后,综合概括一下吧:以目标代码为主:MOV EAX,[EDX+3E]选择有EAX的代码,如果没有EAX,就随便选择
,一般都是第一条代码,双击查看更从信息,查找值,得到值的内存地址,断续操作游戏,判断内存地址的值有
没有变化,变化的不要,选择不变化的。
内存地址+偏移 组成新的内存地址再加偏移 一直这样循环。在这个循环中,如果其中一个内存地址是变化的,
最终就不等于当前游戏数值内存地址。当前游戏数值内存地址指代的不是基址啊,是用CE查找数值直接找出来的内存地址。
//只有我才可以理解我在写什么。。。-_-~