Windows – How to bypass first octet restriction for wireless adapter mac addresses in windows 8.1

mac addresswindows

Windows 8.1 has a "feature" that restricts the values you can set the mac address on a wireless network adapter (note: this restriction does not apply to ethernet adapters), even if your network adapter itself contains no restrictions and gives you the full ability to change the mac address to any value you like (which can be confirmed by booting into any other OS, such as BSD or Linux, and changing the mac address there)

This question was already asked here: Change Windows 7/8 Wi-Fi Mac Address to custom value

However the users who answered ignored what the poster said and provided instructions for changing the mac address through the methods which he (and I) are already using to change it. These methods do not get around the restriction, and you are still only able to change the address to values that match the following patterns:

X2-XX-XX-XX-XX-XX

X6-XX-XX-XX-XX-XX

XA-XX-XX-XX-XX-XX

XE-XX-XX-XX-XX-XX

So for example, if you change the mac address to 02:E3:14:D7:4C:00, the change will take effect. If you try to change it to 24:E3:14:D7:4C:00, it will not take effect. This value will still be displayed in the "network address" field in the driver advanced settings, but the OS will force the mac address back to the default value for that card

Also here is a couple of screenshots just to illustrate the problem:

changing mac address works if first octet is 02

changing mac address fails if first octet is 24

To add insult to injury, that user's question was also incorrectly marked as a duplicate of a general question asking how to change mac addresses in general. That is not what he was asking, and that is not what I am asking. So before you answer, please make sure you understand what I am asking:

I am NOT asking how to change my mac address in general. I know how to do this. I know the method to change it in the adapter advanced menu, I know the method to change it using the command line, i know the method to change it by editing the registry, I am familiar with common mac address changing tools like TMAC, SMAC, macshift, etc. All of these tools are just abstractions to the methods listed above. I KNOW all these methods ALREADY.

What I AM asking is how to change the mac address successfully to something that does not start with 02, 06, 0A, or 0E on Windows 8.1, because there is a "feature" in the operating system that will override whatever value you set it to to the default NIC mac address if the first octet is not one of those values. In other words, I am asking if there is any method to disable this restriction feature, or get around it somehow.

Best Answer

So I've found a method to work around this restriction and figured I would post it here as I imagine many others are also frustrated by this problem and would like to know how to bypass it.

Be advised, however, that this method is FAR from pretty, and will require a substantial amount of resources. The connection will also suffer from some added latency (but will still be usable.)

To use this method, you will need:

Once you have installed VMWare player and downloaded the Kali Linux image, here is what you do:

  • Make sure your USB Wifi adapter is plugged in
  • Open the Kali Linux VMWare image and make sure you configure it's network settings to "Host only"
  • Boot up the Kali Linux image in VMWare Player.
  • From the VMWare player's settings menu, navigate to Removable Devices -> (Your USB Adapter Name) -> Connect (Disconnect from host)
    • Note: You will no longer be able to use the adapter directly on your host machine. Control of the device will be passed to the Kali Linux VM.
  • Wait for Kali Linux to detect the device and enable it.
    • If for whatever reason it doesn't come up on its own, you might need a special driver for it. Google is your friend (for finding drivers, anyway)

Now, in the guest VM:

  • Connect to your desired wireless network and set the desired MAC address in the connection properties
    • Go to Settings -> Network -> Wi-Fi
    • Click the icon to the right of the network name
    • Go to Identity
    • Enter desired MAC address in Cloned Address field
    • Click Apply and reconnect to the network
  • Go back to the Network settings window (Settings -> Network)
  • Select your (virtual) ethernet connection ("Wired")
  • Click the settings cog and navigate to Identity
  • Make sure the "Make available to other users" box is checked and click Apply
  • Open the terminal and launch nm-connection-editor
  • Click "Add"
  • From the list, select "Ethernet" and click "Create"
  • Go to IPv4 settings
  • From the "Method" drop-down menu, select "Shared to other computers"
  • Give the connection an appropriate name, like "Share via ethernet" or "Microsoft sucks"
  • Now go back to the main Network settings (Settings -> Network)
  • Select "Wired" again
  • You should now see the new connection you made in there. If it's not already connected you can click on it to connect it. Take note of the IP address its using (in my case, its 10.42.0.1)

Now, in the host machine (your Windows box):

  • Go to Network and Sharing Center -> Change Adapter Settings
  • Right click "VMWare Network Adapter VMnet1" and click "Properties"
  • Select "Internet Protocol Version 4 (TCP/IPv4)" and click "Properties"
  • Tick the radio box for "Use the following IP address" and enter the following
    • For the IP address, set it to a unique address in the same network as the guest ethernet adapter. So if your guest VM's ethernet adapter is using x.x.x.1, you can use x.x.x.2. In my case, I used 10.42.0.2
    • Use the same subnet mask as your guest VM. In my case it was 255.255.255.0
      • You can check it with ifconfig eth0 | grep netmask in the guest
    • For the default gateway, enter the IP your guest is using on its ethernet adapter (i.e. 10.42.0.1)
    • Enter the same IP in the Preferred DNS server field
    • Click OK
  • Click OK again

You should now have a working tunnel from your host OS's VMNet1 interface to the wlan0 interface on the guest OS via its eth0 interface (a tunnel to a tunnel, heh.) You can use the guest to spoof macs and do whatever you want with the card without microsoft's BS arbitrary restrictions

I am going to try and find a more elegant way to do this as I am not a terribly big fan of Linux. Ideally I'd like to set up a compact BSD-based CLI-only VM to handle this instead of running a bloated Linux distro, but in the meantime this method is working for me and hopefully it will help others facing the same issue.

Also note that you could do something similar with a separate physical device (like a Raspberry Pi) instead of a VM if you have one (unfortunately I don't have another device at the moment), the basic concept is the same only you will have one less step to worry about (configuring the virtual network adapter.)

Related Question