跳转到帖子
  • 游客您好,欢迎来到黑客世界论坛!您可以在这里进行注册。

    赤队小组-代号1949(原CHT攻防小组)在这个瞬息万变的网络时代,我们保持初心,创造最好的社区来共同交流网络技术。您可以在论坛获取黑客攻防技巧与知识,您也可以加入我们的Telegram交流群 共同实时探讨交流。论坛禁止各种广告,请注册用户查看我们的使用与隐私策略,谢谢您的配合。小组成员可以获取论坛隐藏内容!

    TheHackerWorld官方

夏普根利用分析


轩辕三官

推荐的帖子

0x00 前言

夏普根是我认为特别棒的一个工具,它能够用来对其他。网程序集进行整合、重组并加密,二次编译后可生成一个全新的工具

本文将要研究夏普根的细节,介绍调用其他开源库的详细方法,分析利用思路

参考链接:

https://github.com/cobbr/SharpGen

https://cobbr.io/SharpGen.html

0x01 简介

本文将要介绍以下内容:网络核心开发环境搭建

功能介绍

调用其他开源库的方法

利用思路

0x02 .NET Core开发环境搭建

夏普根使用。网芯,优点是支持多平台(Linux,MacOS和Windows)

编程语言使用C#,利用罗斯林编译100 .净框架控制台应用程序或库

注:

罗斯林是一个。网编译器平台,通过脚本API,能够对脚本文件进行动态编译

测试系统:Win7x64

我在测试系统选择安装。网络核心2.2.0、ASP。网核心2 .2 .0和SDK 2.2.101,这是为了兼容另一个工具契约

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

https://点网。微软。com/download/thank-you/dot net-SDK-2。2 .101-windows-x64-安装程序

https://点网。微软。com/download/thank-you/dot net-runtime-2。2 .0-windows-x64-安装程序

https://点网。微软。com/download/thank-you/dot net-runtime-2。2 .0-windows-x64-ASP。NET-core-运行时-安装程序

安装Git for Windows,下载链接如下:

https://github。windows/Git/releases/download/v2。23 .0 .窗户。1/Git-2。23 .0-64位。可执行程序的扩展名

下载安装并编译夏普根:

饭桶克隆https://github.com/cobbr/SharpGen

激光唱片夏普根

点网构建-配置版本

0x03 基本功能介绍

夏普根默认集成了尖锐的声音,能够直接调用其中的功能

参数说明:

选项:

-?| -h | -救命显示帮助信息

-f | -文件要写入的输出文件。

-d | -点网| -点网-框架作为目标的点网框架版本(网络35或net40).

-o | -输出类型要使用的输出种类(控制台或dll).

-p | -平台要使用的平台(AnyCpy、x86或x64).

-n | -无优化不要使用源代码优化。

-a | -程序集名称要生成的程序集的名称。

-s | -源文件要编译的源代码。

-c | -类名要生成的类的名称。

-混淆混乱项目文件配置。

1.对单行代码进行编译

命令如下:

example.exe的控制台WriteLine(Mimikatz .登录密码());"

执行过程显示自动补齐的编译代码,如下图

2-1.png

值得注意的是其中的随机类名ohq8r7eQ1qK,每次生成文件时使用的类名均会改变

注:

如果想指定类名,可以加入-c参数,示例如下:

example.exe的控制台WriteLine(Mimikatz .登录密码());"

命令执行后生成示例。exe,示例。可执行程序的扩展名会调用米米卡茨的塞库尔萨:登录密码命令

2.对完整代码文件进行编译

example.txt的内容如下:

使用系统;

使用夏普勒斯波特.执行力;

使用夏普勒斯波特.全权证书;

班级计划

{

静态空干管()

{

控制台WriteLine(Mimikatz .登录密码());

返回;

}

}

命令如下:

点网bin/Release/netcoreapp2.1/sharp gen . dll-f example . exe-源文件example.txt

执行过程显示编译代码,如下图

2-2.png

由于指定了类名为程序,所以不再具有随机类名的功能

注:

夏普根使用了罗斯林进行动态编译,每次生成的文件混杂都会不一样

0x04 高级功能

1.缩小生成文件的体积

(1)取消对指定dll的引用

编辑文件清晰的gen/References/References。yml

此处的动态链接库通常为C#程序使用的引用文件

不需要的动态链接库名称属性由启用:真改为启用:假

(2)取消对指定dll的引用

编辑文件尖锐的性别/资源/资源。yml

此处的动态链接库为实现米米卡茨的功能

不需要的动态链接库名称属性由启用:真改为启用:假

注:

powerkatz_x64.dll为64位的米米卡茨

powerkatz_x64.dll.comp为使用系统10 . IO。压缩库压缩后的64位的米米卡茨

powerkatz_x86.dll为32位的米米卡茨

