【病毒分析学习】Beta bot样本分析 Part.1 解密部分
本帖最后由 LShang 于 2013-12-14 18:51 编辑基本信息
报告名称:Beta bot样本分析 Part.1
作者:lSHANG
报告更新日期:2013/12/1
样本发现日期:2013/11/23
样本类型:Bot
样本文件大小/被感染文件变化长度:188416 bytes
样本文件MD5 校验值:B15DED00C6C54A5549CF99808D53DB33
样本文件SHA1 校验值:C812A19475910BE0FCBE829CACCA251C6AB1F56F
壳信息:N/A
可能受到威胁的系统:Intel 386 or later processors and compatibleprocessors
相关漏洞:N/A
已知检测名称:N/A
简介
该样本为Bot类木马,样本运行后将进行潜伏、注入其他进程以及接受远程控制等。本文只关注其解密部分。
被感染系统及网络症状
暂不关注
文件系统变化
暂不关注
注册表变化
暂不关注
网络症状
暂不关注
详细分析/功能介绍
本文只对样本解密部分进行分析,没有什么新内容,权当一次记录及给我一样的新人一些启示,其中错误之处还望诸位多多指正。
首先查壳可知该样本未加壳且为VB语言编写,尝试使用工具反编译失败。而后直接使用IDA进行分析,发现VB只不过是个幌子,不过这是后话,此处不表。
通过IDA载入后找到入口点,发现代码如下图
前边有一些初始化及掩人耳目的代码,比如调用一个计算汇率的库函数,当然这些无用的地方这里就不再赘述。
向下看发现VB部分的核心代码如下图
主要逻辑就是将已硬编码到程序中的代码写入到数据段预留的空间,然后通过WriteProcessMemory函数用预定义的代码覆盖掉原来函数的代码,以此执行恶意代码功能。
copy_code不表,write_process_memory函数实现如下图
该函数通过调用一个VB函数DLLFunctionCall来实现获取函数地址。
被覆盖后的代码如下图
前边是一些调试器、沙盘检测,之后代码整理后如下图
可以看出该样本利用call指令会自动将返回地址入栈的特点来进行传参,这样的流程分析起来也很简单,一路跟踪跳转就可以了。
之后申请内存之类不表,向下跟踪可以发现如下图代码:
上边部分代码通过TEB获取PEB地址,然后获取PEB.ImageBaseAddress的值,即程序的加载基址,此时eax指向了样本加载的基址,edi则是之前申请的内存的地址。
之后代码在样本中寻找标志数据4D42h,校验其向后偏移0Eh字节的数据是否为28h。获取标志数据地址再向后偏移40h字节,获取解密密钥。通过代码可以看出密钥的结束标志是标志数据向后偏移36h字节的DWORD数据。
通过已知这些信息我们可以通过编辑工具在文件中找到对应数据如下图
解密密钥之后的蓝色数据部分则为被加密的数据,解密代码如下图
通过代码可知,样本通过使用MMX寄存器利用密钥对加密数据循环异或解密。待这里执行完毕,我们可以抓取到一个PE文件,这里我们先继续跟随此处代码。
获取TerminateProcess函数用来退出不表,向下可以看到如下代码
这里获取了样本的命令行参数,以及对调用sheep_function时的参数进行判断,如果为0则会以自身为对象创建傀儡进程,如果为1则会获取默认浏览器路径,并以其为对象创建傀儡进程。
获取默认浏览器路径是通过注册表获取,使用到了” \http\shell\open\command\”这个键,不对其赘述。
创建傀儡进程后,向下可看到如下代码
首先强卸了傀儡进程的文件模块,然后在该地址重新分配了一块内存区域。继续向下
毫无悬念,接下来将已解密的PE文件写入到了刚刚分配的内存区域中,此两步偷梁换柱完成了对傀儡进程内模块内容的替换。
因为之前的替换,这里需要对主线程状态进行修复,之后恢复线程执行判断退出不表。
话分两头,前文说到解密代码执行完毕后我们抓取到一个PE文件,之后的代码都是在为该文件的执行做准备,我们直接对该文件进行分析。
首先迎来的仍是一个经典的调试器检测不再赘述,检测后该文件获取标记串E6 9C 18 EE C8 8A 25 1D 00 02 AB 7F 10 00 05 FF在内存中的地址
获取标记串地址后,再次进行数据解密。这里进行了两次解密,首先在原文件内进行一次异或解密,此时解密出的数据仍是被加密的。之后申请一块内存,然后再次进行算法解密,申请内存块中的数据即最终运行的恶意代码样本。
解密部分涉及到的数据在文件中表现如下图
解密部分代码如下图
如果第二次解密成功,样本将会擦除掉在自身异或解密出的数据,并对内存块中的数据进行校验
之后样本在存放解密数据的内存块中寻找标记串26 01 11 8A F8 82 9B 1C 37 D2 AA D8 9B 4D 64 B9 CC C1,然后用自身数据覆盖标记地址处数据,源数据地址为硬编码写入,长度为126h字节
最后,样本重新申请一块内存,将存放解密数据的内存块内容复制过去后擦除该内存块内容不表,完成上述操作,样本对内存中代码进行重定位,并修正PEB结构中的BASEADDRESS后运行恶意代码。
通过重定位表进行重定位代码如下图
修正PEB结构中的BASEADDRESS代码如下图
至此,该样本解密部分完毕。至于最终执行的恶意代码是为何物,该Bot有何与众不同,且听下回分解。
预防及修复措施
在计算机上安装安全软件。
及时更新安全软件及病毒库。
技术热点及总结
该样本解密部分使用了两种不同方式先后两次在内存中解密恶意文件并加载运行,其过程中恶意文件不会在磁盘中留下痕迹,隐蔽性相对更强,但使用傀儡进程的方式及进程间通信的手段通常很难躲避主流安全软件的主动防御模块。
请问为啥我用IDA载入后,只看到一个call ThunRTMain
然后后面都是乱码?楼主做了什么处理吗?
不太懂这个,希望楼主解答一下,谢谢~ 很牛擦表示看不懂但是支持下 拜膜大牛 留个脚印 {:1_931:} 哇哇哇哇 大牛啊 完全看不懂的说汇编都忘的差不多了 期待Part.2,先微博传播一下。 请问这是什么软件,界面这么酷 谢谢,下载个样本看看
学习了辛苦了额 很牛擦膜拜大牛~~{:301_1010:}
页:
[1]
2