精易论坛

标题: (内核级)修改物理虚拟网卡MAC地址 [打印本页]

作者: 雨过天晴    时间: 2024-4-16 05:38
标题: (内核级)修改物理虚拟网卡MAC地址
本帖最后由 雨过天晴 于 2024-4-16 23:25 编辑

首先,不要问我有什么用这个问题很无聊。开发语言实现原理
通过对内核层ndis,netio 的虚函数HOOK 实现的最接近底层获取实现的劫持。
技术解释
r3层要获取mac无论使用什么方法最终进入内核态只有NtDeviceIoControlFile函数。
其中微软封装的获取mac函数只有iphlpapi模块,另外也可以通过NtDeviceIoControlFile 的
IOCTL_NDIS_QUERY_GLOBAL_STATS操作码得到mac。
在NtDeviceIoControlFile 进入内核态后会通过irp派遣执行nsiproxy-netio-ndis,最终由ndis从已经加载在内核的网卡驱动设备列表枚举出已经开系统启动时加载到内存的mac值,最后依次返回到应用层。
这里要说明的是IOCTL_NDIS_QUERY_GLOBAL_STATS 可以返回的是  8字节的mac地址 和 0x104字节的mac 地址和一些网卡信息
通过irphook很好实现对IOCTL_NDIS_QUERY_GLOBAL_STATS 获取的内容篡改。
而iphlpapi获取的有两种,一种是SendARP ,另外一种 GetAdaptersInfo。GetAdaptersInfo进入irp后也是经过nsiproxy-netio-ndis最后去调用ndisNsiEnumerateAllInterfaceInformation内核函数。
它是一次性完成的,ndisNsiEnumerateAllInterfaceInformation会返回所有网卡的所有信息。

开发起因
之前分析过一个某大厂的驱动文件,其后来使用的内核HOOK技术,堪称神龙不见首尾。排除使用虚拟化技术后,几乎把整个内核翻烂了都看不见他挂钩的痕迹,并且在它有可能执行的函数完全没有发现它的任何调用,我很郁闷,研究了有2个多月。在研究过程中发现内核很多可以挂钩的地方,现在开源的就是其中一种。除了ntoskrnl灯下黑较少之外,其他相关对硬件操作(如网卡 硬盘 等外设驱动)几乎到处可以HOOK,当然,这些核心驱动也是在PG的监视下的,但是他们有很多空间可以对其进行魔改。在我上诉困扰的研究期间,光对文件系统的HOOK 在内核层中都发现了不下十处不被PG监视的可挂钩区域。

使用方法
易语言的调用源码、驱动源码和成品都打包在压缩包中,安装驱动后点修改即可。
特殊说明
由于是从完整工程里面临时拆分出来的,所以源码比较乱。
在win10测试正常,7系统可能需要修改wdk重新编译驱动
[attach]1312729[/attach]

在对IOCTL_NDIS_QUERY_GLOBAL_STATS处理部分,之前上传的,这一部分代码是从吾爱破解论坛开源的代码申引过来的,源码中和原贴也有注明该部分是转载,但是没想到原贴作者很不大度,于是将其部分完全删除!
开源的原因纯属知识共享,因此,我花了五分钟时间找了个更加优秀简单的HOOK位置,让使用易语言的朋友也能了解这一部分实现过程,以下详细解析上述2种挂钩位置的摸索经过。

