恶意代码分析实战 10 数据加密

news2024/12/27 13:58:39

10.1 Lab13-01

  1. 比较恶意代码中的字符串(字符串命令的输出)与动态分析提供的有用信息,基于这些比较,哪些元素可能被加密?

使用WireShark进行动态分析。
vmware_9XwdfEL51d.png
有一串字符看起来像是加密的。
使用Strings分析一下。
发现疑似Base64的存在痕迹。
vmware_kfzO3xrzFG.png
没有发现上面看到的疑似加密的字符串和网址。可能是加密了。

  1. 使用IDAPro搜索恶意代码中字符串xor,以此来查找潜在的加密,你发现了哪些加密类型?

使用IDA查找所有xor位置。
vmware_LAonvokDBZ.png
这里面唯一看着像是加密的是这行命令。
:::info
xor eax, 3Bh
:::
vmware_n9LCxplesr.png
对字符进行了xor的3Bh操作。

  1. 恶意代码使用什么密钥加密,加密了什么内容?

交叉引用,进入函数调用处。
vmware_6PRGVHCNe9.png
对资源进行了很多操作。
vmware_mDgtpdexK5.png
我们怀疑加密数据就在资源节中。
使用ResourceHacker查看。
vmware_6LretkC5D6.png
使用WinHex进行修改。
vmware_DAh2v7ub9e.png
是一个网址。

  1. 使用静态工具FindCrypt2、Krypto ANALyzer(KANAL)以及 IDA熵插件识别一些其他类型的加密机制,你发现了什么?

使用Krypto ANALyzer插件进行分析。
vmware_a9krSKQ2TJ.png
发现base64编码表。
在IDA上跳转到这个地址。
vmware_jQG1Gjpvu1.png

  1. 什么类型的加密被恶意代码用来发送部分网络流量?

vmware_YnzoJGEix5.png
函数嵌套了很多轮,最终在main函数中看到了,是将GET请求进行了标准的Base64加密。

  1. Base64编码函数在反汇编的何处?

vmware_ylOFIiPj5T.png
这里就是Base64编码函数的位置。

  1. 恶意代码发送的 Base64加密数据的最大长度是什么?加密了什么内容?

vmware_jCm7G7C2Yn.png
函数开头使用strlen查找原字符串的长度,在外部循环(代码块loc_401100)的开头与3比较,在下图处于4比较。
vmware_UdJGJIPS6G.png
这一点更加确定这是Base64加密。
Base64加密前,Lab13-01.exe复制最大12个字节的主机名,这使得GET请求的字符串的最大字符格个数是16.

  1. 恶意代码中,你是否在 Base64加密数据中看到了填充字符(=或者==)?

vmware_5B0nDaNewO.png
如果主机名小于12个字节并且不能被3整除,则可能使用填充字符。

  1. 这个恶意代码做了什么?

Lab13-01.exe用加密的主机名发送一个特定信号,知道接受待定的回应后退出。

10.2 Lab13-02

  1. 使用动态分析,确定恶意代码创建了什么?

运行程序后,使用Promon进行监控,发现有很多创建和写入文件的操作。
vmware_BDE5ZQ2wPe.png
回到程序所在目录,发现创建了很多文件,使用WinMD5确认不是同一个文件。
vmware_ZzucWrLL4l.png

  1. 使用静态分析技术,例如 xor指令搜索、FindCrypt2、KANAL以及IDA熵插件,查找潜在的加密,你发现了什么?

使用FindCrypt2,没发现什么。
vmware_Z5MkTvwgOq.png
使用KANAL。
vmware_tjR8eSVrkU.png
也没有发现什么。
使用IDA的xor寻找。
vmware_LUXHmXX9et.png
查看函数调用。
vmware_h0CAMwE2mb.png

  1. 基于问题1的回答,哪些导入函数将是寻找加密函数比较好的一个证据?

