在逆向MIPS指令集的软件时,如果想看反汇编到C代码的结果,现在基本有如下三种选择:
感觉最好用的是Ghidra,其次是JEB,最后是IDA,所以就介绍一下Ghidra,这玩意和“鸡爪”有点谐音
最新版的Ghidra是要JDK11的,所以为了避免环境问题还是装到了虚拟机上(NSA的工具,你不害怕?),在进行MIPS的逆向任务中遇到了一些使用问题,在此记录下问题以及解决方案:
显示段名字
在Ghidra默认的反编译窗口中,虽然能看到机器码对应的汇编代码,但是无法看到相应段的段名,可以使用如下方法开启:
变量高光
在Ghidra默认的反汇编窗口中,单击一个变量并不能使整个窗口中的这个变量同时高光,可以在这个变量上右键,然后进行相应的高光操作:
plt函数识别错误
Ghidra中经常无法在函数中自动的识别调用的plt函数并且将函数名修改,所以需要手动修改。而且还存在plt函数识别错误的情况,如图:
大写的FUN函数一般是识别正确的,小写的func一般是识别错误的,当我进FUN_00402b00这个函数时看起来没有什么异常:
但是当我点进func_0x00402ea0这个函数时,我却会进入到FUN_00402e90这个函数中:
猜测原因是因为plt函数识别时,把有的plt函数的前面代码识别到了上一个plt函数的后面了,解决办法是在反编译窗口中进行删除分析错的函数重新分析,和ida的删除函数重建有点类似,不过可能是和多个函数相关,所以要删除和重新分析多个:
- 把附近的几个plt函数识别全部清空
- 清空时不选择repair flow
- 每一个plt函数(16字节)重新反编译
- 每一个反编译后的plt函数重新create function
然后plt的函数识别就可能恢复正常了: