OD+IDA动静结合反编译C++

目录

需求

流程

1.内存搜索

2.定位内存位置

3.搜索引用内存地址的代码

4.给该位置下断点

5.内存代码和exe静态程序地址的映射

 6.使用静态反编译出C++代码

小技巧:静态编译工具定位到起始位置 

 总结


需求

C++编译出来的hello world函数,如果没有源码,如何定位还原到exe当中的汇编代码位置?软件逆向动静态结合如何操作?

OD+IDA动静结合反编译C++_第1张图片

流程

1.内存搜索

OD+IDA动静结合反编译C++_第2张图片

输入你所看到的字符串:

OD+IDA动静结合反编译C++_第3张图片

2.定位内存位置

OD+IDA动静结合反编译C++_第4张图片

3.搜索引用内存地址的代码

OD+IDA动静结合反编译C++_第5张图片

4.给该位置下断点

OD+IDA动静结合反编译C++_第6张图片

5.内存代码和exe静态程序地址的映射

        IDA(Ghidra)导出的EXE程序地址是0x401000,而使用OD(X32dbg)动态调试看到的地址是0xEA1000,目前看到的helloword程序,是原样搬过去一一对应的。那么看到内存地址把EA改为40,就是静态程序地址了。

OD+IDA动静结合反编译C++_第7张图片

OD+IDA动静结合反编译C++_第8张图片 磁盘地址和内存镜像的对应关系 

6.使用静态反编译出C++代码

在IDA(Ghidra)中,可以对汇编代码进行反编译,它们的功能还是很强大的。

OD+IDA动静结合反编译C++_第9张图片

小技巧:静态编译工具定位到起始位置 

在IDA中,通过view-->open subviews--->Segments,可以看到真实程序起始点:

OD+IDA动静结合反编译C++_第10张图片

 但是程序起始端,并不一定是main,要看一下点跳转。另外一种方法是,在function windows里,启动Quick  filter来查找特定函数:

OD+IDA动静结合反编译C++_第11张图片

弹出搜索框,输入main(或你想找的函数):

OD+IDA动静结合反编译C++_第12张图片

Ghidra的界面这些入口位置就直接在主界面有,按照下面的两个方法都可以找到程序起始点:

OD+IDA动静结合反编译C++_第13张图片

 总结

        通过正向编译,知道要找的东西,在逆向过程中,就可以有的放矢的去观察,了解工具的使用方法和编译原理,数据的追踪线路,再去查找无源码的程序,就有思路了。

你可能感兴趣的:(物联网信息安全,开发技术杂谈,安全,网络安全,系统安全)