我们看到了WriteFile函数被多次调用,我们怀疑这个导入函数是寻找加密函数的较好证据。
vmware_oWE9SKmT9g.png

  1. 加密函数在反汇编的何处?

GetTickCount 函数,返回子系统启动以来的毫秒数,应该是用来写入文件名字的。
vmware_SoZ8YRGdPv.png
那么下面的函数应该就是加密函数了。
LenovoPcManager_q7LL4VqN5e.png

  1. 从加密函数追溯原始的加密内容,原始加密内容是什么?

vmware_kiWpLYafIB.png
进入这个函数查看。
vmware_HtXzuRnbpr.pngvmware_IrOvj8FpuH.png
分析API函数可知,该函数的作用是截图屏幕,也就是原始加密内容。

  1. 你是否能够找到加密算法?如果没有,你如何解密这些内容?

加密算法已经找到,但该算法并不是标准的算法,可以使用ImmunityDbg进行解密。

  1. 使用解密工具,你是否能够恢复加密文件中的一个文件到原始文件?

vmware_A6vz0GXXdo.png
在加密前和加密后下断点。
首先运行至获取加密文件,使用WinHex打开文件,复制文件内容。
vmware_SMDyc4XX3u.png
粘贴到ImmunityDbg。
vmware_UST3iIMvG3.png
运行之后获得解密文件,修改后缀为bmp后,打开图片。
vmware_7PGTkyK2sq.png
解密成功。
或者换一种方式,使用Python脚本。
chrome_lGpAZYH4PP.png

10.3 Lab13-03

  1. 比较恶意代码的输出字符串和动态分析提供的信息,通过这些比较,你发现哪些元素可能被加密?

使用WireShark动态分析,发现一个网址。
vmware_52QaRgHfz8.png
使用IDA分析,看到Base64加密的字符表。
vmware_8jsBDB0ySj.png

  1. 使用静态分析搜索字符串xor来查找潜在的加密。通过这种方法,你发现什么类型的加密?

vmware_AYASrWSZT0.png
搜索xor指令发现了6个可能与加密相关的单独函数,但是加密的类型一开始并不明显。

  1. 使用静态工具,如FindCrypt2、KANAL 以及 IDA熵插件识别一些其他类型的加密机制。发现的结果与搜索字符XOR结果比较如何?

KANAL。
vmware_OMcmR2RaXy.png
FindCrypt2。
vmware_qbNniMI2wG.png
发现了AES加密算法。

  1. 恶意代码使用哪两种加密技术?

恶意代码使用AES和自定的Base64加密。

  1. 对于每一种加密技术,它们的密钥是什么?

· Base64的密钥。
vmware_2OUa5QzJuz.png
xor6的加密循环。
vmware_ABNeXnUKby.png
查看一段代码。
vmware_V9o7vu1xKY.png
s_xor2和s_xor4调用加密常量。
vmware_tGewaa6HE5.png
s_xor3和s_xor5调用解密常量。
vmware_L9Ls5RTy33.png
该函数调用二和4,所以是加密函数。
vmware_kHL3HbaApE.png
分析s_xor1,可以得知,这是一个密钥初始化函数。
由此我们也找到了密钥。
vmware_V1QBdokcBI.png

  1. 对于加密算法,它的密钥足够可靠吗?另外你必须知道什么?

vmware_YXOp409BEO.png
vmware_qCWxFdQJz6.png
对于自定义的Base64加密的实现,缩印字符串已经足够了。凡是对于AES,实现解密可能需要密钥之外的变量。如果使用密钥生成算法,则包括密钥生成算法,密钥大小,操作模式,如果需要还包括向量的初始化。

  1. 恶意代码做了什么?

恶意代码使用自定义的Base64加密算法加密传入命令和以AES加密传出shell命令响应来建立反连命令shell。

  1. 构造代码来解密动态分析过程中生成的一些内容,解密后的内容是什么?
    使用Python编写解密脚本。
import string
import base64

