吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 27807|回复: 65
收起左侧

[PC样本分析] xshell后门逆向分析过程

  [复制链接]
SnowMzn 发表于 2017-8-22 15:15
使用论坛附件上传样本压缩包时必须使用压缩密码保护,压缩密码:52pojie,否则会导致论坛被杀毒软件等误报,论坛有权随时删除相关附件和帖子!
病毒分析分区附件样本、网址谨慎下载点击,可能对计算机产生破坏,仅供安全人员在法律允许范围内研究,禁止非法用途!
禁止求非法渗透测试、非法网络攻击、获取隐私等违法内容,即使对方是非法内容,也应向警方求助!
近日,xshell远程终端工具被爆出存在后门,于是初学者的我就来逆向分析一波。。。。。不周之处望谅解。。。。。
这次的后门存在于nssock2.dll远程链接库中,版本号为5.0.0.26。这里,就主要分析一下这个文件。

首先,用IDA pro打开nssock2.dll文件,通过与正常版本的比较后发现,存在后门的nssock2.dll多了一个0x1000C6C0函数,我们跳转到0x1000C6C0处,查看伪代码。
1.png
可以看到,这段代码首先会调用VirtualAlloc申请一段内存,大小为0xFB48。
接下来是一段解密的代码,目的是将0x1000F718处的数据解密后存放在刚刚申请的内存区域中。
(我们称这段解密代码的函数为shellcode1,将解密出来的这段代码称为shellcode2。)
解密完成后,程序会跳向shellcode2并执行。
打开OllyDbg,加载样本文件中的nssock2.dll文件。我们用OD来看一下shellcode2解密后是什么样。
首先,使用OD的命令行,在0x1000C6C0处下断点使程序停在断点位置。接下来单步调试,运行程序到0x1000C751处
3.png
单步步入,进入这个函数。
4.png
进入这个函数后,可以看到,这里就是解密后的shellcode2。解密后的shellcode2仍然是被加密的,需要再次进行解密。
我们下断点到0x0109F6B9处(这里需要注意一下,由于这块区域的地址是由VirtualAlloc动态生成的,所以这里的地址是动态的,每次重新加载基地址都会变化,但是偏移不变。)
运行程序到这里(举例:这里的基地址为0x01090000,偏移为0xF6B9)
5.png
可以看到这里又调用了一个VirtualAlloc函数来分配空间,单步步过这个函数后,看eax的值,可以看到所分配空间的基地址为0x010A0000(这个基地址也是动态变化的,但是偏移不变)
之后,程序会再次进行解密,将解密后的数据放入0x010A0000处。仍然使用命令行下断点到0x0109F82E和0x0109F830处。程序停下之后,在反汇编窗口跳转到0x010A0000地址处 内容如下:
6.png
这样看,还是看不出什么,如果在这里0x010A0000处下断点,运行后会发现程序根本断不下来。经过研究后,发现这里会创建一个线程,创建线程的函数位于0x010A265B(偏移为0x265B)处,我么在这里下断点,使程序停在这里。
7.png
可以看到,这里调用了CreateThread函数,根据参数可知,新线程的起始地址0x010A1911(偏移为0x1911)。在新线程的起始处下断点,运行程序。
8.png
我们可以先把这部分内容dump下来,用IDA pro来进一步分析。
9.png
使用IDA pro加载dump下来的文件,可以看到,这里显示的都是偏移地址
10.png
然后跳转到sub_1911这里,创建函数后,查看伪代码。
11.png                                      12.png
首先调用了RegCreateKeyExA函数创建HKEY_LOCAL_MACHINESOFTWARE\****注册表项,后面的数字是随机生成的。
13.png
这里我们可以打开注册表看一下
13_1.png
显然,创建了一个注册表项-1986045015,但是里面没有键值。
随后会调用CoCreateGuid生成一个Guid值,这个值会在后面上报信息时用到。
13_2.png
这个值也是随机变化的。
接着会调用RegQueryValueExA函数判断此表项中是否存在Data键值,来决定后面的流程。
14.png
如果不存在,则会上报数据。
15.png
接下来,着重分析下sub_1457这个上报数据的函数。
首先会获取DNS,这里会通过DGA域名随机算法,每个月产生一个域名
16.png
这个是八月份的域名
17.png
随后会调用getNetWorkParam、getUserName获取计算机名和用户名,并与前面的Guid以及标志位rood拼接成上报数据。
18.png
19.png
当然这个上报数据,还需要进行两次加密。
首先进入sub_2399这个函数
20.png
会先调用sub_1CF8函数里的sub_1C3E这个函数对数据进行第一次加密。
21.png
随后,会通过sub_226B函数里的sub_201C函数对数据进行第二次加密。
22.png
我们启用OD,来到第三次执行sub_2399函数的地方,执行完第二次加密处理函数sub_226B后,可以从返回的堆栈空间中,看到加密后的上报数据
23.png
加密完之后,通过while循环,调用recvfrom函数来接收服务端下发的数据
24.png
这里当然是什么都接收不到的,我们只能使用强制跳转结束while循环。
在接收到服务端的数据后,会调用RegSetValueExA将接收的数据写入注册表中
25.png
26.png
同样,我们来查看一下注册表,刷新后果然新建了一个键值“Data”,写入的数据包括接下来要解密shellcode3的key1和key2。
27.png
之后,通过判断Data键值中的数据,来决定是否调用解密函数来解密shellcode3。
28.png
这里同样先调用VirtualAlloc分配一段空间,然后将解密后的shellcode3放入这段空间中,方式同shellcode1解密shellcode2一样。解密完成后,就会执行shellcode3。
由于我分析这个后门的时候,那个域名已经不通了,所以没有获取到key1和key2值,看了几个腾讯和360的分析文档,用那个key值也不好使,也就作罢。
这里简单说下shellcode3所做的功能吧,shellcode3会创建傀儡svchost.exe进程,注入后运行恶意代码。
总结:
虽然看了很多别人的分析文档,但是自己手动分析会学到很多,比如IDA pro静态分析从OD上dump下来的恶意代码、OD调试多线程等等。
建议看过这篇分析文档并热爱逆向的同学们也亲自动手来调试一番。。。。。。遇到问题、解决问题才是逆向分析的乐趣!!!!!!
如果遇到不懂的或者是调试过程中的问题或者是别的什么疑问,可以随时留言问我,大家一起探讨学习!!!!

