恶意代码分析——基础技术篇

article/2025/5/30 21:27:51

文章目录

  • 恶意代码分析目的
  • 恶意代码分析方法
  • 恶意代码种类
  • 恶意代码静态分析
    • 环境
    • 在线反病毒引擎
    • 获取哈希值(certutil-hanshfile path MD5)
    • 查找字符串hive string ida火绒剑
    • 加壳&查壳
      • 文件加壳
      • 使用PEiD检测加壳
    • 导入导出函数
    • 获取资源信息
  • 常见的DLL程序
  • 恶意代码动态分析
    • 环境
    • 在线沙箱
    • 运行恶意代码
    • 进程监控器
      • 进程监控器的查看
      • 进程监控器中的过滤
    • 进程浏览器Process Explorer
      • 进程浏览器的显示
      • 比较字符串

恶意代码分析目的

  • 获取特征码
  • 撰写分析报告
  • 制作专杀工具

恶意代码分析方法

在这里插入图片描述
静态分析基础技术(快速分析技术):检查可执行文件但不查看具体指令的一些技术。静态分析基础技术可以确认一个文件是否是恶意的,提供有关其功能的信息,有时还会提供一些信息让我们生成简单网络特征码。
动态分析基础技术:涉及运行恶意代码并观察系统上的行为,以移除感染,产生有效的检测特征码,或者两者。
静态分析高级技术:主要是对恶意代码内部机制的逆向工程,通过可执行文件装载到反汇编器中,查看程序指令来发现恶意代码做了什么。
动态分析高级技术:使用调试器来检查一个恶意可执行程序运行时刻的内部状态。

恶意代码种类

  • 后门:恶意代码将自身安装到一台计算机来允许攻击者访问。后门程序能让攻击者很少甚至无需认证即可连接到远程计算机上在本地系统执行命令。
  • 僵尸网络:指采用一种或多种传播手段,将大量主机感染bot程序(僵尸程序)病毒,从而在控制者和被感染主机之间所形成的一个可一对多控制的网络。
  • 下载器:这是一类仅用于下载恶意代码到本地上的恶意代码。
  • 间谍软件:一种能够在用户不知情的情况下,在其电脑上安装后门、收集用户信息发生给攻击者的软件。
  • 启动器:用于启动恶意代码程序的恶意代码,具有隐蔽性。
  • 内核套件:用来隐藏恶意代码的工具。通常与其他恶意代码(如后门)组合成套装,来允许攻击者远程访问并很难被受害用户发现。
  • 勒索软件:攻击者通过锁屏、加密文件等方式劫持用户资产或资源以此向用户敲诈钱财的一种恶意软件。
  • 蠕虫或计算机病毒:可以自我复制和感染其他计算机的恶意代码。

恶意代码静态分析

环境

虚拟机!!!

在线反病毒引擎

我们在分析一个可疑的恶意代码样本时,第一步最好用多个反病毒软件对该样本进行扫描,看是否有引擎能识别它。
常用在线杀毒:VirSCAN、VIRSTOTAL
注意!在线杀毒适用于该恶意代码样本敏感度不高情况下使用。

获取哈希值(certutil-hanshfile path MD5)

哈希值又称恶意代码的指纹,恶意代码样本通过哈希程序会产生一段用于标识这个样本的独特哈希值。
在虚拟机中执行!
获取哈希值方法之一:MD5算法或者SHA-1算法
如:使用免费下载的md5deep程序计算windows操作系统自带solitaire程序哈希值

输入命令:md5deep solitaire程序路径

获取哈希值方法之二:用系统命令获取样本的md5

输入命令:certutil -hashfile 路径/file.exe MD5

注意!有时命令执行不了,可能是该虚拟机还没有此命令。

查找字符串hive string ida火绒剑

从字符串中搜索是获得程序功能提示的一种简单方法。
基本知识

  • 字节byte:8位
  • 字word:两字节,16位
  • 双字dword:四字节,32位
  • 八字节qword:八字节,64位
    使用strings程序查找字符串
    1.先到官网下载安装strings程序!
    2.然后使用命令将恶意代码里的字符串提前出来
输入命令:strings程序路径 恶意代码路径

3.将得到结果右键-标记-从头拖到尾-回车-粘贴到新建文本里
4.对文本里的字符串进行分析哪些很有可能是恶意代码
如:名字很长的域名(正常域名一般都很短),数字串(可能是含恶意代码的ip地址),错误信息提示(可提供一些有用信息)!

加壳&查壳

攻击者常常使用加壳或混淆技术将恶意代码隐藏。

文件加壳

后续会更新详细加壳与脱壳技术

使用PEiD检测加壳