powerkatz_x86.dll.comp为使用系统10 . IO。压缩库压缩后的32位的米米卡茨

(3)使用ConfuserEx资源保护

混乱资源保护会对资源进行加密和LZMA压缩

示例命令如下:

点net bin/Release/netcoreapp2.1/sharp gen . dll-f example . exe-confusm。Cr '控制台WriteLine(Mimikatz .登录密码());"

2.调用其他开源库

参考资料中未介绍这部分内容,这里给出我的解决方法

这里给出两个示例,一个是开源的夏普米,另一个是我自己编写的模板夏普特斯

1.添加对SharpWMI的调用

(1)将夏普米源码复制到SharpGen/Source

(2)修改SharpGen/SharpGen.csproj

项目组标签中添加

否则在编译夏普根时会报错提示:

Source\SharpWMI\Program.cs(3,14):错误CS0234:命名空间“系统”中不存在类型或命名空间名称“管理”(是否缺少程序集引用?)

(3)修改夏普米的源代码

只保留Program.cs,删除其中的主要的函数并且将程序。铯中的每个静态方法改为公共方法

例如:

静态void LocalWMIQuery(string wmiQuery,string wmiNameSpace=' ')需要修改为public static void LocalWMIQuery(string wmiQuery,string wmiNameSpace=' ')

(4)重新编译夏普根

命令如下:

点网构建-配置版本

(5)调用测试

example.txt的功能为调用夏普米中的LocalWMIQuery方法查询win32 _计算机系统,内容如下:

夏普米程序。LocalWMIQuery(“select * from win32 _ ComputerSystem”);

控制台WriteLine(主机GetProcessList());

夏普根的命令如下:

点网bin/Release/netcoreapp2.1/sharp gen . dll-f example . exe-源文件example.txt

生成示例。前夫;前妻;前男友;前女友并执行,调用成功,如下图

2-3.png

2.添加自己编写的C#模板

命名为夏普特斯,功能为接收参数并在命令行输出

(1)新建文件夹夏普特斯,其中新建文件Program.cs,内容如下:

使用系统;

使用系统。集合。泛型;

使用系统。管理;

名称空间清晰度测试

{

班级计划

{

公共静态void TestMethod(字符串string1)

{

控制台WriteLine(字符串1);

}

}

}

(2)修改SharpGen/SharpGen.csproj

项目组标签中添加

(3)重新编译夏普根

命令如下:

点网构建-配置版本

(4)调用测试

example.txt的功能为调用夏普特斯中的测试方法方法,参数为123456,内容如下:

夏普特斯程序。测试方法(' 123456 ');

夏普根的命令如下:

点网bin/Release/netcoreapp2.1/sharp gen . dll-f example . exe-源文件example.txt

生成example.exe并执行,调用成功,如下图

2-4.png

为了便于测试,我已经叉了cobbr的夏普根,添加了对夏普米和夏普特斯的调用,地址如下:

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

3.资源保护

使用新版的混乱能够对编译后的文件资源进行保护,地址如下:

https://github.com/mkaring/ConfuserEx

旧版的混乱不再进行维护,地址如下:

https://github.com/yck1509/ConfuserEx

调用命令示例:

点net bin/Release/netcoreapp2.1/sharp gen . dll-f example . exe-confusm。Cr '控制台WriteLine(Mimikatz .登录密码());"

对应使用的配置文件为夏普gen/confush。铬

默认配置为对资源执行加密和LZMA压缩

混乱还支持其他保护功能:

反调试保护

防倾倒保护

反伊尔达斯姆保护

防篡改保护

常量保护

控制流保护

无效的元数据保护

名称保护

参考代理保护

资源保护

只需要去掉夏普gen/confush。铬中对应的注释即可

例如添加反调试功能,配置文件混淆。铬的内容如下:

4.补充:禁用优化

夏普根在编译期间会对源代码进行优化,可通过-无优化参数来禁用优化,这将导致增加生成文件的大小

0x05 利用分析

SharpGen可以作为重新打包的平台。Net程序集,并具有以下优点:

使用。NET核心平台和Roslyn来动态编译,开发代码时可以选择多种平台(Linux,MacOS,Windows)。

可以调用其他开源库自定义函数,最后打包成单个exe文件或dll文件。

使用ConfuserEx对资源进行加密和压缩,以避免被检测到签名。

生成的文件支持。Net3.5和。Net 4.0。

生成的文件支持x86和x64。

此外,使用SharpGen可以快速将POC转换为。Net程序集转换为EXP。

0x06 小结

介绍了SharpGen的功能,分享了我调用其他开源库的方法,分析了SharpGen的优势。

留下回复

链接帖子
意见的链接
分享到其他网站

黑客攻防讨论组

黑客攻防讨论组

    You don't have permission to chat.
    • 最近浏览   0位会员

      • 没有会员查看此页面。
    ×
    ×
    • 创建新的...