ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

MBR病毒IDA逆向分析与重写内容解读

2022-08-26 23:33:52  阅读:161  来源: 互联网

标签:字符 函数 关机 int 重写 loc MBR IDA


1 运行病毒

拍摄快照

img

运行病毒,直接关机

img

重启后出现下面的页面

img

输入任意字符,回车后会清空

img

可以知道,该病毒破坏了windows的启动过程,要进入系统必须输入正确的口令,该病毒属于MBR病毒的类型

2 基础知识

硬盘的主引导区在0柱面0磁道1扇区,包括硬盘主引导记录MBR(Main Boot Record)、四个分区表DPT(Disk Partition Table)信息和主引导记录有效标志字三部分,如表所示:

0000-0088 Master Boot Record主引导程序 主引导程序 0089-01BD 出错信息数据区 数据区 01BE-01CD 分区项1(16字节) 分区表 01CE-01DD 分区项2(16字节) 01DE-01ED 分区项3(16字节) 01EE-01FD 分区项4(16字节) 01FE 55 结束标志 01FF AA

主引导记录MBR从0000H开始到00D9H结束,共218个字节。MBR的作用就是检查分区表是否正确以及确定哪个分区为引导分区,并在程序结束时把该分区的启动程序(也就是操作系统引导扇区)调入内存加以执行。MBR是由分区程序(例如DOS 的Fdisk.exe)产生的,在不同的操作系统平台下,这个扇区的内容可能不完全相同。

3 猜解口令

恢复快照到运行病毒前

如果要找到开机口令那应该是非常的容易,将病毒拖入x32dbg,进行字符串搜索就可以锁定这个特殊的字符串,猜测其为口令

img

4 逆向分析

下面逆向分析病毒原理

首先使用Exeinfo PE查壳,发现无壳

img

IDA中查看汇编指令,发现并没有很多识别不出来的红色语句,所以并没有花指令,到此可以知道病毒并没有保护

img

既然涉及到关机,那么在windows系统下一定涉及到关机的API函数,经过查阅资料,可以找到

img

查找字符串

img

找到关机API位置

img

查看其反编译代码

img

向上找到sub_4456D0函数

img

查看函数内容

img

找到当前进程伪句柄函数GetCurrentProcess、取得程序访问标记函数OpenProcessToken、查找进程权限函数LookupPrivilegeValue、获得关机权限函数AdjustTokenPrivileges,其作用为为关机做好提权

回到关机函数sub_4455E0,交叉引用向上查询

img

img

img

在这个函数中我们会发现关机函数的上面有两个一样的函数,其参数不一样

img

结合之前字符串搜索中发现的本机电脑磁盘标识符,因此可以猜测是完成了MBR的读写操作

img

在病毒感染前使用winhex查看磁盘的MBR

img

找到关机函数的地址,在X32dbg调试中设置断点,然后运行

img

img

再次查看MBR,发现被修改

img

5 重写内容分析

粘贴至新文件,导出MBR被重写的数据

img

将其拖入IDA进行反汇编分析

注意选择no,引导程序为16位

img

5.1 int 10h中断——屏幕显示

首先 int 10中断,这是BIOS对系统屏幕显示器所提供的服务程序,调用int 10h中断来控制显示器的显示控制显示器的显示

其中ES:BP是字符串地址,即00C2

img

cx是14h,即串的长度为22字节

因此确定了开始屏幕上显示的**qq-17412666**

AH = 13,功能号,表示显示字符串

BH表示页号

DH DL表示起始行列

img

5.2 int 16h中断——键盘读入

等待键盘键入字符,其中al代表键盘输入的字符

img

5.3 第一次int 13h中断——密钥比较

下面是从扇区写入内存的中断操作,我们逐步探讨

img

首先涉及到字符的比较,8对应的ASCII码是退格,如果检测到退格键则会跳转到loc_46

img

我们看一下loc_46的内容,属于是清空操作,与退格键的功能对应

img

第二次比较是与0Dh对应的ASCII码回车的比较,如果用户输入完毕进行了回车的话,那么就会跳转到loc_52

img

我们看一下loc_52的内容,一个段寄存器的转换,然后清空bx,继续进行下面的操作

img

若不是退格和回车键的话,就继续存入字符,[bx]存入键盘输入的字符,然后地址+2,cx记录输入字符的个数

img

下面将注意力集中在回车之后的操作

loc_58这里给si写入了一个很重要的地址

img

其正好是以下字符串的初始地址

img

下面就开始字符的比较,al是键盘输入的字符,ah是上面的字符串中的逐个字符,如果不相等的话会跳转到loc_9C进行出错处理;每个字符如果比较完成,就会取下一个字符继续比较,完成循环,loop循环次数由cx决定,即我们输入的字符的数量

img

再往下是为中断做参数准备

img

所以,按照上面的分析,我们只要将输入的字符与d8h地址开始的字符逐一比较,这就是口令

5.4 第二次int 13h中断——MBR写回

img

从内存将MBR写入扇区

6 遇到的问题

输入我们分析的口令之后并没有进入系统,而是出现了下面的情况,卡死在下面的页面,这个问题到现在还没有解决

img

和同学讨论发现,XP虚拟机不会存在这样的问题,可能是win7的引导与xp有区别导致的

标签:字符,函数,关机,int,重写,loc,MBR,IDA
来源: https://www.cnblogs.com/yuxiaohan1236/p/16629534.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有