20232319 2024-2025-1 《网络与系统攻防技术》实验四实验报告

news/2025/11/5 23:23:03/文章来源:https://www.cnblogs.com/20232319hj/p/19191715

1.实验内容

  • 1.恶意代码文件类型标识、脱壳与字符串提取
  • 2.使用IDA Pro静态或动态分析crackme1.exe与crakeme2.exe,寻找特定输入,使其能够输出成功信息。
  • 3.分析一个自制恶意代码样本rada,并撰写报告,回答以下问题:
  • 4.取证分析实践

2.实验过程

2.1恶意代码文件类型标识、脱壳与字符串提取

(1)使用文件格式和类型识别工具,给出rada恶意代码样本的文件格式

  • 在Linux中查看文件类型file RaDa.exe
  • 使用应用程序PEiD查看套壳情况
  • 发现RaDa文件是一个32位可执行文件,运行于windows平台下,带有图形化界面(GUI)。
  • 经PEiD查看发现,该程序存在套壳情况,使用upx压缩壳。

检查文件类型及套壳情况

(2)使用超级巡警脱壳机等脱壳软件,对rada恶意代码样本进行脱壳处理

  • 使用脱壳机进行脱壳

脱壳

(3)使用字符串提取工具,对脱壳后的rada恶意代码样本进行分析,从中发现rada恶意代码的编写作者是谁
此处需使用ida pro程序进行逆向分析,进入程序后选择PE Executable。

选择pe

  • 选择strings,提取字符,下划一段距离发现代码作者名字,以及代码编写时间

strings打开方式

ida查找作者

  • 双击上图标蓝部分,视窗切换到该信息所在位置,如下图

ida查找信息

2.2 使用IDA Pro静态或动态分析crackme1.exe与crakeme2.exe,寻找特定输入,使其能够输出成功信息。

(1)分析crack1.exe

  • 动态分析该文件,直接运行该文件,第一次不带参数,第二次带一个参数。
    发现输出结果不同,第二次显示Pardon? what did you say?,说明参数输入错误

测试程序

  • 第二次测试,尝试两个参数与三个参数,输出结果均与第一次无参数测试一样,说明该函数很有可能仅需要一个参数

测试程序2

  • 动态分析结束,使用ida pro 进行静态分析

选择crackme1.exe文件,点击View->Graphs->Function calls查看函数调用情况

  • 发现函数sub_401280函数调用了fprintf与printf,与该程序动态分析时的输入输出情况有关联,选择该函分析
    分析函数调用情况,确定目标函数

  • 打开函数窗口快速寻找到sub_401280函数,双击切换到具体位置
    function窗口快速确定位置

点击如图按钮,sub_401280函数内部情况
点击蓝标确定函数内部调用情况

  • 具体情况如下,由此可以得知如果输入的1个参数为“I know the secret”,则程序给出输出You know how to speak to programs, Mr. Reverse-Engineer,输入其他1参数则会输出“Pardon,What did say”,输入0个参数或1个以上参数则会输出“I think you are missing something”
    函数内部情况

  • 试运行,成功
    成功

(2)分析crackme2.exe

  • 动态分析crackme2.exe,使用上一步的结果测试,输入“I know the secret”,输出结果为“I have an identify problem.”
    测试程序

  • 同样使用ida pro进行静态分析,sub_401280函数依然调用fprintf函数,所以选择该函数进行分析
    函数调用图确定目标函数

打开function calls,发现要求的第一个参数为crackmeplease.exe,即需要把文件名更改为crackmeplease.exe
函数内部运行情况,确定改名以及输入内容

  • 试运行,在cmd中第一次使用.\crackmeplease.exe带参数输入失败,第二次使用crackmeplease.exe带参数输入成功。
  • 在powershell中运行exe程序必须使用./crackmeplease.exe才能运行,失败
    成功运行,需要cmd且不使用

image

2.3 分析一个自制恶意代码样本rada,并撰写报告,回答以下问题

(1)提供对这个二进制文件的摘要,包括可以帮助识别同一样本的基本信息;

file RaDa.exe  查看文件类型信息
md5sum RaDa.exe  查看该文件的摘要值
exiftool RaDa.exe | grep "Time Stamp"  查看文件生成时间

展示基本信息与摘要值

(2)找出并解释这个二进制文件的目的;

  • 使用ida pro进行静态分析,打开function calls查看。

  • 发现函数sub_404FB0调用较多子函数,考虑从该函数开始调查
    选择一个函数进行展示,该函数涉及较多子函数

  • 查看函数内部情况,它将一个硬编码的URL字符串 "http://10.10.10.10/RaDa"的地址加载到 edx寄存器。

  • "cgi-bin/download.cgi"和 "cgi-bin/upload.cgi":用于下载新的恶意载荷或命令,以及上传从受害者机器上窃取的数据。

  • "C:\\RaDa\\tmp"和 "C:\\RaDa\\bin":这揭示了软件在计算机上的工作目录。它会在C盘根目录下创建RaDa文件夹。
    "HKLM\\Software\\Microsoft\\Windows\\CurrentVersion\\Run"和 "RaDa":它准备向系统的启动注册表项写入一个名为RaDa的键值,导致自启动。

目的分析:建立后门程序,在受害者的计算机上窃取数据并上传,同时接受攻击者控制。
函数内部情况

函数内部情况2

(3)识别并说明这个二进制文件所具有的不同特性;

  1. 使用了upx压缩壳
  2. 具有自启动特性
  3. 可以远程操控

(4)识别并解释这个二进制文件中所采用的防止被分析或逆向工程的技术;

  • upx压缩壳,隐藏程序逻辑与入口点。

(5)对这个恶意代码样本进行分类(病毒、蠕虫等),并给出你的理由;

  • 我认为该程序是一个后门程序,因为该程序并不具有自我复制与自主网络传播的特性,且能被攻击者远程操控,符合后门程序的特征。

(6)给出过去已有的具有相似功能的其他工具;

  • msfvenom,veil

(7)可能调查处这个二进制文件的开发作者吗?如果可以,在什么样的环境和什么样的限定条件下?

  • 可以,使用ida pro进行逆向分析。在脱去upx压缩壳的情况下。

(8)给出至少5种检测该恶意软件的方法,例如基于特征码的方法,需要详细介绍每种方法。

  • 基于特征码的检测:比对文件与已知恶意软件的特征码,例如哈希值、特定字符串。
    特点:速度快,对已知威胁准确;无法检测未知或变种后门。
    工具:杀毒软件

  • 行为分析:监控程序的实际行为,例如文件操作、网络连接、注册表修改,判断是否异常。
    特点:能发现未知后门;可能需较多资源,可能产生误报。
    工具:沙箱(Sandbox)

  • 网络流量分析:分析网络通信(如异常连接、非常用端口)
    特点:不依赖主机文件,能发现隐藏活动;需处理大量数据,加密流量分析难度大。
    工具:wireshark

  • 静态分析:不运行程序,直接分析其代码、文件结构、字符串等。
    特点:相对安全,适用于初步筛查;对代码混淆或加壳的后门效果可能受限。
    工具:IDA Pro

  • 文件及系统完整性检查:计算系统文件的哈希值或校验和,与已知正常值比对。
    特点:能有效发现文件篡改;依赖于可靠的基础校验库或先前保存的正常状态。
    工具:系统自带工具(例如Linux下的rpm -v),第三方完整性检查工具

2.3 取证分析实践

(1)IRC是什么?当IRC客户端申请加入一个IRC网络时将发送那个消息?IRC一般使用那些TCP端口?

  • IRC(Internet Relay Chat,互联网中继聊天)是一种基于文本的实时通信协议

  • 当IRC客户端申请加入一个IRC网络时,将发送JOIN消息以请求加入特定的频道

  • 客户端通常需要完成注册过程,包括发送以下消息:
    PASS:设置连接口令
    NICK:设置用户昵称
    USER:提供用户信息

  • 常用tcp端口:6667:IRC协议的默认端口,用于明文传输

6697:用于SSL/TLS加密传输的IRC连接

(2)僵尸网络是什么?僵尸网络通常用于什么?

  • 定义:僵尸网络(Botnet)是指采用一种或多种传播手段,将大量主机感染bot程序(僵尸程序)病毒,从而在控制者和被感染主机之间所形成的一个可一对多控制的网络。

僵尸网络主要用途:DDos攻击,垃圾邮件分发,数据窃取,恶意软件传播
(3)蜜罐主机(IP地址:172.16.134.191)与那些IRC服务器进行了通信?
通过源IP地址与端口过滤,发现与蜜罐主机通信的IRC服务器有5个,分别是

66.33.65.58
63.241.174.144
217.199.175.10
209.196.44.172
209.126.161.29

统计分析通信主机个数

(4)在这段观察期间,多少不同的主机访问了以209.196.44.172为服务器的僵尸网络?
首先将数据包botnet_pcap_file.dat传输至kali虚拟机
下载tcpflow工具,sudo apt install tcpflow
使用命令tcpflow -r botnet_pcap_file.dat "host 209.196.44.172 and port 6667"获取TCP流数据文件。包含蜜罐主机向服务器发送的数据流,与服务器向蜜罐主机发送的数据流。
tcpflow命令

分析tcp流数据文件,选择服务器向蜜罐主机发送的数据流,使用命令cat 209.196.044.172.06667-172.016.134.191.01152 | grep -a "^:irc5.aol.com 353" | sed "s/^:irc5.aol.com 353 rgdiuggac @ #x[^x]*x ://g" | tr ' ' '\n' | tr -d "\15" | grep -v "^$" | sort -u | wc -l

-a: 将二进制文件视为文本文件进行搜索。
"^:irc5.aol.com 353": 匹配以:irc5.aol.com 353开头的行。在IRC协议中,代码353表示NAMES回复,即服务器发送频道中的用户名单
wc -l:wc命令用于统计。
-l选项表示只统计行数。至此,行数就等于唯一昵称的数量
  • 发现,存在有3461个主机访问了该服务器。
    统计主机数

(5)哪些IP地址被用于攻击蜜罐主机?
输入命令tcpdump -n -nn -r botnet_pcap_file.dat 'dst host 172.16.134.191' | awk -F " " '{print $3}' | cut -d '.' -f 1-4 | sort | uniq | more > 20232319.txt;wc -l 20232319.txt

-n:禁止将IP地址转换为主机名。这会直接显示IP地址(如172.16.134.191),而不是尝试去解析DNS得到可能的主机名,从而加快处理速度并确保输出的一致性
| awk -F " " '{print $3}'
tcpdump的输出通过管道(|)传递给awk进行处理。awk默认的每行输出格式类似于:时间戳 IP发送方.端口 > IP接收方.端口。-F " ":设置字段分隔符为空格。这样可以将每一行文本按空格拆分成多个字段。'{print $3}':打印第3个字段。在tcpdump的默认输出中,第3个字段通常是源IP地址和源端口号

通过观察图片发现,共有165个ip地址用于攻击蜜罐主机。

image

(6)攻击者尝试攻击了那些安全漏洞?
使用wireshark查看使用哪些协议,发现99.7%使用tcp协议,0.3%使用udp协议
image

查看tcp协议

tcpdump -r botnet_pcap_file.dat -nn 'src host 172.16.134.191' and tcp[tcpflags]== 0x12 | cut -d ' ' -f 3 | cut -d '.' -f 5 | sort | uniq

tcp端口

查看udp协议
tcpdump -r botnet_pcap_file.dat -nn 'src host 172.16.134.191' and udp | cut -d ' ' -f 3 | cut -d '.' -f 5 | sort | uniq

udp端口

  • TCP:135(RPC,Windows远程过程调用)、139/445(SMB,Windows文件共享)、25(SMTP,简单邮件传输协议)、4899(Remote Administrator,远程控制软件)、80(HTTP,网页服务)
  • UDP:137(NetBIOS,Windows网络邻居功能)

image

(7)那些攻击成功了?是如何成功的?
TCP连接的445端口、4899端口、80端口成功攻击

  • 135端口,后续无恶意数据包,攻击失败
    image

  • 139端口,攻击方多次实现三次握手tcp连接,攻击者尝试访问目录\PC0191\c,后续蜜罐主机发送RST包断开连接,后续无恶意数据包,攻击失败
    image

  • 25端口,成功建立连接,后续主机发送[FIN,ACK]包请求断开连接,后续无恶意数据包,攻击失败
    image

  • 445端口,成功建立连接,且后续发送大量SMB包,且受害主机未发送任何RST包断开连接,攻击者通过445端口的SMB协议,成功删除了目标主机172.16.134.191上路径为C:\System32\PSEXESVC.EXE的文件,实质影响到受害主机的文件完整性,攻击成功。

image

  • 4899端口,成功建立连接,攻击者向主机发送大量[PSH,ACK]包
    image

  • 后续发现,请求中包含了 ../../../winnt/system32/cmd.exe和指令 dir xe /c dir,实现了路径遍历攻击,成功
    屏幕截图 2025-11-05 225107

  • 80端口,建立连接后,发送带有大量c字符的攻击载荷,且受害主机没有主动断开连接,说明受害主机可能已接收该攻击载荷
    image
    同样,下方也有路径扫描攻击,受害主机无任何保证安全性的回应,说明攻击成功
    屏幕截图 2025-11-05 230037

  • UDP 137端口
    具有大量的NetBIOS服务扫描活动,但未包含任何攻击载荷,攻击失败。
    屏幕截图 2025-11-05 230708

3.问题及解决方案

  • 问题1:crackme2.exe文件改名为crackmeplease.exe后运行依然无法获得正确的结果
  • 问题1解决方案:不要使用powershell,而是使用cmd运行,在cmd中可以使用crackmeplease.exe [参数]运行,保证程序名前无任何字符(例如“./”)。

4.学习感悟、思考等

通过本次实验,我掌握了恶意代码分析的全过程,掌握了PEiD,脱壳工具,IDA PRO逆向分析工具。通过这些工具,拓宽了我实现恶意代码分析的方法与视野。
网络攻防,工具是必不可少的,工具让分析任务事半功倍。

参考资料

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

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

相关文章

汉字识别

点击查看代码 import torch import torch.nn as nn import torch.nn.functional as F import torch.optim as optim from torch.utils.data import Dataset, DataLoader import numpy as np from PIL import Image, Im…

AGC与AVC是什么

定义AGC:自动发电控制 功能:实时调节有功功率,将电网频率控制在50HZ 电网频率的高低由“有功功率”决定 有功多了,频率升高。AVC : 自动电压控制 功能:调节无功补偿设备,将电网电压在额定值5% 内 电网电压高低由…

链表1

链表1线性表的链式表示与实现1 基本概念 线性表的链式表示又称为非顺序映像或链式映像 特点链表中元素的逻辑次序和物理次序不一定相同链表中的存储单元既可以是连续的,也可以是不连续的,甚至是零散分布在内存中的任…

競プロ典型 90 問-难题

