使用ida pro做反编译时,要注意类型转换

本文探讨了使用IDAPRO进行反编译时遇到的问题,特别是关于寄存器edx的处理方式。文章详细解释了如何正确处理函数调用过程中寄存器的状态,以及如何通过设置类型信息来改进反编译结果。

使用ida pro做反编译时,要注意类型转换

反编译器常常在反编译的时候做一些假设,想调用call常常返回,内存模式是flat,函数框架被正确设置等。当这些假设是正确的,输出代码是正确的。当假设是错误的话,那么得到的代码就和真实的代码不一定一致。来看个例子,

使用反编译器得到如下伪码。

显然,变量v3(相当于edx)根本没有被初始化,为什么?

发生这样的时候,是因为被调用函数常常破坏寄存器的值。在x86约定中,只有esiediebxebp可以跨越call保存。换句话说,其他的寄存器可以通过一个函数调用改变它们的值。因此,反编译器假定函数遵守调用约定,它在函数调用前和函数调用后,把edx识别成两个变量。第一个变量被优化成a1,第二个变量v3成了未初始化的。

实际上 edx有以下三种可能。

  1. 未修改
  2. 用来返回一个值
  3. 被毁坏

通过被调用的函数,反编译器选择了第三种情况。来我们来看看如果是对的,会出现什么

正如我们看到,edx寄存器根本没有被引用。于是我们发现是第一种情况。

As we see, the edx register is not referenced at all, so we have the case #1. If the decompiler could find it out itself, without our help, our life would be much easier (maybe it will do so in the future!) Meanwhile, we have to add the required information ourselves. We do it using the Edit, Functions, Set function type command in IDA. The callee does not spoil any registers:

反编译器产生不同的伪码

因此,我们知道edx并没有通过call被修改。它不过是在调用前后建立了两个实例。

通过调用函数利用edx返回值。我们如下操作设置类型

上面表达式的意识是,函数带有一个参数,参数被调用者压栈,并把结果返回给edx

在第三种情况下,反编译器为edx建立两个不同的变量,第一个被优化掉,第二个被用来放返回值。

正如我们看到的,类型信息在反编译器中扮演了一个很重要的角色。为了得到一个正确的代码,我们要特别注意类型。

IDA Pro是一款非常专业的可编程、可扩展的交互式多处理器反汇编程序。它是逆向工程师、安全分析人员和CTF竞赛选手常用的工具之一。IDA Pro支持多种CPU指令集,包括Intel x86、x64、MIPS、PowerPC、ARM、Z80、68000、c8051等等。它使用数据类型信息和派生的变量和函数名称来注释生成的反汇编代码,并提供符号化信息。IDA Pro还支持Python插件,用户可以利用插件来提供更多的功能,大大减少工作量。它还采用了先进的逆向工程技术,能够帮助用户反向编译源代码,并解决反编译相关问题。总的来说,IDA Pro反编译领域中不可或缺的工具之一。 要安装和使用IDA Pro,您可以按照以下步骤操作: 1. 在官方网站下载IDA Pro软件包并解压缩。 2. 运行"IDAProHelper.exe"程序进行绿化。 3. 运行主程序,选择适合您的操作系统的版本。 4. 新建一个空程序,然后加载要逆向的文件。 5. 可以使用工具栏和导航栏浏览和分析加载文件的反汇编代码。 6. 您还可以打开其他窗口,如Hex_View窗口、Exports窗口和functions窗口,以获取更多的信息。 7. 最后,记得保存您的工作。 以上是关于IDA Pro反编译工具的简要介绍和安装使用步骤。希望对您有所帮助。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [使用ida pro反编译,要注意类型转换](https://blog.youkuaiyun.com/zhangzhm/article/details/93861843)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [反编汇ida pro 7.5](https://blog.youkuaiyun.com/weixin_45078818/article/details/111359136)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值