某游戏基址查找过程
今天闲来无事,好久没有逆软件了,本来用CE想找个基址来写个外挂玩玩,结果发现这个是一个数组,而且跳跃次数也比较多,较为麻烦,没办法,只有祭出我的大杀器OD来办它。过程如下:
//------------------------------CE里面看到的数据:---------------------------//
EAX=0000005A
//------------------------------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.
最后验证,多次重启游戏后,发现血量是正常能拿到的。
最后验证,多次重启游戏后,发现血量是正常能拿到的。