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实例,否则得不到正确的代码


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值