PEiD可以用来检测加壳器的类型或用来链接应用程序的编译器类型。
使用方法:直接将恶意代码样本拖进来即可
如:
在这里插入图片描述
紫色框里便是该恶意代码样本加壳使用的软件版本号,但也有可能是假冒的哟。
下载PE编辑器PEditor:查看恶意代码样本的区段和日期时间标志,点击日期时间标志计算器——复制该标志到下边的解码,可看见该样本建立时间,判断其是否正确。

导入导出函数

下载PE编辑器PEditor:查看恶意代码样本的区段、目录里的导入表、导出表。
查看动态链接库里面的函数,分析该恶意代码可以会做的举动。
如:为了将程序以服务方式运行,即恶意代码会作为服务的一部分运行,必须定义ServiceMain函数。
注意!有时普通程序员在实现必要功能时可能也会这样起名哟,所以不一定这样判别是完全正确的。

获取资源信息

1.用PEditor打开恶意代码样本——点击目录——点击资源的… ——点击BIN——点击右下角的十六进制编辑器查看,若里面是个PE文件即为可执行程序——之后我们点击BIN下的101——点击右下角保存。
2.再用PEditor打开保存的文件——点击日期时间标志计算器——复制该标志到下边的解码即可得到正确时间
3.点击目录——查看导入表的函数,判断其功能
可放到IDA程序再深入分析

常见的DLL程序

  • Kernel32.dll:包含核心系统功能,如:访问和操作内存、文件和硬件等等;
  • Advapi32.dll:提供对核心windows组件的访问,比如:服务管理器和注册表;
  • User32.dll:包含所有用户界面组件,如:按钮、滚动条和控制和响应用户操作的组件;
  • Gdi32.dll:包含图形显示和操作的函数;
  • Ntdll.dll:是Windows内核的接口,可执行文件通常不直接导入这个函数,一般通过Kernel32.dll间接导入,若导入即是企图使用一些不正常提供给windows程序使用的函数。
  • Wsock32.dll和Ws2_32.dll:均是联网dll,访问其中任一个dll的程序非常可能连接网络,或是执行网络相关的任务。
  • Winint.dll:这个DLL包含了更高层次的网络函数,实现了如FTP、HTTP和NTP等协议。

恶意代码动态分析

环境

虚拟机!!!

在线沙箱

沙箱:一种在安全环境里运行不信任程序的安全机制,不用担心伤害到“真正“的系统。它包含一个虚拟环境,通过某种方式模拟网络服务,以确保被测试的软件或恶意代码能正常运行。
微步云沙箱
将恶意代码上传即可得到分析报告,可以下载恶意代码样本。
报告一般有分析摘要、文件活动、互斥量创建、注册表、网络行为和virustotal结构等。
ps:这部分内容之后可能会单独出详细学习笔记

运行恶意代码

恶意代码可以运行起来,我们的动态分析基础技术才有用哟。我们知道通常下运行一个恶意代码很简单只要双击或者命令行即可,但要运行一个恶意的dll很麻烦,因为windoes系统不知道如何自动执行它,接下来提供一个办法。
因为所有windows版本都含有rundll32.exe程序,他能给运行dll提供一个平台

输入命令:rundll32.exe 恶意代码样本路径, installA

install就像是启动dll的一个入口。
这样就可以用rundll32启动该恶意代码。
注意!还有其他命令也可以运行dll

进程监控器

进程监控器:windows系统的高级监视工具,提供一种方式来监控注册表、文件系统、网络、进程和线程行为。

进程监控器的查看

进程监控器的可配置栏里有事件序列号、时间戳、引发事件的进程名、事件操作、事件使用的路径、事件结果等。

  • 其中事件操作栏可以告诉你该程序在系统上做了什么操作!
    在这里插入图片描述

进程监控器中的过滤

因为监控器里的事件很多,设置指定过滤可以更快速找到目标。
设置过滤器:选择filter——打开过滤菜单栏——通过左上角的下拉菜单栏Reset按钮上面选择一栏——选择一个比较器——选择在过滤器里是保留还是取消。
注意!排除procmon.exe和pagefile日志记录,因为它们经常被访问且没有提供有用信息。

  • 当我们选择一个过滤器,单击Add添加每一个规则,然后单击Apply。在得到的记录中分析该程序操作了上面。
  • 过滤器仅仅用于显示过滤,所以当恶意代码释放另一个可执行程序并运行时,这些信息也会被记录。因此当看到有其释放其他程序时,要改变过滤器的设置以显示释放程序的名字,再单击Apply,与释放恶意程序相关事件就会被显示。
    注册表:通过检查注册表操作,能辨别一个恶意程序是怎样把自己添加到注册表中注册的。
    文件系统:检查文件系统能显示恶意程序创建的所有文件,或它使用的配置文件。
    进程行为:检查进程行为能告诉我们恶意程序是否启动了其他进程。
    网络:识别网络连接能向我们展示恶意程序监听的任意端口。

