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寄存器常量传播优化
这种情况,我们也无法看出它对eax的处理体现在哪里,这个时候我们将它变成一条call指令
1.选中syscall指令
2.菜单:Edit -> Other -> Decompile as call 输入如下定义
将两次读取 fs:0 用Decompile as call 定义为:
修复后
2.IDA positive sp value
这是由于栈不平衡导致的
点击options-general,勾选 stack pointer
是这里导致了栈不平衡
3.IDA too big stack frame
这个原理其实跟栈不平衡一样,只不过 add esp , xxxx 的时候将栈改的特别大,我们依旧勾选stack pointer
4.IDA 跳转表修复
有的时候识别不出来,取决于IDA的版本
笔者在此使用的是IDA 7.6
5.函数大小限制
- IDA 反编译函数有大小限制,超过最大长度将报错
- cfg/hexrays.cfg 配置文件可以修改最大反编译函数大小配置项
- 配置项:MAX_FUNCSIZE,默认 64
6.Golang 反编译失败处理
- 逆向分析 golang 函数时,报错 “Call analysis failed…”
- 问题原因是 IDA 分析 0xBB620 处函数调用的目标函数参数错误
- 修改调用目标函数的原型定义为 void x(); 即可解决问题
- Author:5m10v3
- URL:https://5m10v3.top/article/9aa81ec5-9550-4ba4-942a-b7ebe2f0a8cf
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!
Relate Posts