恶意代码分析实战 第十六章课后实验

2024-02-07 21:08

本文主要是介绍恶意代码分析实战 第十六章课后实验,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

先来整体分析一下,

整体看一下发现很多地方都调用了函数  sub_401000,也出现了很多fs:30h。下面分析一下函数sub_401000:

 

在这里可以看到一个_exit,也就是离开,还调用了函数ShellExecuteA,我们可以使用OD来分析一下,使用OD跳转到地址004010DE,然后下个断点,执行一下:

在堆栈窗口可以看到这里调用了cmd和一个del来进行自我删除。那么就可以推测这是一个不断进行验证的程序,只要有哪一次验证不成功程序就会退出。

下面分析一下第一处验证:

这里判断了PEB结构中的BeingDebugged是否为0 ,若是0程序正常向下执行,若不是则调用函数sub_401000退出。

下面继续向下分析:

这里查看了processheap的forceflag标志,值为0则说明没有在调试状态,

这里查看了NTGlobalFlag,值为70h则表示是调试状态。

问题1:

恶意程序通过检查PEB中的BeingDebugged、ProcessHeap以及NtGlobalFlag标志的值,来判断自己是否处于调试状态。

问题2:

删除自身并终止运行。

问题3:

可以使用OD中的PhantOm插件。

问题4:

在OD中进行修改。

问题5:

PhantOm插件。

问题1:

发现要求输入4个字符。

问题2:

随便输入了4个字符,提示为错误的密码,再试一次。

问题3:

byrr(经过最后的分析可知)

问题4:

在地址40123A处调用了函数_strncmp。

问题5:

将实验文件Lab16-02.exe载入到OD:

运行发现程序停留在了retn的位置。

问题6:

使用peid查看实验文件Lab16-02.exe

这里发现了.tls区段,表示这个程序很有可能使用了反调试技术。

问题7:

回到ida,使用快捷键Ctrl+E:

可以看到这个回调函数就在401060位置。

问题8:

我们来到回调函数的位置:

回调函数一开始就将arg_4与1进行比较,说明反调试技术仅仅在程序启动过程中被执行,下面程序调用了函数FindWindowA,用来查看窗口是否有类名为OLLYDBG的窗口。我们可以使用插件PhantOm来对抗这种反调试技术。

问题9:

使用OD,在文件处选择打开文件,输入asdf

单击打开,然后跳转到地址40123A位置,F2,运行一下发现:

可以看到将asdf与byrrp@ss比较,比较前4个字节的内容,密码就有可能是byrr。

问题10:

可以看到密码就是byrr。

问题1:

使用strings打开实验文件Lab16-03.exe:

发现了cmd以及cmd.exe,还有一大串的API函数。

问题2:

运行实验文件Lab16-03.exe发现了一闪而过的cmd窗口,之后就没有什么了。

问题3:

使用ida载入实验文件Lab16-03.exe,来到main函数的位置,发现了一连串的字符入栈操作,使用快捷键R来将其进行转化:

恶意程序分别创建了两个字符创“1qbz2wsx3edc”和“ocl.exe”

后面程序又调用了函数  _strncmp,使用OD查看,将断点停留在401518,运行,

发现将文件名与qgr.exe比较。

将文件名改为qgr.exe运行后依然没有什么发现,说明这个是错的。

继续分析:

使用OD来到401286位置,把401292位置的语句用nop填充掉,

然后保存这个打过补丁的程序。

 

利用OD打开这个打过补丁的程序,来到401518位置查看,可以看到这里将peo.exe与qgr.exe进行了比较

 

peo.exe就是正确的文件名。

问题4:

分析一下函数QueryPerformanceCounter

利用OD结合ida分析可知这两条语句的作用就是获取当前EIP的值,并将其保存到eax寄存器中。后面程序会将401254入栈。后面程序会引发一个除零异常,来调用401254处的语句,其实就是删除异常处理的例程。其实这样我们就知道了,运行在调试器中的程序会花费较多的时间来进行异常的处理。通过这个时间差,于是就能够判定当前程序是否运行在调试器中了。

在main函数的位置发现了GetTickCount的调用,分析一下:

使用OD在401584处下断点运行直接报错终止了,回到ida:

这里两次调用了函数GetTickCount。还出现了sub_401000函数的调用。双击进入发现,这里再次出现了除零异常。接下来会比较两次计时的差值是不是等于1毫秒,如果超出了1毫秒,就会执行eax的异或指令,之后将edx中的内容保存到地址为0的内存空间中,那么这显然是一个非法操作,因此程序就会崩溃。为了修正这个位置,可以将0x004015B2到0x004015B6位置的语句全都nop掉。

继续分析:

这里调用了函数sub_401300,双击进去看一下:

这个指令计算的是系统启动以来的时钟数。恶意程序使用两个rdtsc指令的目的在于计算二者的差值,而在这两处指令中间,又是一个除零异常。时间差会保存在var_4中,并与0x7A120进行比较,如果时间差超过这个值,就会执行sub_4010E0函数。该函数的作用在于删除恶意程序自身。那么我们可以在OD中将这里的call语句nop掉,就能够对抗这种反调试技术了。

一共使用三种反调试技术,原理都是利用时间差值。

问题5:

1,如果QueryPerformanceCounter检查成功,恶意程序会修改它正常运行所需的字符串;

2,如果GetTickCount检查成功,恶意程序会产生一个导致程序崩溃的异常;

3,,如果rdtsc检查成功,恶意程序会从硬盘上删除自身。

问题6:

在两个计时函数调用之间,加入了恶意程序自己的异常处理例程,这样它就可以捕获一个它处理的异常。异常在调试器内处理比在调试器外处理慢得多。所以呢就能成功了。

问题7:

使用OD在4015DB下断点运行程序就可以看到域名了:

adg.malwareanalsysisbook.com。

这篇关于恶意代码分析实战 第十六章课后实验的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/688934

相关文章

网页解析 lxml 库--实战

lxml库使用流程 lxml 是 Python 的第三方解析库,完全使用 Python 语言编写,它对 XPath表达式提供了良好的支 持,因此能够了高效地解析 HTML/XML 文档。本节讲解如何通过 lxml 库解析 HTML 文档。 pip install lxml lxm| 库提供了一个 etree 模块,该模块专门用来解析 HTML/XML 文档,下面来介绍一下 lxml 库

性能分析之MySQL索引实战案例

文章目录 一、前言二、准备三、MySQL索引优化四、MySQL 索引知识回顾五、总结 一、前言 在上一讲性能工具之 JProfiler 简单登录案例分析实战中已经发现SQL没有建立索引问题,本文将一起从代码层去分析为什么没有建立索引? 开源ERP项目地址:https://gitee.com/jishenghua/JSH_ERP 二、准备 打开IDEA找到登录请求资源路径位置

C#实战|大乐透选号器[6]:实现实时显示已选择的红蓝球数量

哈喽,你好啊,我是雷工。 关于大乐透选号器在前面已经记录了5篇笔记,这是第6篇; 接下来实现实时显示当前选中红球数量,蓝球数量; 以下为练习笔记。 01 效果演示 当选择和取消选择红球或蓝球时,在对应的位置显示实时已选择的红球、蓝球的数量; 02 标签名称 分别设置Label标签名称为:lblRedCount、lblBlueCount

滚雪球学Java(87):Java事务处理:JDBC的ACID属性与实战技巧!真有两下子!

咦咦咦,各位小可爱,我是你们的好伙伴——bug菌,今天又来给大家普及Java SE啦,别躲起来啊,听我讲干货还不快点赞,赞多了我就有动力讲得更嗨啦!所以呀,养成先点赞后阅读的好习惯,别被干货淹没了哦~ 🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,助你一臂之力,带你早日登顶🚀,欢迎大家关注&&收藏!持续更新中,up!up!up!! 环境说明:Windows 10

SWAP作物生长模型安装教程、数据制备、敏感性分析、气候变化影响、R模型敏感性分析与贝叶斯优化、Fortran源代码分析、气候数据降尺度与变化影响分析

查看原文>>>全流程SWAP农业模型数据制备、敏感性分析及气候变化影响实践技术应用 SWAP模型是由荷兰瓦赫宁根大学开发的先进农作物模型,它综合考虑了土壤-水分-大气以及植被间的相互作用;是一种描述作物生长过程的一种机理性作物生长模型。它不但运用Richard方程,使其能够精确的模拟土壤中水分的运动,而且耦合了WOFOST作物模型使作物的生长描述更为科学。 本文让更多的科研人员和农业工作者

MOLE 2.5 分析分子通道和孔隙

软件介绍 生物大分子通道和孔隙在生物学中发挥着重要作用,例如在分子识别和酶底物特异性方面。 我们介绍了一种名为 MOLE 2.5 的高级软件工具,该工具旨在分析分子通道和孔隙。 与其他可用软件工具的基准测试表明,MOLE 2.5 相比更快、更强大、功能更丰富。作为一项新功能,MOLE 2.5 可以估算已识别通道的物理化学性质。 软件下载 https://pan.quark.cn/s/57

衡石分析平台使用手册-单机安装及启动

单机安装及启动​ 本文讲述如何在单机环境下进行 HENGSHI SENSE 安装的操作过程。 在安装前请确认网络环境,如果是隔离环境,无法连接互联网时,请先按照 离线环境安装依赖的指导进行依赖包的安装,然后按照本文的指导继续操作。如果网络环境可以连接互联网,请直接按照本文的指导进行安装。 准备工作​ 请参考安装环境文档准备安装环境。 配置用户与安装目录。 在操作前请检查您是否有 sud

线性因子模型 - 独立分量分析(ICA)篇

序言 线性因子模型是数据分析与机器学习中的一类重要模型,它们通过引入潜变量( latent variables \text{latent variables} latent variables)来更好地表征数据。其中,独立分量分析( ICA \text{ICA} ICA)作为线性因子模型的一种,以其独特的视角和广泛的应用领域而备受关注。 ICA \text{ICA} ICA旨在将观察到的复杂信号

【软考】希尔排序算法分析

目录 1. c代码2. 运行截图3. 运行解析 1. c代码 #include <stdio.h>#include <stdlib.h> void shellSort(int data[], int n){// 划分的数组,例如8个数则为[4, 2, 1]int *delta;int k;// i控制delta的轮次int i;// 临时变量,换值int temp;in

三相直流无刷电机(BLDC)控制算法实现:BLDC有感启动算法思路分析

一枚从事路径规划算法、运动控制算法、BLDC/FOC电机控制算法、工控、物联网工程师,爱吃土豆。如有需要技术交流或者需要方案帮助、需求:以下为联系方式—V 方案1:通过霍尔传感器IO中断触发换相 1.1 整体执行思路 霍尔传感器U、V、W三相通过IO+EXIT中断的方式进行霍尔传感器数据的读取。将IO口配置为上升沿+下降沿中断触发的方式。当霍尔传感器信号发生发生信号的变化就会触发中断在中断