Angr实例分析——使用Capstone

本博客由闲散白帽子胖胖鹏鹏胖胖鹏潜力所写,仅仅作为个人技术交流分享,不得用做商业用途。转载请注明出处,未经许可禁止将本博客内所有内容转载、商用。      

      因为项目需求,需要手动解析汇编代码,从而找到其中的特征。所以,在Angr中,我们需要使用Capstone进行汇编代码的提取。我们在使用Angr.Project()新建工程之后,Angr已经为我们生成了一个Capstone,我们需要做的就是找到这个实例,并且使用其中的方法处理二进制数据。

	#我们首先找到需要反汇编的字符串,如果是thumb指令集的话,指令数据是在偶数地址上,
	#需要在函数地址上面-1,并且制定要读取的大小
    insn_bytes = ''.join(proj.loader.memory.read_bytes(FuncAddr-1,Size)) 
	# proj.arch.提供了两种Capstone一种是proj.arch.capstone,一种是proj.arch.capstone_thumb
	#区别就在于第二种是thumb指令集,这个要注意,因为选择了错误的Capstone实例,就会得到错误的代码
	#capstone.disasm()函数就是获得汇编代码的函数,第一个参数为进行反汇编的byte字符串,第二个函数为汇编代码起始地址
    for cs_insn in proj.arch.capstone_thumb.disasm(insn_bytes,0x00):
        print cs_insn.mnemonic, cs_insn.op_str
	#cs_insn为每条指令代码,重要的是两个属性,一个是他的操作符mnemonic,另一个是他的操作数op_str
需要再提一下,进行反汇编之前一定要选择好合适的capstone实例,否则得不到正确的代码


猜你喜欢

转载自blog.csdn.net/zhuzhuzhu22/article/details/80764342