type
status
date
slug
summary
tags
category
icon
password

1.IDA Decompile as call

强网杯某vm逆向重建后的代码,其syscall 于标准的 Linux syscall 有区别,导致 IDA 对其优化产生错误的代码
设想一种情况,在一个自定义运行环境中,syscall
  • rax 传入调用号
  • rax 作为返回值传递
默认情况(linux syscall)下,ida认为此处的 syscall 不会修改 rax 寄存器的值,导致 rax寄存器常量传播优化
notion image
这种情况,我们也无法看出它对eax的处理体现在哪里,这个时候我们将它变成一条call指令
1.选中syscall指令
2.菜单:Edit -> Other -> Decompile as call 输入如下定义
将两次读取 fs:0 用Decompile as call 定义为:
notion image
修复后
notion image

2.IDA positive sp value

这是由于栈不平衡导致的
notion image
点击options-general,勾选 stack pointer
notion image
是这里导致了栈不平衡
notion image
notion image

3.IDA too big stack frame

这个原理其实跟栈不平衡一样,只不过 add esp , xxxx 的时候将栈改的特别大,我们依旧勾选stack pointer
notion image

4.IDA 跳转表修复

有的时候识别不出来,取决于IDA的版本
笔者在此使用的是IDA 7.6
notion image
notion image
notion image
notion image
notion image

5.函数大小限制

  • IDA 反编译函数有大小限制,超过最大长度将报错
  • cfg/hexrays.cfg 配置文件可以修改最大反编译函数大小配置项
  • 配置项:MAX_FUNCSIZE,默认 64

6.Golang 反编译失败处理

  • 逆向分析 golang 函数时,报错 “Call analysis failed…”
  • 问题原因是 IDA 分析 0xBB620 处函数调用的目标函数参数错误
  • 修改调用目标函数的原型定义为 void x(); 即可解决问题
notion image
IDA学习之类型修复2023西湖论剑-Dual personality复现与思考
Loading...
5m10v3
5m10v3
目前主攻方向为Re
Announcement
🎉5m10v3のBlog已经上线啦🎉
-- 感谢各位师傅的支持 ---
👏欢迎师傅们前来交流👏