【技术分享】Antivirus Bypass(一)基于敏感函数

渗透技巧 2年前 (2021) admin
784 0 0
【技术分享】Antivirus Bypass(一)基于敏感函数

本篇文章是Bypass思路系列文章的第一篇,后续会持续更新有关Bypass的思路。因为工作原因,文章断断续续,时间线上会存在差异,思路及代码可行性仅供参考。若文章中存在说的不清楚或者错误的地方 欢迎师傅们指正 感激不尽!!!

 








前言
本文将从杀软监测敏感函数进行操作,以达到Bypass的效果。
测试编译器:VS全版本
测试Demo:Win32应用程序,MFC应用程序:
在测试Demo的时候,某些杀软会杀编译器,下面附上我测试Demo时的查杀效果:

Win32应用程序 MFC应用程序
VC++6.0 5/69 6/69
VS2008 0/68 0/69
VS2010 3/69 0/68
VS2012 1/69 2/69
VS2013 3/69 0/68
VS2015 1/68 1/68
VS2017 0/69 1/69
VS2019 1/68 1/69
VS2022 2/66 1/67

由此可以看到,尽管代码没有特征,但是某些杀软还是会报,最新的编译器也不例外,以此引入:杀软会查杀编译器的特性。

针对杀编译器特性,我们可以选用一些较为小众的语言或者杀软对语言较为友好(eg:Golang,nim)来达到Bypass的效果,或者选用较老的编译器(eg:VS2008)去达到Bypass的效果。

在这里,我们选用Win32应用程序,一是因为VT杀软较全面查杀的结果,二是可以直观验证代码被杀与否。

下面进入到我们本次的主题:基于敏感函数去实现Bypass。

 








一、窗口隐藏
BOOL ShowWindow(
HWND hWnd, int nCmdShow);
【技术分享】Antivirus Bypass(一)基于敏感函数

最简单的用法,SW_HIDE参数下是被杀的,利用虚拟键即可达到隐藏窗体的效果。

更多详情请参考:https://docs.microsoft.com/en-us/windows/win32/inputdev/virtual-key-codes

这里用到的编译器是VS2019,下面附上一段笔者测试的代码:

int main(){    HWND hWnd = GetForegroundWindow();//读取窗口信息    bool f = 0;    while (1) {        if (GetAsyncKeyState(VK_SPACE)) ShowWindow(hWnd, f), Sleep(100), f = !f;//VK_SPACE==点击空格显示窗体    }}
【技术分享】Antivirus Bypass(一)基于敏感函数

 








二、文件执行
UINT WinExec(
LPCSTR lpCmdLine, UINT uCmdShow);
【技术分享】Antivirus Bypass(一)基于敏感函数

该函数,换个编译器可实现Bypass,Pass的编译器是VS2019,Bypass的编译器是VS2017。

【技术分享】Antivirus Bypass(一)基于敏感函数

=========================================分割线===========================================================

HINSTANCE ShellExecute(  [in, optional] HWND   hwnd,  [in, optional] LPCSTR lpOperation,  [in]           LPCSTR lpFile,  [in, optional] LPCSTR lpParameters,  [in, optional] LPCSTR lpDirectory,  [in]           INT    nShowCmd);
【技术分享】Antivirus Bypass(一)基于敏感函数

最简单的用法,用法我就不过多描述。Bypass的编译器是VS2019,下面附上一段笔者测试的Bypass代码:

#include <windows.h>#include <stdio.h>int main(){    CONST char cmd[] = "calc.exe";    ShellExecute(0, "open", cmd, NULL, NULL, 1);}
【技术分享】Antivirus Bypass(一)基于敏感函数

=========================================分割线===========================================================

BOOL CreateProcess(  LPCWSTR pszImageName,  LPCWSTR pszCmdLine,  LPSECURITY_ATTRIBUTES psaProcess,  LPSECURITY_ATTRIBUTES psaThread,  BOOL fInheritHandles,  DWORD fdwCreate,  LPVOID pvEnvironment,  LPWSTR pszCurDir,  LPSTARTUPINFOW psiStartInfo,  LPPROCESS_INFORMATION pProcInfo);
【技术分享】Antivirus Bypass(一)基于敏感函数

下面附上一段笔者测试得Bypass代码,用到的编译器是VS2010MFC应用程序:

STARTUPINFO si;PROCESS_INFORMATION ZeroMemory(&si, sizeof(si));si.cb = sizeof(si);ZeroMemory(&pi, sizeof(piCreateProcess(    NULL    , "calc.exe"//替换要控制的新进程    , NULL    , NULL    , TRUE    , 0    , NULL    , NULL    , &si    , &pi
WaitForSingleObject(pi.hProcess, INFINITE);CloseHandle(pi.hProcess);CloseHandle(pi.hThread);
【技术分享】Antivirus Bypass(一)基于敏感函数

CreateProcess可完全控制新进程,在后续文章中将深入介绍CreateProcess函数,包括父进程欺骗、傀儡进程等相关知识。

执行由简到繁:Winexec ==> ShellExecute ==> CreateProcess

Winexec主要运行exe文件 ==> ShellExecute不仅可以运行exe文件还可运行已关联文件 ==> CreateProcess可完全控制新进程

 








总结

本文内容较为简单,主要是围绕常用的敏感函数来实现Bypass,其中运用到的小技巧可以结合实际场景将其融合,最后写出适合自己的的Loader。笔者后续将会继续分享Bypass思路,希望大家有兴趣的私我,共同进步。

【技术分享】Antivirus Bypass(一)基于敏感函数

- 结尾 -
精彩推荐
【技术分享】《Chrome V8源码》29.CallBuiltin()调用过程详解
gitlab未授权RCE(CVE-2021-22205)漏洞复现及深入利用
【技术分享】自删除技术详解
【技术分享】Antivirus Bypass(一)基于敏感函数
戳“阅读原文”查看更多内容

原文始发于微信公众号(安全客):【技术分享】Antivirus Bypass(一)基于敏感函数

版权声明:admin 发表于 2021年12月3日 上午10:00。
转载请注明:【技术分享】Antivirus Bypass(一)基于敏感函数 | CTF导航

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
暂无评论...