首页
社区
课程
招聘
[讨论][讨论]分析某个过机器码的驱动文件1
发表于: 2023-11-4 20:17 11463

[讨论][讨论]分析某个过机器码的驱动文件1

2023-11-4 20:17
11463

图片描述
图片描述
第一个call进去
图片描述
往下拉
图片描述
图片描述
图片描述
可知程序无任何保护,程序是依靠驱动来达到修改机器码的目的。通过下断很容易提取这三个sys文件

图片描述
分析first.sys

图片描述

我电脑系统版本21h2,第一个call实现的方法无效,原因是某个函数的特征码搜不到.
暂时放弃,来分析第二个call
图片描述
分析第一个call
图片描述
用到了ZwQuerySystemInformation,参数SystemModuleInformation
则为遍历内核模块,
图片描述
易得a2为storport.sys的内核起始地址,a3为storport.sys的模块大小
图片描述

返回,这个call是打印输出的
图片描述
图片描述
分析下一个
图片描述

第一个参数为storport.sys的内核起始地址,第二个是个全局变量,
我们看一下这个全局变量是什么
图片描述
看不出来,转成代码试试,
图片描述
很像函数头部的汇编代码,
根据后面第三个参数,推断这个函数应该是通过暴力枚举特征码的方式搜索storport.sys的某个函数地址
进这个call分析
图片描述

图片描述
校验storport.sys的PE有效性
图片描述
根据PE特性,拿到代码段以及PAGE段,因为函数一般都在这些段里
图片描述

第一个参数为代码段或page段的真正起始地址,第二个为这个代码段或PAGE段的大小,第三个参数为特征码,第四个参数为通配符(第三,第四对应sub_1400013C0的第二参数,第三参数)
图片描述

再分析sub_140001344

图片描述

在分析sub_1400016A8
图片描述
如果a3也就是通配符里面的值是空的那就是返回1

图片描述
返回1导致这边这个while不运行了,无法遍历,所以这个特征码搜索应该是写的有点毛病,必须带通配符才能搜索,但具体情况具体分析,很显然这里的a3里面是有值的,
图片描述
因为v5为char[],所以
v5[4]=a1,v5[v6]=a3,这里不知道是不是编译器没优化好还是写法有问题。这里好好理解就知道为什么是特征码搜索了。
图片描述

返回
前面的几部操作是获取storport.sys里某个函数的地址,后面的操作要用到这个函数。IoGetDeviceObjectPointer的用法是根据设备名字获得设备地址,DestinationString由SourceString得到, sub_140001E00和 sub_140001000就是对SourceString进行初始化操作
图片描述


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 1
支持
分享
最新回复 (7)
雪    币: 3059
活跃值: (30876)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
感谢分享
2023-11-4 21:57
1
雪    币: 3297
活跃值: (5395)
能力值: ( LV6,RANK:92 )
在线值:
发帖
回帖
粉丝
3
https://github.com/SamuelTulach/mutante
2023-11-5 00:55
0
雪    币: 7345
活跃值: (4547)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
感谢分享
2023-11-5 06:24
0
雪    币: 1282
活跃值: (4555)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
5
0x10101010....那个是memset
2023-11-5 09:12
0
雪    币: 1532
活跃值: (4588)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
6
0xC5 https://github.com/SamuelTulach/mutante 请
好的有空再研究研究
2023-11-5 13:37
0
雪    币: 1532
活跃值: (4588)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
7
R0g 0x10101010....那个是memset
我再看看·
2023-11-5 13:37
0
雪    币: 6497
活跃值: (2372)
能力值: ( LV12,RANK:320 )
在线值:
发帖
回帖
粉丝
8
楼主分析得很仔细,赞个!
2024-8-3 10:19
0
游客
登录 | 注册 方可回帖
返回
//