发布于12月5日12月5日 使用Appveyor构建VS项目-快速编译 2023年7月23日马云惹不起马云 倾斜前言 在工作中,经常看到一些制作精良的C++开源项目,但作者并没有写CI/CD来构建项目并发布Release版本的二进制文件,所以需要自己手动编译,但有时是临时环境,需要安装Visual。用Studio等IDE构建比较麻烦,所以appveyor可以支持各种语言的构建环境。只需要在网页上发布二进制程序即可,解决了本地安装开发环境的痛点。Appveyor 简介 AppVeyor 是一家成立于2011 年的加拿大私营公司。我们为Windows 开发人员提供持续集成工具。该服务对于开源项目是免费的,我们为私人项目和客户站点的AppVeyor 企业安装提供订阅服务。 迄今为止,已有超过50,000 名开发人员使用AppVeyor,并且已经运行了超过1000 万次构建。 AppVeyor 受到Microsoft、Google、Facebook、Mozilla、Slack、GitHub 等公司的信任。 关于|应用程序载体 构建 Github 项目 AppVeyor 提供其独特的配置文件来声明构建操作。开发者可以通过编写AppVeyor配置文件来控制程序的发布过程。 这里仅讨论没有AppVeyor 配置文件的项目。以https://github.com/goldshtn/etrace 为例。 etrace 是一个命令行工具,用于实时跟踪ETW 事件并处理现有的.etl 记录文件。它的灵感来自于Microsoft ELT 工具。 该项目没有AppVeyor 配置文件。首先,将项目Fork到你自己的账户上,然后访问https://www.appveyor.com/,使用你的Github账户登录,并授权读取此仓库。 在Github一栏可以看到授权仓库。点击+ADD进入项目的构建配置界面: 由于本项目是用C#开发的,所以我们重点关注C#相关配置: 在Before build脚本中输入以下命令,在开始编译之前下载该项目所依赖的库: 努吉特恢复 “nuget Restore”是NuGet 命令行工具中的命令。它用于恢复项目依赖的所有NuGet包。在开发.NET应用程序时,经常使用NuGet来管理项目所依赖的第三方库和组件。 NuGet 是.NET 生态系统中最受欢迎的包管理器之一,它提供了一个中央存储库,开发人员可以从中获取各种包和库。 “nuget Restore”命令读取项目文件(.csproj 或.vbproj)中的依赖项,并下载或恢复所需的NuGet 包,以确保项目可以成功编译和构建。该命令经常在CI/CD(持续集成/持续交付)过程中使用,以确保在构建项目之前正确恢复并安装所有依赖项。 另外,还可以在环境配置中设置安装开发库的命令: 最后一步是设置用于打包的二进制文件。单击artifacts,配置打包路径。它必须是相对路径。 C#程序一般生成二进制文件到bin目录下,所以这里写:etrace\bin 保存后,返回项目页面,点击Start New Build开始构建: 等待一段时间就可以看到构建好的程序,直接下载使用即可。 使用 AppVeyor 构建 Mimikatz Mimikatz是gentilkiwi使用C语言开发的Windows安全工具。该工具功能丰富,可以从内存中提取明文密码、哈希值、PIN码和kerberos票据、哈希传输等。随着越来越多的黑客滥用这个工具来进行一些非法活动,因此gentilkiwi每次发布Release时,Release中的Mimikatz样本都会被标记为黑客工具,这给红队带来了一些小麻烦。通过AppVeyor,我们可以自动做一些静态特征处理,然后自动构建和生成新的工具。 gentilkiwi 在Mimikatz 项目中内置了一个AppVeyor 配置文件。当项目更改时,此配置文件将自动触发AppVeyor 构建过程。 我们要做的就是先Fork一份Mimikatz到我们自己的项目中,然后开始修改AppVeyor配置文件: 这里我只做了一项工作,就是将代码中的所有Mimikatz字符串替换为aabbcc。当然,我还可以做很多其他的替换操作。 ls; 复制项目C:\projects\mimikatz\mimikatz\mimikatz.ico C:\projects\mimikatz\mimikatz\aabbcc.ico; (Get-ChildItem -Path '.' -Recurse -File -Ininclude *.h、*.c、*.vcxproj、*.rc) | ForEach-对象{ $newFileName=$_.Name - 替换'mimikatz\.(h|c|rc)', 'aabbcc.`$1' $newPath=Join-Path -Path $_.Directory.FullName -ChildPath $newFileName (获取内容$_.FullName) | ForEach-对象{ $_ -替换'mimikatz', 'aabbcc' } |设置内容$newPath if ($newFileName -ne $_.Name) { 删除项目$_.FullName } 写入主机$newPath }; ls 米米卡兹; 替换图标的操作可以改为从网上下载某个地址的图标,这里不再赘述。 我的配置文件地址:mimikatz/appveyor.yml at master马云惹不起马云Rvn0xsy/mimikatz (github.com) 编译完成的成品如下: 🥪摘要 在线CI/CD 工具可以节省设置环境的时间。由于CI/CD 是事件触发的,因此每次更改都可以生成新样本,并且可以无限次使用。如果有些工具非常敏感,静态特性很多,你可以像我一样写一个类似的批处理,添加到CI/CD中,做一些简单的对抗处理。本文只是一个起点。我相信还有更省时间、更有效的方法。
创建帐户或登录后发表意见