S = ""
tab = 'CDEFGHIJKLMNOPQRSTUVWXYZABcdefghijklmnopqrstuvwxyzab0123456789+/'
b64 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
ciphertext = 'BInaEi=='
for ch in ciphertext:
    if(ch in tab):
        S += b64[string.find(tab, str(ch))]
    elif(ch == '='):
       S += '='
print base64.decodestring(S)

运行结果。
vmware_yuaYgmmdfG.png
AES解密,失败。

# pip install pycryptodome
from Crypto.Cipher import AES
import binascii

raw = 'eb 63 85 35 e8 45 cc e9  5c 92 36 9d 31 d5 3c 01' + \
      '8e bf e5 8b 06 e1 48 3f  42 5c 5a 0a 4c 75 b2 fa' + \
      '7a c5 3c 27 f2 04 d2 25  d8 e6 c5 d5 78 03 34 98' + \
      '49 5e 4f fd f7 dd 63 a6  91 0e 81 06 cc a8 62 ac' + \
      '74 f2 4a 26 e7 b2 55 03  d3 71 c8 a9 4c 61 c0 65'
ciphertext = binascii.unhexlify(raw.replace(' ', ''))
obj = AES.new('ijklmnopqrstuvwx', AES.MODE_CBC)
print obj.decrypt(ciphertext)

msedge_8Mf2G7xL33.png

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

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

相关文章

KUKA机器人初次通电配置

安全配置 机器人KSS系统里,会提示选择机器人信息的对话框,选择“机器人”按钮,如下: 承接上一步骤,通过示教器确认所有消息,单击消息提示区域,此时一定会弹出如图 所标示的报警消息&#xff0…

【唐诗学习】一、古诗概述

一、古诗概述 为什么要学习古诗词? 古诗词可以陶冶情操,传承文化诗词,其实就是古代的流行歌曲,它们记录着一个个时代的变迁,是历史的旋律。还有一点很重要:同样是记录历史,史书是国家视角&…

零基础学JavaWeb开发(二十二)之 springmvc入门到精通(2)

3、SpringMVC PostMan工具使用 PostMan简介 Postman 是一款功能超级强大的用于发送 HTTP 请求的 Chrome插件 。做web页面开发和测试的人员会使用到该工具其主要特点 特点: 创建 测试:创建和发送任何的HTTP请求,使用PostMan发送 Get、Post、…

Java IO流之字符流详解

字符流概述 字符流的底层其实就是字节流 字符流 字节流 字符集 字符流特点 输入流:一次读一个字节,遇到中文时,一次读多个字节输出流:底层会把数据按照指定的编码方式进行编码,变成字节再写到文件中 使用场景 用于…

学习Go的全部网站集合

给Golang 入门新手整理了一份全部所需网站集合,主要分为三类。 社区类:这类网站是问答、文档、搜索、资源类网站汇总 镜像和安装包类:有些安装包可能无法下载,此处列出一些可下载Go包和镜像的网站。 开发工具:目前流…

代码随想录--栈与队列章节总结

代码随想录–栈与队列章节总结 1.LeetCode232 用栈实现队列 请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(push、pop、peek、empty): 实现 MyQueue 类: void push(int x) 将元素 x 推到队列的末尾i…

2.4.2 浮点型

1.浮点型基本数据类型介绍 浮点类型用于表示有小数部分的数值。在JAVA种有俩种浮点类型,分别是float和double. 类型字节长度位数取值范围float4字节32约 3.40282347E38Fdouble8字节64约 1.79769313486231570E308 double表示这种类型的数值精度是float类型的俩倍&a…

PyCharm中运行LeetCode中代码

Leetcode中题目只需要写函数体里面内容即可。不需要关注输入,输出。 这里拿LeetCode中第一题,两数之和 “给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数…

随机梯度下降算法 入门介绍(最通俗易懂)

文章目录1.什么是梯度2.什么是梯度下降算法3.什么是随机梯度下降算法1.什么是梯度 首先给出高数课程中梯度的定义: 如果对上面的定义没有理解也没有关系,用通俗的语言来说,梯度实际上就是一个向量,向量中的各个元素表示多元函数在…