1.ndisNsiEnumerateAllInterfaceInformation
这一部分底层函数主要是由iphlpapi模块调用,最终进入内核过程是nsiproxy-netio-ndis,本源码中对netio模块进行hook,挂钩其虚函数。
在跟踪这一系列签派时发现,最终实现是从netio进入 NsiEnumerateObjectsAllParametersEx进入的ndis模块,而netio是最后一给拥有虚函数指针的模块,所有我们将在这里挂钩。
我们在使用IDA 分析的时候,发现函数首中有一段NsiNmpList,网卡设备列表的数据结构数组
-1.jpg
并且向下跟踪后,会发现是从  v81 = (*((__int64 (__fastcall **)(__int128 *))v23 + 8))(v102); 这里进入实现call(这里便是我提到的虚函数。

-2.jpg

于是我们只需要获取到NsiNmpList这个指针地址,如同伪代码一样枚举,而后修改这个函数的指针便能实现HOOK,详情源码所示。
在这个函数的回调过程中会得到一个
                struct iphl
                {
                        ULONG64 x3;
                        ULONG64 x4;
                        ULONG64 x5;
                        ULONG64 x6;
                        ULONG64 x7;
                        ULONG64 x8;
                        ULONG64 x9;
                        PCHAR  macData;
                        SIZE_T  macBuffsize;
                        PCHAR  NetData;
                        SIZE_T  NetBuffsize;
                        SIZE_T  Count;
                };
如此结构的数组,依次遍历修改macData 便可实现修改效果。

2.IOCTL_NDIS_QUERY_GLOBAL_STATS
由于借鉴的原作者这一部分不允许引用他的代码否则会发生诉讼,所以我重新找了一份更加简单的挂钩方法,代码量只有原来的十分之一。
我们在ida对ndis进行反编译 ,直接搜索IOCTL_NDIS_QUERY_GLOBAL_STATS操作码0x170002后会到达如下代码段。


2.jpg
3.jpg

在单步跟踪后我们发现,mac是由ndisQueryDeviceOid这个函数返回出来的,我们在ndisQueryDeviceOid这个函数,对返回的地址下写入硬件断点,最终达到如下位置。
5.jpg



我返回上一层地址,发现这里是一个虚函数,那么操作空间就来了

1.jpg

在我们自己手打计算出这个虚函数地址 回调函数直接复制原函数的伪代码便能实现IOCTL_NDIS_QUERY_GLOBAL_STATS操作码的HOOK
4.jpg


IOCTL_NDIS_QUERY_GLOBAL_STATS 一般是用于DeviceIoControl主动通讯获取mac 或者wmi的获取mac会在这里实现,在我的测试源码中易语言也写有这部分。
mac.rar (1.95 MB, 下载次数: 809)




作者: 爱易编程    时间: 2024-4-16 08:10
曲高和寡 应该是好东西啊!
作者: 李泽勇2    时间: 2024-4-16 08:13
感谢分享
作者: ljx111    时间: 2024-4-16 08:55
感谢分享~~~~~~~~~~~
作者: 小虎来了    时间: 2024-4-16 09:03
谢谢分享
作者: BugePro    时间: 2024-4-16 09:05
感谢分享
作者: 朱尧    时间: 2024-4-16 09:11
#在这里快速回复##在这里快速回复#
作者: 无名霸道    时间: 2024-4-16 09:18
666666666666666666666666666666
作者: 小虎来了    时间: 2024-4-16 09:19
谢谢分享
作者: zuoyang    时间: 2024-4-16 09:20
驱动调用??
作者: ctry78985    时间: 2024-4-16 09:35
谢谢分享
作者: tcf13246    时间: 2024-4-16 10:43
学习了学习了学习了
作者: tcf13246    时间: 2024-4-16 10:43
学习了学习了学习了学习了
作者: fengyyun    时间: 2024-4-16 11:34
谢谢分享

作者: xiaopingwangluo    时间: 2024-4-16 12:20
拿走了, 感谢分享.
作者: xiaoxiao2    时间: 2024-4-16 12:47
不需要禁用启动网卡生效吗?
作者: 学而容易    时间: 2024-4-16 13:09
VX图片_20240416130844.png
我本机读的正常,虚拟机里读出来就是这样

作者: 学而容易    时间: 2024-4-16 13:13
虚拟机win10 测试修改没效果 物理机在做服务器没测试
作者: qqmqqg    时间: 2024-4-16 13:37
666666666666666
作者: 菜就多多练    时间: 2024-4-16 14:51
开源精神必须支持~
作者: ZHuanR    时间: 2024-4-16 14:55
新技能已get√
作者: 一指温柔    时间: 2024-4-16 15:07
谢谢分享
作者: lm88818    时间: 2024-4-16 15:35
支持开源~!感谢分享
作者: 雨过天晴    时间: 2024-4-16 15:40
学而容易 发表于 2024-4-16 13:09
我本机读的正常,虚拟机里读出来就是这样

什么系统版本?
作者: 大司命    时间: 2024-4-16 15:47
1713253615569.png

什么情况!?举报理由属实吗!?

作者: 雨过天晴    时间: 2024-4-16 19:39
大司命 发表于 2024-4-16 15:47
什么情况!?举报理由属实吗!?

那人的源码我全部删掉了给我改回来
作者: aa2976    时间: 2024-4-16 23:14
感谢分享
作者: 396384183    时间: 2024-4-17 09:13
感谢分享
作者: dj1990    时间: 2024-4-17 09:17

感谢分享
作者: 1015441689    时间: 2024-4-17 09:26
支持开源~!感谢分享
作者: 这就是爱情    时间: 2024-4-17 09:48
支持开源~!感谢分享

作者: 这就是爱情    时间: 2024-4-17 09:53
论坛杂回事,下载文件下不来,还正常扣费。。。
作者: 一指温柔    时间: 2024-4-17 10:03
感谢分享,很给力!~
作者: 447485268    时间: 2024-4-17 11:25
支持开源~!感谢分享
作者: jia201314973    时间: 2024-4-17 15:12

作者: bianyuan456    时间: 2024-4-17 17:44
已经顶贴,感谢您对论坛的支持!
作者: 站在月光下想你    时间: 2024-4-17 21:47
这个修改MAC重启一次电脑就又还原了吧?
作者: ZJ3120    时间: 2024-4-17 23:20
支持开源~!感谢分享
作者: tcf13246    时间: 2024-4-17 23:21
感谢分享!!!!
作者: tcf13246    时间: 2024-4-17 23:22
感谢分享!!!!
作者: ctry78985    时间: 2024-4-18 07:11
感谢分享
作者: 龍貓    时间: 2024-4-18 07:51
楼主坚持不懈的精神值得我们学习。
作者: hyz5203344    时间: 2024-4-18 08:19
感谢分享
作者: 虚无の世界    时间: 2024-4-18 09:46
好东西,感谢分享
作者: wlsk888    时间: 2024-4-18 10:41
谢谢分享
作者: 一指温柔    时间: 2024-4-18 10:42
支持开源~!感谢分享
作者: heckvo    时间: 2024-4-18 16:08
能搞内核驱动的都是大佬
作者: CLO2060    时间: 2024-4-18 19:24
感谢大佬分享!
作者: hyz5203344    时间: 2024-4-18 20:36
开源精神必须支持~
作者: mxsf梦醒时分    时间: 2024-4-18 21:31
开源精神必须支持~

作者: mgfz    时间: 2024-4-18 21:47
太强了。
作者: xuehoo    时间: 2024-4-18 21:50
看看学习
作者: 鱼雨遇玉羽    时间: 2024-4-18 23:27
666支持一下
作者: aosheng    时间: 2024-4-19 07:43
66666666666666666666666666666666666
作者: 1043603367    时间: 2024-4-19 09:00
虽然不知道你在说什么,但是好牛逼的样子
作者: 网络注册网员    时间: 2024-4-19 18:47
感谢分享,很给力
作者: 鑫豪学    时间: 2024-4-20 09:05
这么强的吗膜拜
作者: yesjingyi    时间: 2024-4-20 09:13
太强了。
作者: a7603    时间: 2024-4-20 19:10
11111111111111
作者: 770345278    时间: 2024-4-21 00:16
太牛逼了
作者: yang2755    时间: 2024-4-21 10:18
驱动加载-1
作者: hello0719    时间: 2024-4-21 10:30

我也是,驱动安装失败
作者: lmwdz    时间: 2024-4-21 17:42
下个学习一下
作者: 土匪668    时间: 2024-4-21 19:08
6666666666谢谢分享
作者: yjshcel    时间: 2024-4-21 20:09
6666666666666666666666666666666
作者: 285376253    时间: 2024-4-22 09:02

作者: 金叶    时间: 2024-4-22 09:24
楼主坚持不懈的精神值得我们学习
作者: 风林听雨    时间: 2024-4-22 09:36
感谢分享,很给力!~
作者: debug001    时间: 2024-4-22 10:02
感谢分享,很给力
作者: ppppzj    时间: 2024-4-22 10:28
        感谢分享,很给力!~

作者: yuxuanju    时间: 2024-4-22 17:07
太复杂了,学不会啊。
作者: guansidong    时间: 2024-4-24 05:55
谢谢分享
作者: cwgwww    时间: 2024-4-25 16:44
感谢分享,很给力!~
作者: yy750446    时间: 2024-4-25 17:42
楼主坚持不懈的精神值得我们学习。   
作者: xjbxxx    时间: 2024-4-27 14:49
这是好东西啊,谢谢
作者: xjbxxx    时间: 2024-4-27 14:53
精神值得我们学习
作者: 1119824074    时间: 2024-4-27 21:00
学习一下
作者: 北城美男子    时间: 2024-4-28 13:04
win11 没有效果
作者: ddsad    时间: 2024-5-2 09:52
安装驱动失败
作者: 北城美男子    时间: 2024-5-4 10:28
本帖最后由 北城美男子 于 2024-5-4 10:29 编辑

@雨过天晴 大佬 可以修复一下win11 加载没效果吗,换了驱动签名 加载也成功 但是修改没有效果。
作者: wdjyltzh01    时间: 2024-5-6 22:50

感谢分享,很给力!~
作者: jumengai    时间: 2024-5-10 22:21
谢谢谢谢
作者: jumengai    时间: 2024-5-10 22:26
安装驱动失败 返回-1
作者: 1600402543    时间: 2024-5-18 15:32
牛逼!!!!!!!!!!
作者: xia3422    时间: 2024-6-3 09:38
打包成品下载地址回复可见
作者: abnerll    时间: 2024-6-3 10:13
感谢分享
作者: propc    时间: 2024-6-6 16:01
不能用,浪费了两个币~~  
作者: 214928zxp    时间: 2024-6-7 15:48
好东西要看看
作者: 214928zxp    时间: 2024-6-7 15:58
win7 不能用吗?安装驱动就蓝屏
作者: 编程辉煌    时间: 2024-6-10 11:36
开源精神值得学习
作者: yapiing    时间: 2024-6-17 06:02
66666666666666
作者: wgqxj    时间: 2024-6-29 11:58
谢谢分享
作者: perfectmyt    时间: 2024-6-29 20:14
太棒了,牛
作者: 1760831266    时间: 2024-7-11 12:14
看下还有没有内容
作者: wuyunsen    时间: 2024-7-12 18:06
好东西 感谢作者无私分享
作者: Ghostlu    时间: 2024-7-30 10:40
牛B,支持开源
作者: jcbimmfgn1    时间: 2024-7-30 11:47
牛B,支持开源
作者: RoLin    时间: 2024-8-14 12:21
大佬牛啊
作者: zhou1783    时间: 2024-8-15 15:02
谢谢大佬
作者: andyzhang182    时间: 2024-8-23 21:12
有调用例程就更好了,谢谢分享!




欢迎光临 精易论坛 (https://bbs.ijingyi.com/) Powered by Discuz! X3.4