软件基址是软件的内存起始地址,能够帮助我们实现很多有趣的功能,但要找准确地它也有些技巧。
1.使用调试器获取基址
通过使用调试器如Ollydbg等软件可以很快找到基址,首先打开软件,并打开要分析的程序以加载它的图像到内存中。然后在软件的工具栏中选择“打开进程”,选择分析目标程序。打开后点击“菜单栏-查看-DumpBinary”保存内存。打开生成的Dump文件,使用当前分析节头的物理偏移量减去节的RVA或者文件偏移量减去节头大小可以得到基址。
2.使用特定的辅助软件
使用特定的辅助软件如CheatEngine或ArtMoney等软件可以帮助我们找到基址。首先运行目标程序,并打开辅助工具,点击“打开进程”,然后选择你的目标程序,跟随辅助工具的菜单栏依次选择“搜索-值类型-精确值搜索”输入你想要搜索而且你知道的一个值,重复几次后,工具就会给出基址。
3.使用独立模块基址
若该程序本身是个独立模块,那么它的基址很可能就是它的模块起始偏移量。这时我们可以用“PEInfo”这类模块信息查看工具来查找模块基址,然后使用独立模块基址加上需要的偏移量得到目标地址。
4.使用黑科技:硬件断点和INT3指令诱导中断
在程序的内存区域下断点然后让它执行指令时回避断点在指令单元执行时的问题。通过这个方法可以获取到基址,但是要求程序本身的代码具备一定的特征,不然结果不可预测。
5.使用重载操作符运算
可以通过重载操作符技术在程序中自行注入获取基址的函数、操作符。要注意的是,这个方法需要使用高级的反汇编、调试技术,且存在程序修改的法律风险。
6.结合多种方法综合分析
要获取基址并不是只能使用单一的方法,而是结合多种因素进行分析,最终得出正确的结果。充分了解每种方法的优劣和特点,合理选用合适的方法,可以大大提高分析的成功率。
综上所述,找到基址虽然有难度,但是有很多方法可以帮助我们达到目的。在实践中要结合各种因素进行分析,充分利用工具功能,才能最终找到准确的目标地址。