Java IO流之字节流详解

一、OutputStream输出流 FileOutputStream概述: 操作本地文件的字节输出流,可以把程序中的数据写到本地文件中 书写步骤: ① 创建字节输出流对象 细节1:参数一是字符串表示的路径或者File对象都是可以的 细节2:如果文…

《安富莱嵌入式周报》第300期:几百种炫酷灯阵玩法, USB Web网页固件升级,波士顿动力整活,并联二极管问题,VisualStudio升级,STM32C0

往期周报汇总地址:嵌入式周报 - uCOS & uCGUI & emWin & embOS & TouchGFX & ThreadX - 硬汉嵌入式论坛 - Powered by Discuz! 祝大家春节快乐! 视频版: https://www.bilibili.com/video/BV1UY4y1d7C7 《安富莱嵌入式周…

(考研湖科大教书匠计算机网络)第二章物理层-第三、四节:传输方式和编码与调制

文章目录一:传输方式(1)串行传输和并行传输(2)同步传输和异步传输(3)单工、半双工和全双工二:编码与调制(1)通信相关基础知识①:消息、数据、信号…

linux实战笔记整理(1.24)

后台挂起程序: 如果报错:nohup: ignoring input and appending output to nohup.out,则在指令最后加一个&让程序自己运行:nohup command增加rm 提醒:(重要的命令问三遍): 操作: …

为tableview添加带控件的单元格如复选框checkbox与combbox单元格

我们常常会有这样的需求,为QTableView增加复选框checkbox和选择下拉框combbox,毕竟依靠键盘输入不是很好约束其规范性。下面我们逐个来介绍。完成之后的效果如下: 一、准备TableView 1、数据准备 数据大家可以随意准备,有的话…

[C语言]柔性数组

目录 1.柔性数组 2.柔性数组的特点 3.柔性数组的使用 1.柔性数组 柔性数组存在于结构体中,当结构体最后一个成员元素为一个未知大小的数组,则称其为柔性数组。 struct s {int a;char arr[];//柔性数组 }; 2.柔性数组的特点 1. 结构中的柔性数…

八、python-高级语法篇(黑马程序猿-python学习记录)

黑马程序猿的python学习视频:https://www.bilibili.com/video/BV1qW4y1a7fU/ 目录 1. 什么是闭包 2. 闭包的优缺点 3. nonlocal关键字的作用 4. 简单闭包 5. 使用nonlocal关键字修改外部函数的值 6. 使用闭包实现ATM小案例 7. 装饰器概念 8. 装饰器的一般写法 9. 装…

Vue-Router详解

1、前端路由的发展历程 1.1、认识前端路由 路由其实是网络工程中的一个术语: 在架构一个网络时,非常重要的两个设备就是路由器和交换机。当然,目前在我们生活中路由器也是越来越被大家所熟知,因为我们生活中都会用到路由器&…

算法:树状数组详解(c++实现 求解动态数组区间和问题)

文章目录引入树状数组c完整代码引入 什么是树状数组??? 解决数据压缩里的累积频率(Cumulative Frequency)的计算问题,现多用于高效计算数列的前缀和, 区间和,这样的问题可以使用树…

Day8 spring 注解开发

1 前言使用注解类代替xml配置,使用注解代理xml中的标签2 标签2.1 用于Bean(类)上的常见注解2.1.1 Component步骤:在xml中配置包扫描,使得spring知道在哪些类上加上Component在特定类上加上Component测试/*** author : msf* date : 2023/1/24*…

#I. 哆啦A梦的时光机(bfs经典习题)

题目说明有一天,大雄和他的伙伴们想穿越时空进行探险,可是时光机却出了一点故障,只能进行有限的时空穿越操作。大雄他们需要从现在出发,到达一个目标时间点进行探险,结束后再返回到现在,他们希望尽可能减少…