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

Posted 向往生

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OD+IDA动静结合反编译C++相关的知识,希望对你有一定的参考价值。

目录

需求

流程

1.内存搜索

2.定位内存位置

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

4.给该位置下断点

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

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

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

 总结


需求

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的界面这些入口位置就直接在主界面有,按照下面的两个方法都可以找到程序起始点:

 总结

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

以上是关于OD+IDA动静结合反编译C++的主要内容,如果未能解决你的问题,请参考以下文章

反汇编出来的地址是运行地址还是编译地址?

C++生成的DLL用啥工具反编译

谁能帮我把一个hex文件反编译为c语言文件?

什么软件能将C语言的执行文件反汇编为汇编源代码

ida按f5无法反编译出c的伪代码怎么破

IDA使用初探-1.启动IDA