标签:进阶 hook scanf state angr flag sm 调试
angr绕过反调试,一个是通过之前的方式,使用从特定位置开始测试的方法,还有一种通过hook进行反调试的方法。
其原理就在于angr能够符号化表示函数tumctf2016_zwiebe
p.hook_symbol('ptrace', angr.SIM_PROCEDURES['stubs']['ReturnUnconstrained'](return_value=0))
另外,对于代码自修改程序,需要使用如下的方式
p = angr.Project("zwiebe", support_selfmodifying_code=True)
另外,也可以hook到一些关键函数上,达到控制效果。
比如控制scanf就可以达到和控制返回值类似的效果。
1 flag_chars = [claripy.BVS('flag_%d' % i, 32) for i in range(13)] 2 class my_scanf(angr.SimProcedure): 3 def run(self, fmt, ptr): # pylint: disable=arguments-differ,unused-argument 4 self.state.mem[ptr].dword = flag_chars[self.state.globals['scanf_count']] 5 self.state.globals['scanf_count'] += 1 6 7 proj.hook_symbol('__isoc99_scanf', my_scanf(), replace=True) 8 9 sm = proj.factory.simulation_manager() 10 sm.one_active.options.add(angr.options.LAZY_SOLVES) 11 sm.one_active.globals['scanf_count'] = 0 12 13 # search for just before the printf("%c%c...") 14 # If we get to 0x402941, "Wrong" is going to be printed out, so definitely avoid that. 15 sm.explore(find=0x4028E9, avoid=0x402941) 16 17 # evaluate each of the flag chars against the constraints on the found state to construct the flag 18 flag = ''.join(chr(sm.one_found.solver.eval(c)) for c in flag_chars) 19 return flag
标签:进阶,hook,scanf,state,angr,flag,sm,调试 来源: https://www.cnblogs.com/61355ing/p/10525569.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。