CE查找基址的原理
author:anncesky
学外挂制做或不学的人都知道CE
就是Cheat Engine,用这个玩意找基址(当然找基址也不是一定用CE,熟悉逆向的人也用调试器)
用CE找基址是非常方便的,也知道怎么找,但是却不知道为什么这么找,那些个教程也没怎么说
就说怎么找
在这我随便说说
比如,我要查找角色坐标的基址
什么是基址,简单的说,只要这个应用程序不变,那么这个地址就不会变
(比如全局变量,这个变量在编译就确定的它的地址了,编译成汇编后这个地址就直接拿来用了)
动作:CE中查坐标值
比如找到存放这个坐标值的内存地址是 1111 (有可能是基址,在这里假如不是基址)
那么就有 [1111]==坐标
动作:查找访问这个地址的代码
比如:mov [eax+8],edi
那么就有eax+8==1111; [eax+8]==[1111]==坐标; eax==1111-8==1103
然后大家会再去查找1103
为什么再去找这个eax的值(1103)?
为什么重覆的这样找下去就能找到基址(如果选择的访问代码正确的话)?
因为这个1103(也就是eax的值)不可能打娘胎时就在eax里,(就算在娘胎里混也要先播种吧)
最起码也要一句 mov eax,1103 这样才能到eax里,如果你在找访问该地址的代码时找到
mov eax,1103 恭喜你,请重新找,你找错了, 不可能找到这样的访问地址的代码
重新讲上一回
1103只有可能在内存
由 mov eax, dword ptr [1103的内存地址]
这样的形式送给eax,就像上个世纪40年代送孩子一样
当然可能不会直接 mov eax dword ptr [1103的内存地址] 这样送给eax
可能 mov ebx, dword ptr [1103的内存地址]
mov eax,ebx
或其它,反正最后才到eax手中了
所以我们才再在找内存中有1103的数的地址
再找访问1103的地址的代码
看看1103的地址是哪个混蛋+偏移形成的
一般会再遇到像 mov eax dword ptr [esi+10] 这样加偏移的代码
再找esi的地址
找访问地址的代码
假如走狗屎运马上遇到
mov eax dword ptr [立即数]
这回真要恭喜发财,基址捡到了