本帖最后由 FoodieOnTheWay 于 2016-5-15 17:31 编辑
前言 最近,各种获取CC服务器的奇技淫巧是越来越多了,有利用博客内容的,利用博客标题的,利用QQ签名和QQ昵称的也出现了不少(360不厚道,我想看看那种木马,结果发现他只给MD5不给文件,而且这文件我找了很多人都没找到,就放弃了),不过遗憾的是最近一直没遇到利用QQ签名或者昵称来获取的。不过,利用CSDN博客来发布的倒是有一个,限于篇幅,那就在此略花点笔墨写一下它CC服务器的获取方式和解密算法。
基本信息 文件大小:379975 字节 MD5 :3CA317CC9FA45F1C61E73544DDE88648
SaberInfor
这个文件是被一个母文件释放出来的,看起来似乎是没有加壳的,这是一个好消息,稍后可以直接用IDA看看。
样本行为 - 网络行为
- 访问 http://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=0&rsv_idx=1&tn=baidu&wd=ip138
- 访问 http://blog.csdn.net//dasdmkdwovcs//article//details//50925619
- 备用访问地址 http://blog.csdn.net//asdasdasdasddadasd//article//details//50443203
- 备用访问地址 http://blog.csdn.net//u013761036/article/details/45542243
- 备用访问地址 http://blog.csdn.net//saber00003//article//details//50444185
- 备用访问地址 http://blog.csdn.net//saber00004//article//details//50444188
- C&C IP/Port:118.123.19.9 / 25965
- C&C IP/Port(备用):123.249.81.202 / 25985
- C&C IP/Port(备用):123.249.7.226 / 25982
- 创建服务
- 在服务相关注册表下创建键值如下键值,作为服务启动。
svc
- 文件
- 检查自身是否在 C:\Program Files\Windows Exlogon\winlogonw.exe, 如果不是,则将自身放置到此路径下。
IDA查看 分析的两大神器,之首就是IDA,俗话说,IDA看流程,OD看数据,先用IDA看看,然后配合着再分析,肯定是没错的。 感谢作者,思路比较清晰,所以大概看了一下API和字符串,连F5带猜,基本上分析了一个大概。 以下就是这些关键点(非关键的就不写出来了): 第一,把文件放入某位置,然后通过CreateService设置启动项;
ida_svc
第二,ThreadCode,也就是真正的Payload部分; 从代码来看,所有木马的功能都有了,可以下载,执行以及一些文件操作,也可能还包括一些其他附加功能,有兴趣的可以深入研究一下; 我尝试着连接服务器的这个端口,但是得不到任何信息(error-cdnzz-com.cdnzz.net:25982,Domain Unavailable),所以就没花时间在上面调戏,等有时间了可以再调戏调戏
core
第三,获取CC服务器这部分,是我最关注的部分; 有了这部分,我就能把作者所有以这种方式加密的CC服务器拿到,这部分貌似其实不算复杂,经过后来在OD里跟踪,发现确实如此。
getip
OD调试 首先根据经验,先跑一遍,做下行为记录,看到它是把自身拷贝到了前文所写的路径下了。 那么就直接在新路径开始调试了。(之前遇到不少样本,如果不是在特定目录下,就没有任何行为,因此,在样本指定的目录下运行,不失为一个好习惯)
然后根据IDA得到的信息开始猛下断点。 我这里主要下的几个断点分别是是InternetCrackUrlW/InternetReadFile/WinExec/CreateThread/CreateProcessW/CreateServiceW/RegSetValueExW/recv/connect/send等
接下来就是F9(注意,我在Win7上跑的,自动分配的基址是0xDE0000),给它自由,让它飞。
关键点1: 创建服务。
od——svc
还有一些其他的注册表,相对来讲,这些就重要性要低一点。
type
uid
version
关键点2: 连接百度 http://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=0&rsv_idx=1&tn=baidu&wd=ip138 这个的目的动动脚趾头也能猜得到,肯定是拿IP地址啊。 套路是,载入网页,然后根据里面的特征字符,定位IP地址,然后把地址保存起来。
baidu
关键点3: 连接CSDN博客,获取加密的IP和端口信息。 先连接如下地址。
csdn
然后解析出地址。
ip
关键点4: 收集用户信息(语言/国家,系统版本,当前IP,硬盘信息等),并发送出去。接下来进入老套路,不断的循环,不断的试图拿到指令并做点什么。
userinfor
解密分析 IP的解密加密是我今天要说的重点,其实常见的病毒加密算法并不多,今天遇到的这个不复杂,我今天就打算试着逆一下它的解密算法,然后写个针对这种的小脚本。 IDA F5代码 [C++] 纯文本查看 复制代码 _BYTE *__stdcall sub_DE8DD0(int strRaw, signed int nLength)
{
size_t v2; // esi@1
signed int v3; // edi@1
int v4; // ebx@1
_BYTE *v5; // eax@11
_BYTE *v6; // eax@12
int v7; // ecx@12
signed int v8; // edi@13
int v9; // esi@13
char v10; // al@15
signed int v11; // esi@16
int v12; // edx@16
signed int v13; // ecx@16
signed int v14; // eax@18
_BYTE *v16; // [sp+Ch] [bp-Ch]@11
_BYTE *v17; // [sp+14h] [bp-4h]@12
int nLengtha; // [sp+24h] [bp+Ch]@12
v2 = 3 * (nLength / 4);
v3 = 0;
v4 = 0;
if ( *(_BYTE *)(strRaw + nLength - 1) == '=' )
v3 = 1;
if ( *(_BYTE *)(strRaw + nLength - 2) == '=' )
++v3;
if ( *(_BYTE *)(strRaw + nLength - 3) == '=' )
++v3;
switch ( v3 )
{
case 0:
case 1:
v2 += 4;
break;
case 2:
v2 += 3;
break;
case 3:
v2 += 2;
break;
default:
break;
}
v5 = malloc(v2);
v16 = v5;
if ( !v5 )
{
sub_DFA36A("No enough memory.\n");
exit(0);
}
memset(v5, 0, v2);
v6 = v16;
v7 = nLength - v3;
v17 = v16;
nLengtha = v7;
if ( v7 > 0 )
{
do
{
v8 = 0;
v9 = 0;
do
{
if ( v4 >= v7 )
break;
v10 = (unsigned int)strrchr(&byte_E23A60, *(_BYTE *)(v4 + strRaw));
v7 = nLengtha;
++v8;
v9 = (char)(v10 - (unsigned int)&byte_E23A60) | (v9 << 6);
++v4;
}
while ( v8 < 4 );
v6 = v17;
v11 = v9 << 6 * (4 - v8);
v12 = 0;
v13 = 16;
do
{
if ( v12 == v8 )
break;
v14 = v11 >> v13;
v13 -= 8;
++v12;
*v17 = v14;
v6 = v17++ + 1;
}
while ( v13 > -8 );
v7 = nLengtha;
}
while ( v4 < nLengtha );
}
*v6 = 0;
return v16;
}
Python代码如下: [Python] 纯文本查看 复制代码 strTable = 'ABCDEFGHIJK+abcdefghijk/0123456789lmnopqrstuvwxyzLMNOPQRSTUVWXYZ'
# The string need to decrypt.
strRaw = 'IQ5y5GXp2kTn4QXm2QjO4R1mjNEMaMSMbDnxcDExamAMjNIPch8PIz'
counter = 0
destQty = 1
if strRaw[-1] == '=':
counter = 1
if strRaw[-2] == '=':
counter = counter + 1
if strRaw[-3] == '=':
counter = counter + 1
destQty = 3*(len(strRaw)/4) + (5 - counter)
print 'The decrypt table:\r\n' + strTable
print 'The string need to decrypt:\r\n' + strRaw
print 'strRaw length is: ' + str(len(strRaw))
print 'strRaw without \'=\' length is: ' + str(len(strRaw)-counter)
print 'Destination string length is: ' + str(destQty)
newlen = 0
if len(strRaw)%4 == 0:
newlen = len(strRaw)
else:
newlen = (len(strRaw)/4+1)*4
for i in range(newlen - len(strRaw)):
strRaw = strRaw + chr(0)
# strRaw[len(strRaw) +i] = 0
temp = 0
strTemp = ''
for i in range(newlen):
found = 0
for j in range(len(strTable)):
if strRaw[i] == strTable[j]:
found = 1
temp = temp *2*2*2*2*2*2 #shl esi,6
temp = temp | j
elif (j == len(strTable) - 1) and (found ==0):
#print 'I an runing'
temp = temp *2*2*2*2*2*2 #shl esi,6
temp = temp | 0
if (i+1)%4 == 0:
#print temp
#print 'temp/0x10000 = '+ str(temp/0x10000)
strTemp = strTemp + chr(temp/0x10000)
strTemp = strTemp + chr(temp%0x10000/0x100)
strTemp = strTemp + chr(temp%0x100)
temp = 0
print strTemp
写完后,我顿时醒悟过来,这不就是变形版的Base64么,不过网上基本上都默认以如下图中的编码表解码。但是这里用的就是变形版的,在线解密就不太好使,所以这个脚本以后说不定还是大有可为的。 记得最近52Pojie的比赛上就有跟这个相关的题目,我这个如果写的早点,可能会给不少人启发呢,哈哈!
base64表
源文档 <http://www1.tc711.com/tool/BASE64.htm>
综合分析 首先根据收集到的博客文章特点(包含saber/start等特殊字符),立即对CSDN全站文章进行搜索,但是尝试了很多组合也并没有找到更多包含的文章。 推测作者可能在其他发布方式上会有布局,因此我就只好告知朋友,协助收集这几个IP的数据信息了。 那么就仅仅根据程序中找到的博客文章地址,对相关数据简单分析一下了。 网址 | 加密内容 | 解密后的内容 | 访问量 | 标题 | 创建时间 | http://blog.csdn.net/asdasdasdasddadasd/article/details/50443203 | 1QXO3Q1s3pfN3Qbu1/fN5pb/ahES+mEMaMSLcgSTjNIPch0PIz | 118.123.19.9/25965 | 1721334 | mark | 2015-12-31 18:12 | http://blog.csdn.net//dasdmkdwovcs//article//details//50925619 | 1QXO3Q1s3pfN3Qbu1/fN5pb/ahIN+mIOcgSR+mIMbo4MbhnSala | 123.249.7.226/25982 | 3878947 | asdasd | 2016-03-18 18:02 | http://blog.csdn.net//saber00003//article//details//50444185 | IQ5y5GXp2kTn4QXm2QjO4R1mjNEMaMSMbDnxcDExamAMjNIPch8PIz | 123.249.81.202/25985 | 317349 | mark | 2016-01-01 00:10 | http://blog.csdn.net//saber00004//article//details//50444188 | IQ5y5GXp2kTn4QXm2QjO4R1mjNEMaMSMbDnxcDExamAMjNIPch8PIz | 123.249.81.202/25985 | 300577 | mark | 2016-01-01 00:13 | http://blog.csdn.net//u013761036//article//details//45542243 | 1QXO3Q1s3pfN3Qbu1/fN5pb/ahES+mEMaMSLcgSTjNIPch0PIz | 118.123.19.9/25965 | 515079 | Jump | 2015-05-06 22:20 |
根据创建时间来看,作者应该是去年就在做这个东西了,只是没有把这个东西推广的很广,所以访问量并不是特别大。 并且,根据下图可以了解到,最早作者对CC服务器的IP地址和端口还没加密,可能是被各大杀软厂商查杀了,才对这个地址进行加密的。
author
从第二个地址的访问量上来看,这个数字比较庞大了。 可以看出来,作者花了很长时间,一直在改进。并且,还能从软件内看到各种“qh36”,“ccleaner”等字符串,看来国际上的杀软在国内的真正占有率,问问这位作者可能能得到比咨询机构更准确的答案^_^。不得不说作者的这个版本,或者说最近的版本还是挺成功的,感染了这么多受害者,而且这个东西还有下载加密文件,解密,并执行的功能,也就意味着,几乎对用户干啥都行。
av1
av2
看了看作者大号里的文章,感觉作者还是挺上进的,做了不少ACM的题,不知道现在毕业了没,也不明白为啥要写这些乱七八糟的东西,也不知道为啥有点担心这么一个小伙子(其实我还有点希望他是个妹子)走上歧途。难道是因为文章的阅读量少,想弄个大新闻?我脑洞太大了,哈哈,我真是太八卦了 我猜测这个博主还没毕业,因此就不再深挖一些东西了,希望这位少年能奔向该属于他的光明前途。
articles
再吐槽一下国内杀软吧,这个东西能在国内做大,真的不得不鄙视一下国内杀软。作者应该是3月就发布了这个木马了,到4月了也没发现几家国内的查杀。这些杀软平时各种Follow其他国际上的杀软,不少厂商也都是买国外的引擎,国外的病毒库,加上自己平时随便抓几个样本弄的特征和一个黑名单(又叫云查杀)就糊弄用户了,所以就导致这种中国特色的恶意软件查杀不及时。在我看来,不少国内杀软已经沦为广告软件了,不禁再次为国内用户感叹一声。
吐糟结束,还是要提醒下大家,虽然杀软并不能防御一切,但最好还是要装一个,不装的话可能会有一些厉害的木马潜伏在你系统上,而你一辈子也发现不了。 另外是,需要赞一下国内的厂商HIPS基本上都做的还不错,也就是那啥,主动防御一类的东西吧。 如果你对杀软和病毒有所了解,或者厌恶了比广告软件还流氓的杀软,那推荐你试试火绒(http://www.huorong.cn/),少一点流氓,多一点真诚。
|