这几天给客户写一个辰龙棋牌的抢座挂,客户要求抢座位时需要给桌子设置密码。本来觉得是个比较简单的时,可能改改内存就可以了。经过分析,找到了保存桌子密码的内存地址。开始查看“什么代码访问了该地址”,奇怪的发现:进入桌子时,游戏并不会读这处内存,而只有在游戏房间里设置这个密码时才会读写。本人第一次做这种东西,没有经验,所以开始胡乱想象:难道是把密码保存在硬盘文件或者注册表了?经过各种分析、查找、监控,发现密码既没有写入文件,也没有写入注册表。最后经过各种折腾,发现这个棋牌游戏的房间设置是保存在游戏服务器的(真是坑爹,既然是保存在服务器,为什么还要每次新打开游戏都要重新设置)。
最后正确的分析过程如下:
先给游戏房间设置个密码,然后搜索到存有这个密码的内存地址,然后看看是什么代码访问了此地址。阿里云9折优惠码:8JZ7BR
关掉CE,打开OD,在76BBAD4A – 8A 11 – mov dl,[ecx]和76BBAD50 – 88 10 – mov [eax],dl这2个地方下断。因为发现这2处代码只间隔2行,为了省事,改为只给第一行下断。
按CTRL+F9返回看看:
返回后直接是程序领空,模块名就是程序名:gameplaz,看到刚才断点处是复制字符串。后经过几次简单分析,这里不是想要找的地方。因为刚才用ce查看时,设置密码时这个断点处会执行多次,所以直接F9继续运行,又断在这个地方了,继续ctrl+f9,然后分析,最后发现这个地方应该就是把房间设置发送到游戏服务器的代码。因为下面不远处有个call是调用的networks(网络)模块。
在经过进一步测试、验证,这里的call是正确的。
至此,直接构造数据,然后调用游戏的网络call发送即可。
大佬请教一下,就是研究内存这方面的东西该如何学习呢,可以给点建议么。