用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的。
最后修改成这样就好了。
学到了,都是一行一行按的{:1_924:}
页:
[1]