-
-
关于IDA插件KeyPatch不能操作ARM某些汇编指令的解决方案
-
发表于:
2022-5-5 00:01
13605
-
关于IDA插件KeyPatch不能操作ARM某些汇编指令的解决方案
小白遇到这个问题可以直接参考,大佬绕过
环境:IDA7.6,Pthon3.8,keypatch相关参考这个(keypatch)
大家都知道在还原算法的时候,尤其是分析ollvm时(学习别人的思路提高软件安全意识),清楚了真实块的调用顺序后,一般会通过IDA的patch功能修改代码调用关系然后重新F5。
不知为何,分析ARM64架构程序,patch某些指令(跳转指令都会报错,一般指令不报错)的时候会遇到这种提示:
圆圈中应该也有机器码才对,这里没有,这种情况下点击Patch后会报错:
这种情况只能通过kstool工具(支持很多架构)(git上),手动去翻译汇编指令称机器码然后手动填写可以完成patch
->>kstool arm64 "需要翻译的汇编指令" [指令所在的地址]
->>得到机器码
eg:
这个86开头的四个字节就是翻译后的汇编指令机器码。
然后替换下图中选中的前四个字节(当前地址的汇编语句对应的机器码)就完成了patch,此时原来的跳转指令可以跳转到期望的函数中。
还有个更简单的方式:
勾选IDA如图所示选项可以直接显示指令对应的机器码:
以上是手动patch,当然用脚本是最方便的(python中引入idc包):
#测试从虚拟地址addr2处读取四个字节=>得到汇编指令机器码
dest = idc.Dword(addr2)
#观察addr1处指令变为addr2处指令
idc.PatchDword(addr1,dest)
上边dest也可以自定义为跳转指令转换为机器码,那么PatchDword就实现了跳转。
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课
最后于 2022-5-8 19:33
被nxc编辑
,原因: