U930 换字库后WIFI和蓝牙MAC改变的完美修复方法

来源:互联网 发布:淘宝上买精密管判多久 编辑:程序博客网 时间:2024/04/30 15:18

U930是2012年11月买的,移动的合约机,一共买了两个,我和老婆各一个。不幸的是,都遇到了字库门。一台在保修期内免费换了一次板,一台因为ROOT过,付费220换了一块新板。不过最终还是全坏了,也懒得再去修了,换了两台Xplay就没管它了,一直在那放着。后来在淘宝看到U930可以50块换闪迪字库,正好老爸老妈的手机坏了,就想把这两个手机修好给老爸老妈用。淘宝这个店家服务还不错,两天就修好了。后来试机发现有一台连不上WIFI,无意中发现两台手机的WIFI和蓝牙的MAC地址都一模一样,联系淘宝店家也没有完美的解决方案。

后来发现刷MIUI可以改MAC地址,就暂时先把其中一台刷了个MIUI解决了MAC地址冲突的问题。但是MIUI实在是太卡了,于是又上网找解决办法。一种是改/system/etc/nvram.txt的方法(这种要刷了MIUI才管用),一种是改/data/misc/wifi/wifi/NvMacaddress文件的方法(这种方法需要去掉这个文件的写权限,否则会被系统还原)。这两种方法都不够完美,类似于打补丁的方式,并且不能解决蓝牙MAC地址相同的问题。对于我这种完美主义者(强迫症晚期患者)来说,绝对是难以接受的,于是决定自己研究一番。

因为更换字库后MAC地址才发生变化,所以推断MAC地址是存储在字库(eMMC芯片)里的。我发现网上换字库后和我遇到同样问题的网友的WIFI MAC地址都变成了48:28:2F:DD:27:F0,由此可以推断,修字库的商家都采用了同样的eMMC镜像文件。安卓系统的分区大致都有如下几个boot recovery misc system data cache sdcard 。其中boot分区是存放kernel、init程序和init脚本的,recovery是存放恢复系统的,system存放安卓系统文件,data是存放安装的APP和数据的,cache一般特殊的程序如google play才会用到,这几个都没有可能存放WIFI和蓝牙的MAC地址。唯有misc分区比较有可能,这个分区本来就是存放杂项数据的。

那我们就开始动手把这个分区的镜像提取出来吧。手机要先ROOT,否则无法提取。首先连上手机USB并运行adb shell(adb程序自行网上下载,还有配套的adb驱动也要下载安装),执行mount命令,看看都挂载了哪些分区。如下图:


可以看到 system 分区对应块设备/dev/block/platform/sdhci-tegra.3/by-name/APP,那么我们看看都有哪些块设备吧。


不难看出,APP 对应 system ,CAC 对应 cache,LNX对应boot,MSC对应misc,SDC对应sdcard,SOS对应recovery,UDA对应data,USP对应啥暂时没猜出来。并且从上图可以看到,上述文件其实都只是软连接,每个文件都对应一个分区,MSC真正的块设备是/dev/block/mmcblk0p5,好,现在可以提取misc镜像了。


上图的第一个命令su是先切换为root用户,第二个命令是将boot分区内容提取到sd卡的boot.img文件中,第三个命令是将misc分区内容提取到sd卡的misc.img文件中。好了,现在有了misc.img文件了,可以连上USB把文件拷到电脑上了。这里要注意的是,手机里虽然已经有misc.img文件了,但是U930的MTP似乎有点问题,在电脑上打开的时候却看不到。我的经验是,用root explorer删除sdcard目录下以点开头的所有隐藏文件(注意不要删除点开头的目录),然后重新连接电脑就可以看到了。如果还看不到,请重启手机再连接电脑试试。

将misc.img复制到电脑上后,用WinHex打开,开始部分全是00。按住PgDn快速翻页,几秒钟过后,似乎有一些数据一闪而过,用PgUp翻回去吧。接下来,见证奇迹的时刻。见下图


啊,正是我们要找的数据,前6个字节是WIFI的MAC地址,接着6个字节是蓝牙的MAC地址。好,改一下,存盘。

这里就把最后一个字节的低位改为1吧。另外,你可以不必PgDn PgUp地按,直接定位到4000的位置就好了,以上只是为了说明我查找的过程。


把文件复制回手机的sd卡中,然后执行以下命令将misc.img写回到misc分区中(注意if和of互换了):


至此,修改完成,重启一下手机。然后打开手机信息看一下地址已经正确改过来了。


如果你也和我一样是完美主义者(强迫症晚期患者),那么就用这个方法把WIFI和蓝牙MAC地址改过来吧。


最后总结一下过程:

1. 先用ROOT工具将手机ROOT一下;

2. 用USB数据线连接手机和电脑,打开手机的USB调试功能;

3. 安装ADB驱动,下载adb.exe程序,并打开命令行,输入 adb shell;

4. 进入shell后,输入su,切换到超级用户;

5. 输入dd if=/dev/block/mmcblk0p5 of=/sdcard/misc.img 将misc分区提取到SD卡的misc.img文件,当然前提得是你手机安装了TF卡;

6. 将 misc.img 复制到电脑,如果看不到文件,先用root explorer 把点开头的隐藏文件全部删掉,再重新连接手机和电脑。用WinHex打开,定位到4000位置,修改WIFI和蓝牙的MAC地址;

7. 将改好的misc.img覆盖掉手机SD卡里的misc.img文件;

8. 如果这时shell已经断开了,重新执行3、4步,然后输入dd of=/dev/block/mmcblk0p5 if=/sdcard/misc.img 将改好的文件写入misc分区;

9. 重启手机,完成。


0 0