2017/4/20

Python code object的逆向:

生成codeobject的方法是可以通过compile生成:

	code_str = """def hello():\n    print"hello,world\\n"\nimport hashlib\nhashlib.sha1()\nhello()"""
	code_obj = compile(code_str, '<string>', 'exec')
	dis.dis(code_obj)
	exec(code_obj)


Python的code object的逆向通过执行dis.dis()来实现,得到的是可以基本读懂的类似于汇编的代码。Codeobject反汇编的内容会出现load code object的字段应该是说明原函数里应该是有自定义的函数。如何查看自定义的函数内容还没有头绪。

另外所做的题目中使用的是marshal.loads()函数,参数是一个乱码的字符串,生成了一个codeobject,至于,marshal模块,先存疑。日后解答。

         有关于缓冲区溢出漏洞的,如果利用到了cookie检测技术的防止栈溢出的话,我们可以采用溢出异常函数处理的方式进行,但是异常处理函数的话会有SEH保护,但是SEH保护的特点是,如果异常处理函数的地址和储存的的地址不匹配的话不是绝对不执行,如果这个地址指向的是本程序加载模块以外的内容的话还是可以执行的。这时候,有一位大神发现了在windows2003下svchost.exe总是会将UNICODE.lns加载到0x001a0000处,而在偏移0x10b0b处是一条call dword ptr [EBP+30]指令,而EBP会在shellcode的附近,我么可以把异常处理函数地址覆盖成0x001b0b0b,然后就能够通过覆盖cookie触发异常,通过绕过异常处理函数检查跳转到我们的shellcode最终得到执行。不得不感叹,真是防不胜防。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值