快速生成钓鱼木马

项目地址:https://github.com/darkb1rd/DarkGld/

项目基于https://github.com/EddieIvan01/gld项目二次开发,仅用于交流学习,禁止用于非法活动。

为什么写这个项目?

  1. 在每年的大型多人运动中,钓鱼无疑是快速进入内网的一种手段。当我们批量发送同一个钓鱼木马时,目标上线时间不统一,一旦某个目标操作敏感,导致程序被标黑,其他目标很可能会同时掉线。所以就萌生了写个程序快速生成钓鱼木马,从而在钓鱼的时候发送 hash 不同的木马。
  2. 直接在 GitHub 上看到大佬的 GLd 项目,开源的项目,刚学习的 go,所以借助这个项目,练习了一下。

过程

DarkGld 原理非常简单,就是在 Gld 的基础上,将手动编译的过程实现了自动化,从而提高效率。主要过程如下:

  • 根据是否添加图标判断是否通过 rsrc -manifest main.exe.manifest -ico rc.ico -o rsrc.syso 生成资源文件
  • 根据是否捆绑文件,生成不同的加载器模版。此处如果加载文件,文件会被转换成 base64 字符串插入到加载器模版。加载器再运行的时候会将 base64 字符串重新解码写入到系统环境变量 temp 目录下,写完后自动打开。
  • 根据选择的目标系统架构,在编译的时候设置编译出 x64x86 的文件。
  • 判断是否需要 UAC 权限启动。如果选择 UAC,目标在点开文档的时候会弹出来 UAC 窗口,好处是回来的权限更大,缺点是现对而言更容易被察觉。不选择 UAC 的话,运行没有弹窗,相对而言更不易被察觉。两种模版都是从网上找的,程序中的模版如下:
    • 需要 UAC
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity
version="1.0.0.0"
processorArchitecture="x86"
name="controls"
type="win32"
></assemblyIdentity>
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
processorArchitecture="*"
publicKeyToken="6595b64144ccf1df"
language="*"
></assemblyIdentity>
</dependentAssembly>
</dependency>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
<security>
<requestedPrivileges>
<requestedExecutionLevel level="requireAdministrator"/>
</requestedPrivileges>
</security>
</trustInfo>
</assembly>
  • 不需要 UAC 的模版
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity
version="1.0.0.0"
processorArchitecture="x86"
name="controls"
type="win32"
></assemblyIdentity>
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
processorArchitecture="*"
publicKeyToken="6595b64144ccf1df"
language="*"
></assemblyIdentity>
</dependentAssembly>
</dependency>
</assembly>
  • 根据是否进行虚拟机探测,判断是否插入虚拟机探测代码。无论是否进行虚拟机探测,都不会影响文档的正常打开。

根据选项生成了模版后(由于 Gld 项目本身生成加载器的过程中每次使用的加密 key 都不同,所以相同命令生成的加载器也是不同的),通过使用 go 执行编译命令,编译出最终的加载器。

go 编译命令解释如下:

err = exec.Command("go", "build", "-o", ".\\" + OUTFILE , "-ldflags", "-w -s -H=windowsgui", "-gcflags", "-trimpath=$GOPATH/src", "-asmflags", "-trimpath=$GOPATH/src", ".\\" + dir ).Run()

//-o .\filename.exe : 输出为指定文件
//-ldflags="-w -s -H=windowsgui" : 减小程序体积且编译为Windows窗口程序(双击运行不弹窗)
//-gcflags="-trimpath=$GOPATH/src" -asmflags="-trimpath=$GOPATH/src" : 编译时去除路径信息,如果编译时电脑的用户名是自己常用的ID,未去除路径信息可能会导致被通过路径信息进行定位。
//更详细的参数解释建议百度

编译完成后,会自动删除 temp 目录。

演示

以上即为 DarkGld 项目实现的逻辑,内置模版可能不免杀了,可根据内容自行调整。本文若有错误之处,敬请指出,以免误导他人。