进程浏览器Process Explorer

这是微软的免费产品,一款强大的任务管理器,是进行动态分析的必备工具。它能让使用者了解看不到的在后台执行的处理程序,可以使用它方便地管理你的程序进程。 能监视,挂起,重启,强行终止任何程序,包括系统级别的不允许随便终止的关键进程和十分隐蔽的顽固木马。

进程浏览器的显示

软件运行界面:
在这里插入图片描述
鼠标左键点击上图箭头所指图标不放开,然后移动到要查看的窗口上,即可看到该窗口的详细进程信息。
进程浏览器监控系统上执行的程序以树状结构显示,可以看到:services.exe是wininit.exe的子程序:

在这里插入图片描述

  • 红框显示六栏:Process(进程名)、CPU(cpu使用率)、PID(进程号)、Description(进程描述)等等。
  • 视图每秒更新一次,默认情况下显示,服务为粉色、进程为蓝色、新进程为绿色、被终止进程为红色。其中绿色和红色执行是是亮亮的,当进程完全启动或终止后就会改变。
  • 当双击一个进程名时,属性窗口就会打开,里面会有分析恶意代码有用信息。线程标签threads显示所有活跃线程,TCP/IP显示活跃的连接和进程监听端口,镜像标签显示磁盘上可执行程序路径。
  • 镜像标签里的验证按钮Verify可以验证磁盘上的镜像文件是否有微软的签名认证。这对验证磁盘上windows文件有没有被破坏尤其有用,因为恶意代码常常替换windows认证文件且试图隐藏。注意!该验证针对的是磁盘上而不是内存里,因此可能会失效。

比较字符串

用来识别进程替换的方法。
步骤:使用进程属性窗口的字符串( Strings )标签,通过比较包含在磁盘上可执行文件的学符串与内存中同一个可执行文件的字符串,来看两者是否同。用左下角的单选按钮在这两个字符串视图间切换。如果这两个学符串列表有很大不同,那么可能就发生了进程替换!
经过分析提取到特征码,打开wirshark并进入命令提示符输入运行dll命令及net start IPRIP命令启动服务,观察wirshark(记得暂停观察)里是否有可疑数据包

这是我学习《恶意代码分析实战》的笔记,这本书很多干货,喜欢分析代码的推荐大家去看哟~

文章来源:https://blog.csdn.net/Woolemon/article/details/123956197
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://chatgpt.dhexx.cn/article/gZIpHDfY.shtml

相关文章

Understand(代码分析工具)的安装与使用教程

前言 虽然自己一直都在CSDN上面学习相关知识和查找需要的各种资源,但或许是因为自己实在不知道自己的博客该写什么内容,于是博客的更新速度一慢再慢,进而停更一年左右,在这一点上,我认为自己应该作出批评与反省。 而…

如何看懂源代码--(分析源代码方法)

我们在写程序时,有不少时间都是在看别人的代码。 例如看小组的代码,看小组整合的守则,若一开始没规划怎么看, 就会“看得想哭 ” 不管是参考也好,从开源抓下来研究也好,为了了解箇中含意,在有限…

一文了解全面静态代码分析

在开发具有安全性、可靠性和合规性的软件时,全面静态代码分析是一种有效的方法。在这里,我们将就静态分析而言,讨论全面静态代码分析的不同之处,阐述全面静态代码分析的重要性,以及如何进行全面静态代码分析。 什么是全…

代码分析工具 - SonarQube

1. 常见代码质量分析工具 SonarQube:可以分析27多种不同编程语言中的代码,并帮助您提高性能和检测安全漏洞。它由SonarSource的团队开发,对社区免费开源。SonarQube可以添加到您的CI/CD管道中,或者与您选择的代码库托管平台集成&a…

《编码 - 代码分析》代码结构分析

1 代码结构分析概述 在编写代码时,要求要结构清晰、接口简单。如果代码结构过于复杂,会带来很多问题:代码很难被理解,不方便编写测试用例,容易隐藏错误,出现问题难以定位,修改代码容易产生新的…

利用宏让ERStudio生成代码文件

