女萝岩 发表于 2020-3-18 20:39

用IDC脚本实现hex2chr

本帖最后由 女萝岩 于 2020-3-18 20:39 编辑

用IDA分析程序的过程中可能会遇到如下代码:

指令中的58 50这些hex其实都是字符,指针停留在数字上面并按R键就可以把hex转换为字符。如果要处理的指令数量比较多的话,我们就需要IDC脚本了。

这是我第一次写IDC脚本,一点头绪也没有,只能查看IDA的帮助文件,找到了一些有用的信息。
OpChr(long ea,int n);

这个函数可以把指令中的hex转换为字符,两个参数,第一个参数ea是指令开始的地址,第二个参数n用来指定操作数,0代表转换指令中的第一个操作数,1代表转换指令中的第二个操作数,-1代表指令转换指令中全部操作数。成功则返回1,失败返回0

这里顺便说一下IDC脚本执行的三种方式:
第一种是输出窗口的IDC命令行,适合执行一行脚本。
第二种是File-IDC command,适合执行多行脚本。
第三种是File-Script File,执行一个idc文件,适合功能复杂的脚本。
在输出窗口中的IDC命令行测试了一下:
OpChr(0x1000141F,1)
发现可以实现效果。

接着写一个循环了看下效果。



按照第二种方式执行IDC脚本,可以完美实现效果。


把IDC脚本写入到一个文件中保存为hex2chr.idc。用第三种方式执行IDC脚本,提示
“Function declaration is expected”的错误,查看IDC的帮助信息,原来是要加一个main函数,加了main函数,发现还是提示这个错误,到ida的官方网站查看示例文档,原来main函数必须是static的。
最后修改成这样就好了。











wisoft 发表于 2020-3-19 10:23

学到了,都是一行一行按的{:1_924:}
页: [1]
查看完整版本: 用IDC脚本实现hex2chr