免费评分

参与人数 27吾爱币 +34 热心值 +25 收起 理由
tp_soon + 1 + 1 我很赞同!
菜梗 + 1 + 1 谢谢@Thanks!
ducd + 1 + 1 感谢您对吾爱破解论坛的支持,吾爱破解论坛有你更精彩!
redyan9985 + 1 + 1 用心讨论,共获提升!
kuletco + 1 + 1 用心讨论,共获提升!
粉藍弟 + 1 + 1 用心讨论,共获提升!
duolouxi + 1 + 1 用心讨论,共获提升!
Halry + 1 用心讨论,共获提升!
Smi + 1 热心回复!
hunhun + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
whklhh + 1 + 1 谢谢@Thanks!
Nuposo + 1 + 1 谢谢@Thanks!
zhanghoudong + 1 + 1 我很赞同!
黑的思想 + 1 + 1 用心讨论,共获提升!
814047 + 1 + 1 用心讨论,共获提升!
music775775 + 1 + 1 用心讨论,共获提升!
SomnusXZY + 1 + 1 谢谢@Thanks!
NO_25 + 1 + 1 谢谢@Thanks!
13155283231 + 1 + 1 我很赞同!
雫Hao洋洋 + 1 + 1 热心回复!
miaomiaoweiwei + 1 + 1 厉害了!学习到了
铅笔刀 + 2 + 1 用心讨论,共获提升!
莫名堂 + 1 + 1 用心讨论,共获提升!
陌路无人 + 1 + 1 用心讨论,共获提升!
Hmily + 7 + 1 用心讨论,共获提升!
amoxuan + 1 + 1 热心回复!
yemoon + 1 + 1 mark 一下先

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

6767 发表于 2017-8-23 19:19
miaomiaoweiwei 发表于 2017-8-23 01:11
不过还是没太懂,就是一开始一些文章都说是通过DNS上报的服务器用户名密码等数据。你这里也提到了DNS那个什 ...

信息窃取是把信息编码在域名里,然后dns的时候就会向域名服务器请求,所以他把域名nx解析到一个自定义dns后就可以收了
 楼主| SnowMzn 发表于 2017-8-23 09:38
miaomiaoweiwei 发表于 2017-8-23 01:11
不过还是没太懂,就是一开始一些文章都说是通过DNS上报的服务器用户名密码等数据。你这里也提到了DNS那个什 ...

通过那四个DNS,加上本地的dns,上报给那个随机生成的域名。但是现在那个域名已经挂掉了,而且也没有ip,所以抓不到东西
宇宙小菜鸟 发表于 2017-8-22 15:32
小样丶站住 发表于 2017-8-22 15:57
赞  小白不懂
hori 发表于 2017-8-22 16:12
先膜拜了,小白确实不懂,只知道很厉害
twklzw 发表于 2017-8-22 16:33
高手,能给出加密码、解码算法吗?
wjh 发表于 2017-8-22 17:13
厉害了!!!!!!!!!!!!!!
一夜暴富 发表于 2017-8-22 17:22
学习学习,支持大神!
yesunqingyin 发表于 2017-8-22 17:23
这,啥意思?这是Xshell官方放的还是?
Hey_Mill 发表于 2017-8-22 18:04
看不懂。。。
xiaomi_007 发表于 2017-8-22 19:18
这是Xshell官方
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-23 00:32

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表