IDA Pro是玩逆向工程必不可少的工具,但是很遗憾IDA Pro好像不支持直接导入map文件(如果有谁知道可以,请告诉我)。前几天分析一个程序,很奇怪提供了MAP却没提供PDB。不悦,顺手写了一段把 map文件转换成IDA Pro的idc脚本的Python小程序:
<!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
-->#-*-coding:utf-8-*-
from__future__importwith_statement
importsys
importos
defmap2idc(in_file,out_file):
withopen(out_file,'w')asfout:
fout.write('#include<idc.idc>\n')
fout.write('staticmain()\n{\n')
withopen(in_file)asfin:
forlineinfin:
list=line.split()
iflen(list)>=3andlen(str(list[2]))==8andstr(list[2]).isalnum():
fout.write('\tMakeName(0x%s,"%s");\n'%(list[2],list[1]))
fout.write('}\n')
defmain():
fromoptparseimportOptionParser
parser=OptionParser(usage='usage:%prog<mapfilename>')
(options,args)=parser.parse_args()
iflen(args)<1:
parser.error('incorrectnumberofarguments')
returnmap2idc(args[0],os.path.splitext(args[0])[0]+'.idc')
if__name__=="__main__":
sys.exit(main())
from__future__importwith_statement
importsys
importos
defmap2idc(in_file,out_file):
withopen(out_file,'w')asfout:
fout.write('#include<idc.idc>\n')
fout.write('staticmain()\n{\n')
withopen(in_file)asfin:
forlineinfin:
list=line.split()
iflen(list)>=3andlen(str(list[2]))==8andstr(list[2]).isalnum():
fout.write('\tMakeName(0x%s,"%s");\n'%(list[2],list[1]))
fout.write('}\n')
defmain():
fromoptparseimportOptionParser
parser=OptionParser(usage='usage:%prog<mapfilename>')
(options,args)=parser.parse_args()
iflen(args)<1:
parser.error('incorrectnumberofarguments')
returnmap2idc(args[0],os.path.splitext(args[0])[0]+'.idc')
if__name__=="__main__":
sys.exit(main())
使用方法:
<!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
-->pythonmap2idc.py/path/to/mapfile
在IDA Pro中,加载待分析程序后,File-->IDC file...,选生成的IDC文件。
本文介绍了一个Python脚本,用于将MAP文件转换为IDA Pro可用的IDC脚本,帮助逆向工程师更好地进行程序分析。
2万+

被折叠的 条评论
为什么被折叠?



