xiaoxiaoY520 发表于 2024-7-10 17:51

初次分析一个c#的jayy勒索病毒

本帖最后由 xiaoxiaoY520 于 2024-7-15 09:26 编辑

起因是逛论坛发现一个坛友的求助:https://www.52pojie.cn/thread-1905922-1-1.html,评论区看了一下没什么有用的信息。该贴下面有坛友评论上报了火绒论坛,我也跟去看了,截图如下,隐去了部分信息,要看自己搜索,嗯。。。一无所获,激起了我的兴趣,决定分析一下。
由于没学习过c#,其中很多加载运行机制不懂,只有dnspy反编译后看代码,分析有误还请坛友指出,反编译后文件有9M,后续有人需要看看的我就找个网盘补放出来,这边就不放了。

基本信息:
无保护,印象里无虚拟机检测(时间比较久了也可能忘了),dnspy可直接反编译。
其中代码涉及到线程管理、安全软件查杀、痕迹清理、文件处理、语言检测、时间检测等。


现象:
VM中运行十分钟,无文件被加密未复现成功,后面有给出猜测原因;宿主机硬盘无限被占用空间,磁盘已爆红,多出40G,检查发现是vm虚拟磁盘增长,确定是病毒行为,具体原因由于技术不行和时间不足未分析出。


部分代码分析:
主程序中有给出文件白名单,检查后缀、查杀的服务和一些主要的目录。首先检测了特定文件和系统语言(怀疑是这靓仔看不懂这些语言或是不好兼容)来判断是否触发病毒行为:然后是初始化线程队列(有普通线程和优先线程,也就是遍历文件和加密文件),关闭进程,主要是数据库和安全软件,关闭逻辑粗暴简单,未写异常处理。前置处理:cmd关闭指定服务(主要是数据库,防止备份恢复),关闭虚拟内存降低系统性能估计是干扰防护,毕竟防护需要占用不少性能;关闭防护删除还原点并禁止休眠(根据这些特征应该是很容易提前发现中毒),不清楚为什么放过anydesk,用anydesk给客户远程解密?不至于吧。
入侵结束后删除一些系统目录下的东西,一些注册表里的东西,主要是最近的记录,例如文件管理器中的最近打开文件记录,删除windows日志、远程桌面连接历史、然后创建任务(10秒后重启系统)并创建删除自身病毒文件的bat脚本执行,成功删除后连同bat文件一起删除,重启完应该就是系统嘎掉的样子了。上传大小有限,只贴部分图了。讲讲加密:
加密文件使用了chacha20对称加密算法,该加密算法需要一个密钥和一个IV向量,这个毒有意思的就是这两个量的来源,也许是一个恢复文件(可能性渺茫)和防御该毒的突破口。可能也是因为这个点导致我这边没有复现成功。构造这个有意思的文件又太麻烦,需要大量时间去调整,没有精力去搞了,有兴趣的可以去试试。下面说这俩个量的来源,看完就知道恢复真的渺茫。RSA的多个公钥和勒索信来源于encry_开头的文件信息中,那位老哥中少了这个文件(估计就是这个原因没法复现加密),因为会自动删除,自己构造太麻烦,字节偏移计算头疼:获取信息后这靓仔会反复覆盖这个文件10次后删除,因为这玩意是关键,有这玩意恢复难度大减。初始化chacha20,通过上面获得的公钥信息来计算获取加密文件用到的密钥和IV向量然后初始化chacha加密引擎并加密这两个关键信息;这个靓仔搞的还挺严谨,把内存中用过的数组变量都清除了,array5和array6实际就是加解密的关键东西,有这玩意文件就能解了,可惜全清了,返回的两个数据是加密后的,也就是后面要写到文件尾部的数据:随机字符串实际比较简陋,用到的字符集比较少:加密函数名字是AES加密,不知道是不是从其他代码框架中改过来的,加密过程是先写入元数据再加密?这怎么解密,没看明白。但是他并不是全文件加密,元数据写在尾部(当然元数据中密钥和IV也是被rsa加密后的),通过判断文件大小来选择加密多少,难道是以这个机制来免除元数据被加密?由此也可推断解密流程:从文件尾读取元数据,用靓仔提供的rsa私钥解密获得chacha20的密钥和IV向量,然后根据加密规则找到加密的文件块解密后覆盖,然后删除结尾元数据,也就恢复了。
应读取的文件块大小逻辑:整理出来大概是这样,没懂,嗐,仍需努力!!!值得一提的是我发现其中有部分代码没有被调用到,尤其是自动启动的代码,不知道是作者拷贝的冗余代码还是c#有什么独特的加载机制,望大佬指教补充。



















