1 前言
2 效果图
3 前置知识
4 免杀实验
5 实验结论
01
02
03
-
文件路径:使用某个固定的文件路径作为key。例如,使用"C:WindowsSystem32kernel32.dll"的最后一个字符作为key。 -
注册表键值:使用注册表中某个固定的键值作为key。例如,使用"HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows NTCurrentVersionProductName"的值的前三个字符作为key。注意,读取键值并不会被杀软拦截。 -
硬件信息:使用硬件信息作为key。 -
系统信息:使用系统信息作为key。例如,使用Windows版本号的最后一个数字作为key。 -
时间戳:使用当前时间戳作为key,例如使用Unix时间戳或Windows FILETIME格式的时间戳。 -
系统环境变量:使用系统环境变量作为key,例如使用%USERNAME%的前三个字符作为key。 -
硬件ID:使用硬件ID作为key,例如使用主板序列号的最后两个字符作为key。 -
进程ID:使用当前进程的进程ID作为key。 -
网络信息:使用网络信息作为key,例如使用本地IP地址的最后一个数字作为key。 -
文件内容:使用某个文件的内容作为key,例如使用某个固定的文件的MD5或SHA256散列作为key。 -
进程信息:使用当前进程的一些信息作为key,例如使用进程名的第一个字符和PID的最后一个字符。 -
用户信息:使用当前用户的一些信息作为key,例如使用用户名的前两个字符和SID的最后一个字符。 -
系统时间:使用当前系统时间作为key,例如使用系统时间的分钟数和秒数。 -
CPU信息:使用CPU信息作为key,例如使用CPU序列号的最后几个字符。 -
Windows API函数:使用Windows API函数返回值的一部分作为key,例如使用GetTickCount()的低16位作为key。 -
系统驱动程序:使用系统驱动程序作为key,例如使用某个已安装的驱动程序的文件名的第一个字符和版本号的最后一个字符。 -
系统路径:使用系统路径作为key,例如使用%SYSTEMROOT%的最后一个字符作为key。 -
系统语言:使用系统语言作为key,例如使用系统语言的代码页编号作为key。 -
系统内存信息:使用系统内存信息作为key,例如使用物理内存大小的最后一个字节作为key。
04
-
用GetModuleHandleA获取kernel32.dll的路径,取最后一个字符“L”当作key:
using namespace std;
int main()
{
HMODULE hModule = GetModuleHandleA("kernel32.dll");
if (hModule == NULL)
{
cout << "GetModuleHandle failed." << endl;
return -1;
}
char szPath[MAX_PATH];
DWORD dwSize = GetModuleFileNameA(hModule, szPath, MAX_PATH);
if (dwSize == 0)
{
cout << "GetModuleFileName failed." << endl;
return -1;
}
cout << "The path of kernel32.dll is: " << szPath << endl;
return 0;
}
-
通过注册表读取操作系统版本,取第一个个字符“W”为key:
#include <windows.h>
#include <iostream>
using namespace std;
int main()
{
HKEY hKey = NULL;
DWORD dwType = REG_SZ;
char szValue[MAX_PATH] = { 0 };
DWORD dwSize = sizeof(szValue);
LONG lRet = RegOpenKeyExA(HKEY_LOCAL_MACHINE, "SOFTWARE\Microsoft\Windows NT\CurrentVersion", 0, KEY_READ, &hKey);
if (lRet != ERROR_SUCCESS)
{
cout << "RegOpenKeyEx failed." << endl;
return -1;
}
lRet = RegQueryValueExA(hKey, "ProductName", NULL, &dwType, (LPBYTE)szValue, &dwSize);
if (lRet != ERROR_SUCCESS)
{
cout << "RegQueryValueEx failed." << endl;
RegCloseKey(hKey);
return -1;
}
cout << "The value of ProductName is: " << szValue << endl;
RegCloseKey(hKey);
return 0;
}
过360火绒静态加动态,defender静态,卡巴直接不过。
-
获取网卡名的第一个字符“{”作为key:
using namespace std;
int main()
{
PIP_ADAPTER_INFO pAdapterInfo = NULL;
ULONG ulSize = 0;
DWORD dwRet = GetAdaptersInfo(pAdapterInfo, &ulSize);
if (dwRet == ERROR_BUFFER_OVERFLOW)
{
pAdapterInfo = (PIP_ADAPTER_INFO)malloc(ulSize);
dwRet = GetAdaptersInfo(pAdapterInfo, &ulSize);
}
if (dwRet == ERROR_SUCCESS)
{
PIP_ADAPTER_INFO pAdapter = pAdapterInfo;
while (pAdapter)
{
cout << "Adapter name: " << pAdapter->AdapterName << endl;
cout << "MAC address: ";
for (int i = 0; i < pAdapter->AddressLength; i++)
{
printf("%02X", pAdapter->Address[i]);
if (i < pAdapter->AddressLength - 1)
{
printf("-");
}
}
cout << endl;
pAdapter = pAdapter->Next;
}
}
else
{
cout << "GetAdaptersInfo failed." << endl;
}
if (pAdapterInfo)
{
free(pAdapterInfo);
}
return 0;
}
-
取时间截的第一位数字1为key:
#define _CRT_SECURE_NO_WARNINGS
#include <time.h>
#include <iostream>
using namespace std;
int main()
{
time_t now = time(NULL);
cout << "Current time: " << now / 1000000000 << endl;
return 0;
}
过360火绒静态加动态,defender静态,卡巴直接不过。
-
通过环境变量%USERNAME%,取第一位字符“A”为key:
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <cstdlib>
using namespace std;
int main()
{
char* username = getenv("USERNAME");
if (username != NULL)
cout << "USERNAME is: " << username << endl;
else
cout << "USERNAME is not defined" << endl;
return 0;
}
过360火绒静态加动态,defender静态,卡巴静态加动态。
-
通过硬件ID
代码太长,这里不放了。
defender静态,卡巴一直卡死在99。
defender静态,卡巴不过。
-
使用线程ID,转为hash,由于hash第一位总为1,可以当作密钥:
defender静态,卡巴不过。
实践过程中,我逐渐意识到问题,可能并不是卡巴查杀很厉害,而是编译器的问题。在测试过程中,卡巴查杀经常卡在1%或99%,等很长时间,重复试了几次,最后卡巴直接删除了exe:
卡巴可能并没有检测出shellcode,而是基于一种风险指数,虽然没有检测出shellcode,但风险指数偏高,于是直接列为恶意软件直接删除了。这种风险指数与编译器有关。vs默认的编译器更容易被杀软认为恶意软件,vs默认的编译器几乎被所有杀软标记重点了。后面切换vs的intel C++编译器(需要自行安装),重新对前面的几个环境点进行了测试,切换intel C++编译器后均过卡巴静态加动态且扫描很快,没有出现像vs默认的编译器一直卡住的情况:
然后上传了VT测试,静态全过:
不使用动态生成key,明文密钥,使用intel c++编译,VT:
05
06
付费圈子
如果看到这里的师傅的你偏新人向
目前仅需70RMB一年,满1000人涨到99一年(目前进度659/1000)
价格只会越来越高
07
兄弟反映需要封面图?
后台回复文章推送日期加”封面“即可获取
(2022年十月五日前的文章没有)
例如今天为:20230315封面
08
(封号十天补发一下)Acunetix-v15.4_windows&linux破解版
漏扫工具Invicti-Professional-v23-1破解
fortify_sca_22.2-Windows-linux破解版
CS4.7汉化+修改指纹+加密流量+最新ladon9.2.5教程内附成品
windows10渗透虚拟机更新!帮助渗透新手快速搭建工作环境,工欲善其事,必先利其器。
AppScan_Standard_10.1.0中文永久破解版
github-cve-monitor——一款cve、大佬仓库、工具监控工具(文末成品直接使用)
08
本工具仅面向合法授权的企业安全建设行为,如您需要测试本工具的可用性,请自行搭建靶机环境。
为避免被恶意使用,本项目所有收录的poc均为漏洞的理论判断,不存在漏洞利用过程,不会对目标发起真实攻击和漏洞利用。
在使用本工具进行检测时,您应确保该行为符合当地的法律法规,并且已经取得了足够的授权。请勿对非授权目标进行扫描。
如您在使用本工具的过程中存在任何非法行为,您需自行承担相应后果,我们将不承担任何法律及连带责任。
本工具来源于网络,请在24小时内删除,请勿用于商业行为,自行查验是否具有后门,切勿相信软件内的广告!
在安装并使用本工具前,请您务必审慎阅读、充分理解各条款内容,限制、免责条款或者其他涉及您重大权益的条款可能会以加粗、加下划线等形式提示您重点注意。除非您已充分阅读、完全理解并接受本协议所有条款,否则,请您不要安装并使用本工具。您的使用行为或者您以其他任何明示或者默示方式表示接受本协议的,即视为您已阅读并同意本协议的约束。
原文始发于微信公众号(棉花糖网络安全圈):免杀系列第三篇——动态生成key免杀
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论