猛牛哥
记录网络点滴生活

776棋牌神兽转盘游戏找某基址的过程

前面的话:因为以前找过一个类似的基址,但是没有把过程记录下来,现在遇到同样问题又要重新来,所以这次记录一下,以备以后查阅。

776这个游戏最近更新了,表示每个动物的下注总分的内存,其基址的最后一级增加了一个变量,如图:
776神兽转盘找基址

776棋牌用CE找基址

776棋牌用CE找基址

其中的EDX就是新增加的地址,经过简单分析,要找这个EDX值的来源可能用CE比较繁琐,所以决定上OD,OD这个强大的工具我也是刚上手。
打开OD,附加游戏进程,定位到在CE里面看到的操作该内存的指令地址:40769D,看到EDX来源:LEA EDX,DWORD PTR DS:[EDI+EDI*8],其实意思就是EDX=EDI*9。

776神兽转盘找基址

776神兽转盘找基址:EDX=EDI*9

接下来寻找EDI来源:向上查看写EDI的操作,发现最近的一处是0040762F    0FB7FF          MOVZX EDI,DI,这条指令应该是把EDI高16位置零(EDI是32位的),它上面有个CALL指令,先在这个call处下断,查看一下这个call是不是改写了EDI。

OD找基址

OD找基址

OD找基址

OD找基址

对比查看,该处call并没有修改EDI的值,继续向上找,找不到直接改写EDI的指令,只有几个call。本想看看0040760E E8 9DB80100 CALL BeastDia.00422EB0这条指令有没有改写EDI,突然又发现他上面不远处又有一条指令:

004075DC    FFD7            CALL EDI

004075DE    8BF8            MOV EDI,EAX

联想到一个call如果有返回值,他的返回值通常是保存在EAX中,那么这个地方的指令是不是EDI的来源呢?下断对比查看一下,果然是这改写了EDI,跟进去看看里面有什么。

 

OD找基址

OD找基址

跟进后发现改写返回值EAX的指令是:

10012A00 >  8B81 F4000000   MOV EAX,DWORD PTR DS:[ECX+F4]

继续单步运行,发现下面跳转到了

10012A12    FF51 40         CALL DWORD PTR DS:[ECX+40]

这条指令,继续跟,发现里面只有2条指令:

OD找基址

OD找基址

第一条:10005F20    8B4424 04       MOV EAX,DWORD PTR SS:[ESP+4]

这里的ESP+4是call这个地址前的最后一个push,返回去一看竟然是push EAX,也就是这个call的作用是把之前入栈的EAX的值还还给EAX,然后在把[EAX+A]的值给EAX,总之,该call执行后的结果是:EAX=[EAX+A],再返回去看EAX=[ECX+F4],那么就再返回看一下ECX。ECX的值是:2A8EFE8,看起来很熟悉,因为刚才查找其他内存基址的时候见到他好几次了,他就是第一级基址的值:[42F9E0],那么EDI的值应该就是:[[[42F9E0]+F4]+A],经检验,该地址的值和EDI的值吻合。那么最后就找到了这个新增变量的计算方法:

EDX=[[[42F9E0]+F4]+A]*9*8

而第一个动物的下注额就是:[42F9E0]+4D0+[[[42F9E0]+F4]+A]*9*8

赞(1) 打赏
猛牛哥原创:猛牛哥的博客 » 776棋牌神兽转盘游戏找某基址的过程

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