剥丝抽茧--揭秘一款U盘"注入"病毒

前言:
朋友告诉我,他发现了一个U盘注入病毒,可以在任何格式的文件中插入执行程序。随后他就发过来一个测试版,告诉我实现了在U盘文件中插入计算器程序,并表态随便分析,那我就不客气了。
 
 
一、行为分析
1.1 U盘中的原始文件
 
1.2 朋友发过来的USB.exeU盘注入程序
 
 
1.3 执行USB.exe,运行hello.txt 后,计算器程序果然被执行。
运行7452.jpg
 
运行沼泽地.rmvb
 
 
1.4 难道真的实现了任意格式的注入?当我仔细查看U盘中的文件,突然发现原来所有的文件都变成了屏幕保护程序,并且大小全部都是8.5KB。文件反而变小了,所以这里基本可以确定不是什么注入技术了。
 
 
1.5 首先第一个操作就是去掉查看文件夹选项的隐藏文件夹选项。
1.6 后缀名出现了,果然是屏幕保护的后缀名scr。
 
1.7 我们知道scr文件也是PE文件的一种
 
1.8 使用 Sysinternals的strings 工具,查找PE文件中存储的字符串
 
 
1.9 发现了一个U盘中的目录($LimeUSB)。为什么我去掉了隐藏文件文件夹选项却没有出现这三个文件夹。原来是忘记去掉“隐藏受保护的操作系统文件(推荐)”的选项,如下:
1.10 出现了一个隐藏的$LimeUSB
1.11 原来$LimeUSB目录被设置成系统文件夹属性,在$LimeUSB目录里面,发现了U盘原来的三个文件。还有二个执行程序,分别是Payload.exe和LimeUSB.exe.
1.12 运行Payload.exe,发现这个文件就是所谓被注入的计算器程序。
1.13 这里我根据后面的结论,按功能给这几个程序起个名字。
 
LimeUSB.exe  感染程序
7452.jpg.scr等  伪装病毒程序
hello.txt等       原始文件
Payload.exe     载荷程序
 
二、反编译分析
首先选择7452.jpg.scr 文件
 2.1 在IDA中运行,如下:
 
2.1 可知7452.jpg.scr 的主要功能就是先调用F:\$LimeUSB\7452.jpg 然后 调用F:\$LimeUSB\LimeUSB.exe 最后 调用F:\$LimeUSB\Payload.exe 
2.3  调用的文件分析
F:\$LimeUSB\7452.jpg是原始文件,调用的目的是为了正常显示图片。F:\$LimeUSB\Payload.exe  是载荷程序,调用的目的是为了运行载荷(本例子中时计算器)那么F:\$LimeUSB\LimeUSB.exe是什么程序呢?
2.4 PEID中打开LimeUSB.exe程序,发现是C#,并且是没有加壳,那代码基本就相当于裸奔了。
 
PEID中打开7452.jpg.scr,也是C#编写。
2.5 既然是C#编写,那就用dnSpy查看7452.jpg.scr,从下图中可知与用牛刀IDA分析的相同
 
2.6 接下来用dnSpy查看LimeUSB.exe ,如下图:
 
三 代码分析
我们来慢慢分析下各个函数的作用  
3.1、设置全局变量的类Settings,如下:
 
3.2 分析初始化函数Initialize
3.2.1 设置隐藏 选项函数 ExplorerOptions()
函数中主要更改了注册表Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced位置的Hidden和HideFileExt两个键值,达到隐藏系统目录功能的作用。如下图
 
3.2.2 寻找U盘盘符
 
 
3.2.3  U盘根目录中创建$LimeUSB目录,同时将目录设置为系统目录和隐藏属性。
 
 
3.2.4 $LimeUSB目录中,创建存放图标的$LimeIcons目录
3.2.5 将感染程序复制$LimeIcons目录.并命名为LimeUSB.exe
3.2.6 将载荷程序也就是计算器程序写入到$LimeIcons目录,并命名为Payload.exe
3.2.7 对U盘中包含的目录及其子目录,按目录的所属关系复制到$LimeIcons目录中
3.2.8  开始感染U盘文件
 
 
3.3、感染函数InfectFiles()
3.3.1 检查目录中的所有文件,是否是感染文件。
3.3.2 如果文件没有被感染,提取文件图标存储到$LimeIcons目录中
3.3.3 将原始文件移动到$LimeIcons目录中
3.3.4 在$LimeIcons目录中编译生成伪装病毒程序
 
3.4、编译生成伪装病毒程序函数CompileFile()
3.4.1 设置Resources.Source文件中的参数值
 
3.4.2  查看Resources.Source文件,果然这几个参数都有
3.4.3 设置载荷程序名字Payload.exe
3.4.4  设置伪装病毒程序名字与原始文件名字相同,如7452.jpg、hello.txt、沼泽地.rmvb
3.4.5 设置感染程序名为LimeUSB.exe
3.4.6 设置感染标识,这在CheckIfInfected()函数中可知是Settings类中的InfectedTrademark变量值
3.4.7 设置Resources.Source文件中的类名
3.4.8 生成一个唯一标识
3.4.9 引用System.dll文件
3.4.10 设置编译器的一些选项
3.4.11 设置伪装病毒程序的图标与原始文件图标相同
3.4.12 编译生成伪装病毒程序,并将伪装病毒程序的后缀名改为scr
 
 
四 U盘感染流程
4.1 感染前期准备
   
 
4.2 感染过程
4.3 编译生成伪装病毒程序
 
 
五 重做实验
5.1  U盘根目录存放文件夹1和7452.jpg文件夹
目的:当U盘中存在子目录时,是否前面的分析一致
5.2 文件夹1中存放hello.txt
5.3 感染后
 
5.4 U盘$LimeUSB目录
 
5.5  $LimeIcons目录
 
结论:通过观察,与前面的分析一致
 
六、总结
1、USB.exe病毒,没有加壳,容易被反编译。
2、代码中的函数名,变量没有进行混淆。
3、没有使用注入技术,仅使用了隐藏技巧。
4、整体思路值得借鉴。

猜你喜欢

转载自www.cnblogs.com/ready-gogo/p/12506199.html
今日推荐