逆向工程__某游戏基址查找过程

某游戏基址查找过程
     今天闲来无事,好久没有逆软件了,本来用CE想找个基址来写个外挂玩玩,结果发现这个是一个数组,而且跳跃次数也比较多,较为麻烦,没办法,只有祭出我的大杀器OD来办它。过程如下:

//------------------------------CE里面看到的数据:---------------------------//
EAX=0000005A
EBX=00000008
ECX=7383B178
EDX=FFFFFFFB
ESI=7383B2CC
EDI=0000005A
EBP=7383AB24
ESP=0018F66C
EIP=0043FDCC

可能的基址指针 =7383B2CC

0043FDBC - jl 0043FEA1
0043FDC2 - cmp ebx,07
0043FDC5 - mov [esi+ebx*4+000000CC],edi
0043FDCC - jne 0043FE1C
0043FDCE - push 00
//--------------------------------------------------------------------------------------//
//------------------------------------从这里开始用OD了----------------------------------------//
1,0043FDAE    8DB1 54010000   lea esi,dword ptr ds:[ecx+0x154]
开始找esi,目前的偏移是4*ebx+0xCC = 0xEC

2,发现esi被[ecx + 0x154]赋值,接着找exc的值,此时的偏移是0x240

3,0043FED3    8BCE            mov ecx,esi
ecx是被esi赋值的,接着找上面的esi


4,0043FEC6    8BF1            mov esi,ecx
回过头esi,又是被ecx赋值的。。。真烦人,继续找ecx,fuck,发现上面没有push ecx,明显是thiscall的调用约定,ecx在这个子函数
的外面。


5.0047A360    8BCE            mov ecx,esi
疯了。。。ecx又被esi赋值了。。。


6.0047A297    8DB5 54060000   lea esi,dword ptr ss:[ebp+0x654]
esi是被[ebp+0x654]的值赋值的,所以接下来是找ebp,偏移是ebp+894

7.0047A26B    8D2C88          lea ebp,dword ptr ds:[eax+ecx*4]
发现是ebp是由[eax+ecx*4]赋值的,在这里看一下ecx的值,再找eax的值,发现eax是上面call的返回值,故进入函数体
ecx = 84F,故此时的偏移是29D0

8.004406CA    A1 28148E00     mov eax,dword ptr ds:[0x8E1428]
进入函数体里面后,终于发现了基址0x8E1428 + 0x29D0

最后归纳一下整个基址的详细变化过程:基址:0x8E1428 + 0x84F * 4 + 0x654 + 0x154 + 4 * 0x8 + 0xCC 根据规律找各人物之间的关系吧,肯定是0*XXX,1*XXX.

最后验证,多次重启游戏后,发现血量是正常能拿到的。

你可能感兴趣的:(游戏,逆向工程)