xiaoxiaoY520 发表于 2024-7-15 09:34

附件插到帖子最后了,样本就不传了,图里有md5值,微步可以搜到并下载样本,就不浪费cb了哈。

xiaoxiaoY520 发表于 2024-7-11 10:53

bcwr 发表于 2024-7-11 09:42
这个磁盘空间占用不知道是用的啥原理实现的,很少遇到勒索病毒有这种现象

这边补充一下,刚抽空去仔细观察了一下,发现了这个现象的原因,当时应该是看后面加密逻辑去了前面分析的给忘了没留意上。
先看现象:在开头初始化处理的时候是有格盘操作的,这个操作会产生巨大的临时文件,因为在开头,最先分析完后面疏忽了。代码是这样子:但是这让我更加疑惑了,在开始他就直接进行了格盘操作,那后面的加密文件是个虚设?骗钱实际根本恢复不了?还是说此处我分析有误,实际格式化的是剩余的空间?按理论来说实际格式化的也应当是格式化剩余空间的数据,防止只是删除了node连接的那些数据被恢复,但此处我看确实是获取的整个磁盘驱动的空间大小啊。。。懵了懵了

aisht 发表于 2024-7-11 07:07

本帖最后由 aisht 于 2024-7-11 08:03 编辑

很厉害, 好强. 没想到居然是一个不懂C#的人分析的....
膜拜
------------------------------------------------
最后一个问题我大概能回答一下, 启动部分有可能是类似dllMain那样的注入启动.
C# 是可以通过 assembly.load 去启动指定的 函数的.


------------------------------------------------
另外回复一下楼上的.
能被dnspy弄出源码的. 基本都还是依赖运行时.但net6后. 就可以编译自带运行时的 exe了.
然后现在的.net8 完全可以编译不需要 运行时的 exe来适应各个 操作系统.
可以说现在的C# 真不是7年前那个依赖.net fx才能运行的了C#了...

msmvc 发表于 2024-7-10 21:03

C#还能写病毒?没有framework不是废了

RemMai 发表于 2024-7-11 08:51

aisht 发表于 2024-7-11 07:07
很厉害, 好强. 没想到居然是一个不懂C#的人分析的....
膜拜
------------------------------------------ ...

他这里.net6 之后就是我们俗称的AOT编译。破译难度就提高了N个量级。

peng23371 发表于 2024-7-11 09:05

这应该是CTF夺旗大赛一道分析题,吧。病毒漏洞百出。但凡电脑有个杀毒软件,这脚本类病毒就运行不起来。

bcwr 发表于 2024-7-11 09:42

现象:
VM中运行十分钟,无文件被加密未复现成功,后面有给出猜测原因;宿主机硬盘无限被占用空间,磁盘已爆红,多出40G,检查发现是vm虚拟磁盘增长,确定是病毒行为,具体原因由于技术不行和时间不足未分析出。

这个磁盘空间占用不知道是用的啥原理实现的,很少遇到勒索病毒有这种现象

xiaoxiaoY520 发表于 2024-7-11 09:47

peng23371 发表于 2024-7-11 09:05
这应该是CTF夺旗大赛一道分析题,吧。病毒漏洞百出。但凡电脑有个杀毒软件,这脚本类病毒就运行不起来。

我也不清楚是不是ctf的题,我感觉这个样本有点奇怪,他缺少一个no_start的文件,一个encrypt_开头的文件,这两个文件的来源我在样本里没找到;也许他有前置的一个初始化的加载器吧,毕竟自启的代码没有调用到,如果真如上面大佬说的类似dll自动加载的,还真有可能前面有东西做初始化来得到这两个文件并干掉杀软之类的。那样的话前置初始化的程序已经做了各种操作,这边只做个简单的再次验证杀软之类的还真有可能,真实的毒我没看到这么搞的,我开头说了这是论坛上看到的一个样本,那个坛友提供的,提取样本不全也是有可能的。

jddgh3 发表于 2024-7-11 16:33

msmvc 发表于 2024-7-10 21:03
C#还能写病毒?没有framework不是废了

其他语言也可以,还是要看有些不坏好心的人怎么去用

aisht 发表于 2024-7-11 18:30

RemMai 发表于 2024-7-11 08:51
他这里.net6 之后就是我们俗称的AOT编译。破译难度就提高了N个量级。

其实aot编译后破解难度其实就跟c编译的差不多.
我个人觉得还不如C# 多流程混淆编译来的难度高...

不过aot后可以更好的加花加壳.vm.就跟其他exe没什么两样了.还不需要依赖jit.的确很棒.
页: [1] 2
查看完整版本: 初次分析一个c#的jayy勒索病毒