The problem

 
Lately, I noticed that my el-cheapo-Chinese-Ebay-phone (Star B943) got a different IP address every time I re-enabled the Wifi connection. It never did this before (it always reused the same address, as I set the lease duration to 1 week on my server). I don’t know how or why this behaviour started, but I certainly didn’t like it. After examining the dhcp.leases file on my DHCP server, I was in for a big surprise: it appeared that my phone simply changed its own MAC address every single time, which immediately explains why the DCHP server handed out a new lease every time !

Googling the Interwebz learned me that a lot of Android users were(are) facing the same problem. Luckily, I also found a solution to the problem (muchas gracias to Damian Parsons at http://gizbeat.com/ ). This solution only works on a rooted phone.

 

How to fix it:

 

  • If you don’t have it already, install a root file explorer (like Total Commander) on your phone
  • Make sure to allow root privileges every time your root file explorer requests it.
  • Navigate to /data/nvram/APCFG/APRDEB
  • Copy the file named WIFI to your SD card
  • Somehow copy this file to your computer (USB transfer, email, . . .)
  • Install a hex editor (Hxd is a good one)
  • Open the previously copied WIFI file in HxD. It should look similar to the following image:
  •  
    Hxd-before 

  • The MAC address starts at row 1, column 4 and it ends at row 1, column 9.
  • In my case, the colums 4 till 9 were all zeroes, which explains the problem. When the mac address handed to the kernel at boot is empty, the kernel will start generating random mac addresses.
  • Now, input your desired WLAN MAC Address in the colums 4 till 9 (see next image):
  •  
    Hxd-after 

  • You did not use the same MAC address I used in this example, right ? 😉
  • Save the file, but preferably under a different name, or otherwise backup the original WIFI file before editing.
  • Copy this new file back to the SD card of your phone.
  • Navigate back to /data/nvram/APCFG/APRDEB
  • Overwrite the previously existing WIFI file with your modified WIFI (renaming it back to WIFI if necessary).
  • Possibly check the file permissions and change them to the same as the original WIFI file if required.
  • Reboot your phone.
  • Now check the mac address of the wifi card: it should the same as the one you entered in the WIFI file.
  • Enable/disable the wifi connection several times to verify the mac address does not change any more.

  
The above fix worked for me, on a Star B94m (B943), running stock Android 4.2.1 JB (rooted). Let me know if it also works for you.