Embarcadero ERStudio 是一个数据模型工具,用起来很方便。在ERStudio里建完数据模型后,可以利用宏来帮助生成对应的实体类文件以及对应的简单的数据访问类文件。为了实现这一目的,需要自己写脚本,支持的语言为 VB(以前…

Erstudio8.0怎么用?Erstudio8.0汉化版详细使用教程

Erstudio8.0使用教程 打开ERstudio,点击新建出现如图对话框: 选择第一个,表示创建一个新的关系型 数据库模型 这里提一点数据库模型分为relational(关系)和dimensional(多维) 两种在这里主要以关系型数据库为主来介绍模型的创建过程。 第二和第三项均是重…

ERStudio如何显示entity的tableName(表名的英文)和defaultColumnName(英文字段名)

转换为物理模型就可以了 物理模型中会优先显示tableName和defaultColumnName 这个mysql选择自己使用的数据库即可, ** 温馨提示:只想单纯看一下英文名而且不会转物理模型的话可以参考我的这个步骤,专业转化物理模型的话,建议另…

【SpringBoot】4. ERStudio初使用

1. 逻辑结构 (1)创建文件 (2)建立实体对象entity (3)编辑实体对象 (4)添加属性 (5)图表显示选项 (6)实体之间建立联系 (7…

如何使用ERStudio 生成comment

在ER使用中,在生成sql过程中,如何批量生成字段描述,如何批量添加Owner,请看下文: 1、ER生成字段描述 2、ER生成描述添加Owner 使用的ER版本是8.0,英文版本,在操作过程中,有些配置细节…

使用ERStudio6创建数据表ER图并导出数据表的SQL(DDL)语句

1.创建数据表实体 打开ERStudio软件,其界面如下: 点击File菜单的NEW或则使用快捷键“CtrlN”着按钮 来新建一个ER图文件,按下OK按钮即可打开一个空白的ER图文件 其后缀是.DM1类型的。新建一个ER文件后,ERStudio的工具栏内的许多按…

ER/Studio知识汇总

一、关系 网上找了一下,大部分说得不太清楚,我在这里举上个例子。注意,这里的关系是逻辑上的,并非表结构也要如此。 1. 标识关系identifying relationship 意思:子实体的主键包含父实体的外键(可能成为复合…

【NodeJS】20 koa 企业级Cms内容管理系统-XMind功能分析、ERStudio设计数据库ER图

一、 什么是 CMS CMS 是"Content Management System“的缩写,意为"内容管理系统”。 内容管理系统是企业信息化建设和电子政务的新宠,也是一个相对较新的市场。对于内容管理,业界还没有一个统一的定义,不同的机构有不同…

ER-studio显示选项设置

新建erstudio文件,默认不显示entity的datatype,用起来不方便。 设置如下: 当前页面->右键选择 Diagram And object Display Options->Entity->Datatype(勾选即可)。效果如上图

(10)ERStudio

1.外键 https://jingyan.baidu.com/article/f79b7cb37e9d219144023ea6.html 第一个图标:Identifying Relationship。 一对多的关联,主表的主键既是子表的外键也是子表的主键 第二个图标:Non-Identifying, Mandatory Relationship。 一对多的关…

ERStudio逆向工程生成ER模型

首先,打开ERStudio,如下图所示: 然后,点击菜单栏上的“File”——“New”,如下图所示: 弹出如下的对话框,选择第二个单选按钮 接着,点击“Login”按钮,弹出如下的对话框&…

使用ERStudio创建数据表与ER图

下面以一个教育网站的用户数据表来举例说明ERStudio的一些基本操作方法: 1.创建数据表实体 打开ERStudio软件,其界面如下: 点击File菜单的NEW或则使用快捷键“CtrlN”着按钮来新建一个ER图文件,按下OK按钮即可打开一个空白的ER图文…

使用ERStudio创建数据表ER图并导出数据表的SQL(DDL)语句

1.创建数据表实体 打开ERStudio软件,其界面如下: 点击File菜单的NEW或则使用快捷键“Ctrl+N”着按钮来新建一个ER图文件,按下OK按钮即可打开一个空白的ER图文件 其后缀是.DM1类型的。新建一个ER文件后,ERStudio的工具栏内的许多按钮从灰色编程了彩色可用。 下面开始创建一个…

esStudio 逆向工程 导出 ER图

第一步:mysql 配置odbc驱动 :驱动安装 第二步配置 ERStudio 首先,打开ERStudio,如下图所示: 然后,点击菜单栏上的“File”——“New”,如下图所示: 弹出如下的对话框,…

erstudio怎么导入mysql数据库?_使用ERStudio生成数据库设计文档。

使用ERStudio生成数据库设计文档 1、用逻辑模型(Logical Model)生成物理模型(Physical Model)。 2、选择Tools->Generate Reports...。 3、在弹出的对话框中选择RTF格式、生成文件的位置和名称,如下图。 3、单击“Next”按钮,在新窗口的左边树Tables项…