本文纯粹是和想学习这方面知识的新手做简单的技术讨论(咱也算和软件逆向工程沾边了)。
作为一个文科生,“基址”到底是个什么东西,这个概念我就折腾了很久,做培训的老师们不会详细讲,网上的视频不会多解释。视频教程,往往是拿一个游戏演示一下找基址的过程。
我就用自己的理解来举个例子吧。
用CE找基址的过程,感觉就像你去参加一个寻宝真人秀综艺节目,节目组给一点点线索,要你在一栋超级大楼里找到一个房间,就是反推获得这个“目标房号”。这栋超级大楼可能有几万个甚至几十万个房间……获得“目标房号”后,你退出大楼,然后重新进去。这时候线索全变,但是“目标房号”不变。你通过“目标房号”里放的小纸条,根据指引,顺推,最终找到宝物。
“目标房号”里的小纸条,比如写了个数字16,你就去找16号房间,然后16号房间里,也许有块牌子,上面写了个257。然后你又去257号房间,发现宝物就在257号房间里。当然,我这里只是为了方便理解举的例子。实际上,顺推的过程比这还复杂一点,但是基本上知道了“目标房号”就能找到宝物了。
反推的过程中,节目组可能给你一张残缺的地图啥的,让你去某些房间碰运气。在那些房间里又能得到一点别的线索,这些线索,都是为了找出“目标房号”。
有时候还有意外事件,才根据线索找了一会儿,你就被工作人员赶出大楼一段时间。再进大楼,线索全变,“目标房号”不变,好吧,重新来吧,这不仅仅是脑力活。
基址就是“目标房号”。
宝物就是我们想要知道的数据。比如说,游戏人物当前HP。
理解了基址的概念,知道了找基址过程大概的意思,我们再来看一下看雪安全论坛“Zn风扇”这位大佬写的一段“浅析找基址原理”(**********里面的内容为转载)。*******************************************************
首先讲讲视频里找基址的套路:
1. 找出某个属性的地址
2. 查看是什么地址访问或写入该地址
3. 找到类似mov [eax+110],ebx这样的指令,然后继续搜索eax的值