最近,一个朋友向我咨询如何在虚拟机上使用某个软件,初步沟通发现,该软件对应的授权是与网卡的mac地址绑定的,而在云厂商的虚拟机不提供定制网卡mac地址的功能,因此无法使用,因此便向我咨询下有没有什么绕过限制的办法。 理论上技术大拿们第一反应就是改软件的授权,把绑定的mac改为对应的网卡mac,或者直接改软件,绕过授权逻辑。但是这次我想更彻底一点,如果每次遇到类似问题就改软件,工作量太大,如果可以修改mac地址为指定mac,不是也可以绕过限制进行使用了,所以这次就尝试研究一下修改机器mac地址的方法。
当前市面上的云厂商除了少数厂商(例如巨硬)外,大部分是使用社区版或基于社区版的自维护virtio-win驱动,其中对应的网卡驱动是netkvm。因此我专门耗费巨资(一个疯狂星期四没有了。。。)在某个云厂商上申请了windows虚拟机进行测试。为避免麻烦,厂商名称和驱动版本不再详述,但是考虑到国内厂商的尿性,我认为这方面的逻辑应该是一致的(起码我在社区看到国内技术人员的commit是没有包含这部分逻辑修改的,希望是藏着了。。。)。 参考微软链接:122K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6D9k6h3q4J5L8W2)9J5k6h3#2A6j5%4u0G2M7$3!0X3N6q4)9J5k6h3y4G2L8g2)9J5c8X3g2F1i4K6u0V1N6i4y4Q4x3V1k6S2L8Y4y4%4k6i4u0K6i4K6u0r3M7i4g2W2M7%4c8A6L8$3&6K6i4K6u0r3y4K6p5I4x3e0x3I4i4K6u0r3j5$3S2S2L8X3N6A6L8X3N6Q4x3X3c8E0j5h3y4Q4x3X3c8S2k6r3c8J5k6i4y4K6i4K6u0V1N6$3W2@1K9r3!0#2N6q4)9J5k6s2g2K6K9h3&6Y4i4K6u0V1N6r3S2A6M7X3c8Q4x3X3c8H3j5i4u0@1P5g2)9J5k6r3q4H3M7q4!0q4c8W2!0n7b7#2)9^5b7#2!0q4y4q4!0n7z5q4)9^5x3q4!0q4z5q4)9^5z5q4!0m8b7#2!0q4y4W2)9^5x3#2)9^5y4g2!0q4y4g2)9^5y4W2!0n7y4g2!0q4y4q4!0n7z5q4)9^5b7W2!0q4y4q4!0n7c8W2!0m8c8g2!0q4y4W2)9&6y4q4!0n7z5h3#2S2j5#2!0q4y4g2)9&6b7#2!0n7x3q4!0q4y4g2)9&6c8q4)9^5x3q4!0q4y4W2)9&6z5q4!0m8c8W2!0q4y4#2!0n7c8q4)9&6x3g2!0q4y4#2!0n7b7W2)9&6b7#2!0q4z5g2!0m8z5g2!0n7x3g2!0q4y4g2)9^5b7g2!0m8z5q4!0q4y4#2)9&6b7g2)9^5y4p5I4G2j5$3q4D9L8s2V1`. Administratered Address,但是netkvm驱动的高级配置中是没有这一项的,该项的功能是Assign Mac。 直接在该项中进行设置,结果发现修改没有生效,使用traceview工具进行抓包,发现自定义mac设置失败时抓取的内容如下(真实mac地址打码为00-00-00-00-00-00):
很明显InitializeMAC为关键函数,进一步查看InitializeMAC函数的调用关系,发现ParaNdis_ValidateMacAddress函数为主要的执行逻辑。
其中的宏定义如下:
看到这里,修改方案就呼之欲出了,不过秉持着来都来了的原则,还是分析一下这个校验的具体逻辑吧。
以虚拟机网卡52-54-00-6D-47-93为例:
(1)bBroadcast = ((0x52==0xff) && (0x54==0xff)) = false; (2)bLA =!bBroadcast && ETH_IS_LOCALLY_ADMINISTERED(pcMacAddress) = !false && (0x52 & 0x02) = true && true = true; (3)bMulticast = !bBroadcast && ETH_IS_MULTICAST(pcMacAddress) = !false && (0x52 & 0x1) = true && false =false; (4)bEmpty = ETH_IS_EMPTY(pcMacAddress) = (0x52 && 0x1 == 0x00) && (0x54 == 0x0) && (0x00 == 0x0) && (0x6D == 0x00) && (0x47 == 0x0) && (0x93 ==0x0) = true && false && true && false && false && false = false; (5)result = !bBroadcast && !bEmpty && !bMulticast && (!bLocal || bLA) =!false && !false && !false && (!bLocal || true)= true;
使用真实的mac地址00-10-FA-C2-BF-D5为例: (1)bBroadcast = false; (2)bLA =!bBroadcast && ETH_IS_LOCALLY_ADMINISTERED(pcMacAddress) = !false && (0x00 & 0x02) = true && false = false; (3)bMulticast = !bBroadcast && ETH_IS_MULTICAST(pcMacAddress) = !false && (0xFA & 0x1) = true && false =false; (4)bEmpty = ETH_IS_EMPTY(pcMacAddress) = (0x00 && 0x1 == 0x00) && (0x10 == 0x0) && (0xFA == 0x0) && (0xC2 == 0x00) && (0xBF == 0x0) && (0xD5 ==0x0) = true && false && false && false && false && false = false; (5)result = !bBroadcast && !bEmpty && !bMulticast && (!bLocal || bLA) =!false && !false && !true && (!bLocal || true)= false;
可见,viostor的mac地址需要满足的条件也不是很苛刻,关键正在与本地管理地址,即第一个字节的最低第2字节是否为1,为1则为本地管理地址,为0则为全球管理地址(需申请购买,对应真实mac网卡),即netkvm不允许设置为真实mac(预料之中,开发者扎了一圈矮篱笆,警告开发者千万不要跨进去。。。。)。
我终究是没能跨进去,可惜了我的一次疯狂星球四。
ps:不管你们信不信,反正我是信了。
00012984 netkvm.sys 4 304 1 12984 02\26\2025-16:17:57:49 InitializeMAC[InitializeMAC] - MAC address configuration options: configuration space 1, control queue 1
。。。
00012993 netkvm.sys 4 304 1 12993 02\26\2025-16:17:57:49 DumpMac[InitializeMAC] - Permanent device MAC: 00-00-00-00-00-00
00012994 netkvm.sys 4 304 1 12994 02\26\2025-16:17:57:49 InitializeMAC[InitializeMAC] - No valid MAC configured
00012995 netkvm.sys 4 304 1 12995 02\26\2025-16:17:57:49 DumpMac[InitializeMAC] - Actual MAC: 00-00-00-00-00-00
。。。
00013227 netkvm.sys 4 304 0 13227 02\26\2025-16:17:57:60 [CParaNdisProtocol::AddAdapter] new entry FFFF8F0AF8C2F590 for adapter FFFF8F0AF3A45000, mac 00-00-00-00-00-00
00012984 netkvm.sys 4 304 1 12984 02\26\2025-16:17:57:49 InitializeMAC[InitializeMAC] - MAC address configuration options: configuration space 1, control queue 1
。。。
00012993 netkvm.sys 4 304 1 12993 02\26\2025-16:17:57:49 DumpMac[InitializeMAC] - Permanent device MAC: 00-00-00-00-00-00
00012994 netkvm.sys 4 304 1 12994 02\26\2025-16:17:57:49 InitializeMAC[InitializeMAC] - No valid MAC configured
00012995 netkvm.sys 4 304 1 12995 02\26\2025-16:17:57:49 DumpMac[InitializeMAC] - Actual MAC: 00-00-00-00-00-00
。。。
00013227 netkvm.sys 4 304 0 13227 02\26\2025-16:17:57:60 [CParaNdisProtocol::AddAdapter] new entry FFFF8F0AF8C2F590 for adapter FFFF8F0AF3A45000, mac 00-00-00-00-00-00
[培训]Windows内核深度攻防:从Hook技术到Rootkit实战!