Shellcode编码技术

也就是我们在执行真正的costom_decoder之前将esp调整到nSEH之前,和costom_decoder本身之前,留下足够的opcode空间。因此,我们用0减去re_opcode,就可以得到opcode,为什么用减法而不是加法直接得到opecode呢,以eax为例,sub eax, xx指令是‘\x2d'合法的,而add eax, xx是”\x81\xC0“。为了更好的确定地址,我们将egg hunter放在payload的首,在nSEH处跳到调整edx的代码。所以egg hunter是可行的。
摘要由CSDN通过智能技术生成

0x01 为何编码

  • 字符集的差异
    • 应用程序应用平台的不同,可能的字符集会有差异,限制exploit的稳定性。
  • 绕过坏字符
    • 针对某个应用,可能对某些”坏字符“变形或者截断,破坏exploit。
  • 绕过安全防护检测
    • 有很多安全检测工具是根据漏洞相应的exploit脚本特征做的检测,所以变形exploit在一定程度上可以”免杀“。

0x02 如何编码

  • 简单的加解密
    • 用一段小巧的(以便可以在有限的字符集下实现)的代码加解密真正的shellcode。
  • alpha2/3编译器
    • 基于特定的reg为基地址,指向shellcode起始处,就可以生成特定字符集的编码shellcode,用途很广泛。
  • custom decoder
    • 一种用计算的方式产生可见字符形式的code,并压入栈上执行。

0x03 编码实现

  • ##### custom decoder

    • 以4bytes的代码为一个片段(DWORD),这是在32bits下,在64bits下可以以QWORD为一个片段。通过计算产生一个片段。如opcode

      push edx = x52
      pop eax = x58
      jmp edx  = xffxe2
    • 在内存中就是'\x52\x58\xff\xe2',DWORD表示就是0xe2ff5852。我们如果计算得到0xe2ff5852也就可以得到相应的opcode。

    • 计算原则,用到的计算数必须也是可见字符,最好只包含字母数字。

      • 数字范围0x30 - 0x39,字母范围0x41-0x5a, 0x61 - 0x7a
    • 计算方式

      • 先得到原始DWORD的相反数re_opcode。

        0 - 0xe2ff0000 = 0x1d010000,(有一个1溢出)
      • 因此,我们用0减去re_opcode,就可以得到opcode,为什么用减法而不是加法直接得到opecode呢,以eax为例,sub eax, xx指令是‘\x2d'合法的,而add eax, xx是”\x81\xC0“。

      • 那么目的就很明确了,我们需要用0减去几个和为re_opcode的数得到opcode,一般是3个比较容易以可见字符组合起来。

      • 以上re_opcode为例。

        0x1d010000 = 0x5F555555 + 0x5F555555 + 0x5e555556
      • 如何找到这样的组合呢
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值