修复反编译器中的错误地址引用

admin 2024年11月9日21:26:38评论15 views字数 585阅读1分57秒阅读模式

修复反编译器中的错误地址引用

最近常常遇到一个反编译的问题,当反编译没有高级元数据的代码(尤其是固件)时,你可能会看到看起来很奇怪的地址表达式(如上),这些表达式似乎没什么意义。

这些是什么/如何修复/改进伪代码

因为在CPU级别上,地址和简单数字之间没有区别,所以区分地址和普通数字是一项困难的任务,在不实际执行代码的情况下,一般是无法解决的。IDA使用一些启发(heuristics)式方来尝试和检测数字何时看起来像地址,并将这些数字转换为偏移量,但这样的启发式方法并不总是可靠的,并且可能导致误报。当数据库在 0 附近具有有效地址时,特别容易出问题,因为很多小数字看起来像地址。反编译器依赖于IDA的分析,并使用其提供的信息来产生伪代码,这些伪代码被准确的识别成表示机器代码的行为。然而,如果分析出错,会适得其反。值得庆幸的是,IDA是交互式的,允许修复几乎任何内容。

在上述情况下,通常最简单的算法如下:

1.将光标定位在错误的地址表达式上

2.按下 Tab 切换到 disassembly。你应该在错误的偏移表达式上或靠近错误的偏移表达式。注意,它并不一定和在伪代码中看到的相匹配。

修复反编译器中的错误地址引用

3.将其转换为普通数字,例如按Q(十六进制)、H(十进制)或#(默认)。

修复反编译器中的错误地址引用

4.按 Tab 切换回伪代码F5刷新。错误的表达式会转换为普通数字或其他上下文相关表达式。

修复反编译器中的错误地址引用

原文始发于微信公众号(军机故阁):修复反编译器中的错误地址引用

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年11月9日21:26:38
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   修复反编译器中的错误地址引用http://cn-sec.com/archives/1790556.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息