IDA新版与旧版的API变更
IDA 的变更
在做逆向的时候,有时会涉及到对硬指令的更改,不论是直接修改还是异或之类的,由于数据量比较大,所以会用到 IDA 提供的脚本编辑器(
shift + F2
)但是网上有些 WP 给出的是比较旧的 IDA 脚本,在新版 IDA 中使用会报出各种
"NameError: name xxx is not defined"
的错误,这是因为 IDA 官方在新版中修改了部分 API 的名称,导致新旧版本不互通
脚本示例
- 在旧版本中:
address = 0x600b00
for i in range(182):
PatchByte(address + i, Byte(address + i) ^ 0xC)
- 在新版本中
address = 0x600B00
for i in range(182):
ida_bytes.patch_byte(address + i, idc.get_wide_byte(address + i) ^ 0xC)
在 IDA 7.0 以后的版本中,要将:
idc.PatchByte()
改为ida_bytes.patch_byte()
idc.Byte()
改为idc.get_wide_byte()
解决方法
网上解决方法提到了很多,但是我尝试之后,发现大部分方法在我使用的 吾爱破解论坛 版的 IDA Pro 7.7.220118 (SP1) 全插件绿色版 上无效,最后我是在 IDA 官方文档上解决
为避免大家再次踩坑,所以记录一下
官方文档
Hex-Rays 在官网的
The guide
部分列出了新版与旧版 IDA 中 API 的名称变化,需要时可以ctrl + F
自行查找 API 名称是否变动(一般旧版在函数名前加上 idc,例如idc.xxx()
)
其他方法
其他方法在我的 IDA 版本中无效,但是也搜集了一下,说不定其他版本可以
评论