因为最近在写cobaltstrike的execute-assembly内存加载的c#项目
用visual studio2022编译,最低net只能用6.0版本的,并且execute-assembly不支持
我想使用4.x版本进行编译,因为visual studio不支持,那么使用命令行进行编译
因为要用到MSBuild.exe,我直接选择低版本的
用x64或者另一个都可以,只要ConsoleApp2.csproj写上对应属性就好
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"><PropertyGroup><OutputType>Exe</OutputType><TargetFrameworkVersion>v4.8</TargetFrameworkVersion> <!-- .NET Framework 4.8 --><PlatformTarget>x64</PlatformTarget> <!-- 目标处理器架构设置为 x64 --><RootNamespace>ConsoleApp2</RootNamespace><AssemblyName>ConsoleApp2</AssemblyName><Configuration Condition=" '$(Configuration)' == '' ">Release</Configuration> <!-- 默认配置为 Release --><Platform Condition=" '$(Platform)' == '' ">x64</Platform> <!-- 默认平台为 x64 --><OutputPath>bin\$(Configuration)\</OutputPath> <!-- 输出路径 --></PropertyGroup><ItemGroup><Reference Include="System" /><!-- 添加其他引用 --></ItemGroup><ItemGroup><Compile Include="Program.cs" /><!-- 添加其他源文件 --></ItemGroup><Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>
我的项目代码为
using System;namespace HelloWorldApp
{class Program{static void Main(string[] args){string name;if (args.Length > 0){name = args[0];Console.WriteLine($"你好, {name}!");}else{Console.WriteLine("没有提供命令行参数。请输入您的名字:");} }}
}
但是编译会报错
说明字符串插值不能使用 , , ,是在 C# 6.0 引入的,而 .NET Framework 4.0 默认使用的 C# 编译器版本是 4.0,它不支持这些特性
所以需要改成+拼接参数,如下
using System;namespace ConsoleApp2
{class Program{static void Main(string[] args){// 检查是否传入了命令行参数if (args.Length > 0){// 如果传入了参数,使用第一个参数string name = args[0];Console.WriteLine("Hello, " + name + "!");}else{// 如果没有传入参数,使用默认值string defaultName = "world";Console.WriteLine("Hello, " + defaultName + "!");}}}
}
这样就可以成功生成了
在cobaltstrike中试试效果
可以看到成功达到效果,那么接下来看看完成一些功能
https://github.com/breakid/SharpUtils有一些功能,我来试试env的
可以看到成功显示出来env