需求
C++编译出来的hello world函数,如果没有源码,如何定位还原到exe当中的汇编代码位置?软件逆向动静态结合如何操作?
流程
1.内存搜索
输入你所看到的字符串:
2.定位内存位置
3.搜索引用内存地址的代码
4.给该位置下断点
5.内存代码和exe静态程序地址的映射
IDA(Ghidra)导出的EXE程序地址是0x401000,而使用OD(X32dbg)动态调试看到的地址是0xEA1000,目前看到的helloword程序,是原样搬过去一一对应的。那么看到内存地址把EA改为40,就是静态程序地址了。
磁盘地址和内存镜像的对应关系
6.使用静态反编译出C++代码
在IDA(Ghidra)中,可以对汇编代码进行反编译,它们的功能还是很强大的。
小技巧:静态编译工具定位到起始位置
在IDA中,通过view-->open subviews--->Segments,可以看到真实程序起始点:
但是程序起始端,并不一定是main,要看一下点跳转。另外一种方法是,在function windows里,启动Quick filter来查找特定函数:
弹出搜索框,输入main(或你想找的函数):
Ghidra的界面这些入口位置就直接在主界面有,按照下面的两个方法都可以找到程序起始点:
总结
通过正向编译,知道要找的东西,在逆向过程中,就可以有的放矢的去观察,了解工具的使用方法和编译原理,数据的追踪线路,再去查找无源码的程序,就有思路了。
版权归原作者 向往生 所有, 如有侵权,请联系我们删除。