005倍增优化dp 题目大意(自己总结 只用数字 c1​,c2​,…,cK​ 可以构造出多少个 N 位正整数是 B 的倍数? 求除以 109+7 的余数。$1 \leq K \leq 9$ $1 \leq c_1 \lt c_2 \lt \cdots \lt c_K \leq 9$ $1 \leq N \leq…

c++函数调用的大致工作过程

c++函数调用的大致工作过程在C++中,函数调用是一个基本的编程概念,它允许我们将一组语句封装成一个独立的模块,以便重复使用或提高代码的可读性和可维护性。函数调用的工作过程可以分为以下几个步骤: 1、函数声明(…

Slack端到端测试管道优化:构建时间减半的技术实践

本文详细介绍了Slack开发体验团队如何通过条件性前端构建和预构建资产缓存策略,将端到端测试管道的构建时间从10分钟缩短至2分钟,显著提升开发效率并降低云存储成本。在 DevOps 和开发者体验(DevXP)领域,速度和效…

结构体与联合体的区别

1.内存分配方式 结构体为每一个结构体的成员分配独立的内存空间;总内存为所有成员大小之和。 联合体的成员共享同一片内存空间,总内存大小为最大成员的大小。 2.成员访问特性 结构体可以同时访问所有的成员 联合体同…

Day14综合案例二--

<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0">…

解决colcon编译卡死

下面这两个命令我这里不起作用:colcon build --parallel-workers 6 colcon build --executor sequential下面命令可以解决卡死问题:MAKEFLAGS=-j4 colcon build

铁杆粉丝占比20251105

序号 代码 名称 最新价(2025.11.05) 涨跌幅(2025.11.05) 铁杆粉丝占比 涨跌额(2025.11.05) 最高价(日线不复权)(2025.11.05) 最低价(日线不复权)(2025.11.05) 换手率(2025.11.05) 量比(2025.11.05) 成交量(股)(2025.11…

Mybatis 都有哪些 Executor 执行器?它们之间的区别是什么? - Higurashi

基于:Mybatis 都有哪些 Executor 执行器?它们之间的区别是什么?在 MyBatis 中,Executor 是一个关键的接口,负责执行映射的 SQL 语句。MyBatis 提供了四种类型的 Executor,每种 Executor 在执行 SQL 和处理事务方…

100小时学会SAP—问题10:ME51N提示物料XX的强制账户设置(输入账户设置类别)

100小时学会SAP—问题10:ME51N提示物料XX的强制账户设置(输入账户设置类别)执行事务码ME51N时,报错如下:物料XXXXXX的强制账户设置(输入账户设置类别)解决方法:SPRO-后勤常规-物料主数据-基本设置-物料类型-定义…

P8990 [北大集训 2021] 小明的树 题解

QwQP8990 [北大集训 2021] 小明的树 题解 首先刻画 “美丽”,考虑灭点,由于 1 始终灭,所以形如一个包含 1 的连通块,灭点连通块数量要为 1。 因为要刻画连通块数量,考虑点减边容斥,即连通块个数是灭点个数减 “灭…

100小时学会SAP—问题11:MIGO收货时报错不可能为条目BSX CN01确立账户

100小时学会SAP—问题11:MIGO收货时报错不可能为条目BSX CN01确立账户执行事务码MIGO收货时,报错如下:不可能为条目BSX CN01确立账户。解决方法: 1、首先按照100小时学会SAP步骤配置(在用MMR1、MMF1事务码创建物料…

【动态维护前 x 大元素】LeetCode 3321. 计算子数组的 x-sum II

View Post【动态维护前 x 大元素】LeetCode 3321. 计算子数组的 x-sum II题目 https://leetcode.cn/problems/find-x-sum-of-all-k-long-subarrays-ii/description/ 题解 定义两个有序集合 \(L, R\) 动态维护数组前 \(…

100小时学会SAP—问题8:财务凭证行项目BSEG及对应的六张表

100小时学会SAP—问题8:财务凭证行项目BSEG及对应的六张表FI会计模块中输入一笔业务将会记一个财务凭证,SAP系统中将凭证信息分为抬头信息和明细信息两部分加以存储。其中抬头(Header)信息存储在透明表BKPF中,明细(…

100小时学会SAP—问题9:MD03提示日期在有效工厂日历之后(请改正)

100小时学会SAP—问题9:MD03提示日期在有效工厂日历之后(请改正)执行事务码MD03时,报错如下:提示日期在有效工厂日历之后(请改正)解决方法:这是因为在创建工厂数据的时候工厂的日期没有更改造成的。 路径为:SP…

100小时学会SAP—问题6:创建采购收货时出现WE在年2025中编号不存在

100小时学会SAP—问题6:创建采购收货时出现WE在年2025中编号不存在前台 后勤—物料管理—库存管理—货物移动—收货—对采购订单—采购订单GR(MIGO) 报了如下错误:有关业务/事件类型WE在年2025的号码范围不存在解决…

100小时学会SAP—问题7:FB70提示过账码没有定义

100小时学会SAP—问题7:FB70提示过账码没有定义执行事务码FB70时,报错如下:Posting keys not defined原因:在文档“0528—FB70运行时提示在表T030B中AGD输入丢失”中,解决方法错误,其中的PK码自己瞎填,导致错误…