定制ROM入门
想要修改ROM真的比较麻烦,光软件就要装好几个。。。。
1、BIN转换NBF格式
2、提取ROM中的文件
3、修改CE注册表default.fdf
关于刷机的风险,大家都已经知道了,看过一个星期帖的都应该已经看到有很多朋友壮烈了。。。
目前最保险的方法,就是用USB联电脑刷机,并且是只刷OS部分,而不是全刷,特别是SPL部分,一不小心就死了!切记!也请刷机在三遍以下的朋友不要搞这个,嘿嘿。。。。
俺也碰到一次刷机后只看到开机画面,十分钟后画面淡去!不过俺只刷了OS部分,SPL仍然为1010064,所以找到原来好的OS,刷回来就好了。无险。。。。
装好软件,把[dumpromxSDA.zip]、 [romtools.rar]的文件解压到一个目录中《turnROM》,主要工作就是在这个目录中操作,主要使用的工具就是:dumpromx.exe、typhoonnbfdecode.pl、fdf2reg.pl、reg2fdf.pl四个,其他的可以不要。。。
开始吧。。。
1、在turnROM目录新建一个文本文件,打开输入cmd,保存退出。改名为dos.bat(需要闭关资源管理器“隐藏已知类型文件的扩展名”选项),这是进入DOS命令窗口的快捷(命令批处理)。双击运行dos.bat,进入DOS命令窗口,应该当前目录就是turnROM。。。
2、测试ROM文件为BIN格式,文件名为:ROM.BIN
命令:perl typhoonnbfdecode.pl -x rom.bin
会得到五个nb文件
命令:ren 04e3d4c0-OS.nb OS.nb
会得到OS.NB
直接使用NBF格式的ROM,要使用TyphoonNBFTools(就是降级SPL1010064的工具),打开ROM.NBF,在下半个窗口的OS上点右键,选择dump decrypted,在打开的窗口中输入文件名OS,保存,过一会儿,得到OS.N_D
OS.NB与OS.N_D两个文件完全一样,都是OS的镜象文件,以下文件名以OS.NB为例。。。。
3、提取ROM文件
3.1 提取ROM的全部文件
命令:md ROM
命令:dumpromx os.nb -d rom
建立一个ROM目录,将ROM(OS.NB)的文件全部放入ROM目录中
3.2 提取ROM的单个文件,文件例(注册表文件):default.fdf
命令:md temp
命令:dumpromx os.nb -d temp -f default.fdf
建立TEMP目录,提取的default.fdf放在TEMP目录中。。。
需要指出的是,ROM的文件排列格式比较复杂,还没有完全搞清楚。用全部提取文件的话,得到的都是完全组合好的文件,也就是手机RAM中的文件,但要想写回ROM中的话,有好多文件(特别是.exe/.dll文件)需要单个提取。。。
命令:dumpromx os.nb -d temp -f keybddr.dll
得到键盘驱动库keybddr.dll,分为四个文件(keybddr.dll.0/keybddr.dll.1/keybddr.dll.2/keybddr.dll.eo),keybddr.dll是完整文件,对写回ROM无用。。。
4、将文件写回ROM,例ROM文件:OS2.NB(为了不同型号ROM替换文件)
4.1 多个文件写入ROM
命令:md in
建立一个IN目录,将需要写回的所有文件复制进IN目录(只能是小文件,目前还不能确定有哪些,不过提取出来后只有单个部分的文件,应该没问题)
命令:dumpromx os2.nb -a in
得到in.nb
4.2 单个文件写入ROM
把需要写入ROM的文件放到turnrom目录,如(keybddr.dll.0/keybddr.dll.1/keybddr.dll.2/keybddr.dll.eo)
命令:dumpromx os2.nb -f keybddr.dll -f keybddr.dll
得到keybddr.dll.nb
(每个文件写入,命令行都会返回如:
ERROR: could not find pointer for ofs 80085864
ERROR: could not find pointer for ofs 00000000
之类的信息,不用理会,这只是ROM文件与dumpromx程序不太配套造成的(dumpromx不是官方程序),并不是出错,成生的NB文件没有问题的。。。
有许多.exe/.dll文件好象格式比较复杂,无法写回,命令行会返回如:
Warning! ROM OV7648.dll.1 realaddr = 01f6c000 but ov7648.dll.1 realaddr = 01f6b000
Warning! ROM OV7648.dll.2 realaddr = 03b05000 but ov7648.dll.2 realaddr = 03b08000
之类的警告信息
或者干脆出来一大堆信息,那就是说写入失败,虽然最后也得到了NB文件,绝对不能使用的。。。)
新的ROM镜象生成,统一命名为:NEW.NB。。。。
5、转换为NBF文件写入手机
命令:perl typhoonnbfdecode.pl -r os=new.nb -c new.nbf
得到NEW.NBF
然后用把NEW.NBF复制到IU_SPL+PatchedRUU目录,用手机USB联机电脑的方法将NEW.NBF刷进手机,搞定
看看结果吧。。。。
6、修改CE注册表default.fdf
第3步已经提取了CE注册表文件default.fdf,现在利用
命令:perl fdf2reg.pl default.fdf default.reg
得到default.reg,这就是手机的注册表,好多默认的东东都在这里面,相信不用多讲,需要的就是耐心,慢慢把你需要修改的选项找出来。。。
这里当然要小心了,改错了的话手机功能不齐都是有可能的。。。。
命令:perl reg2fdf.pl default.reg default.fdf
得到default.fdf,改好后的注册表文件转换为CE注册表格式,可以写回ROM了。。。
目前学到的就是这些了,还有一个有用的东东,没有搞清楚呢。。。。
initflashfiles.dat文件是RAM复制到手机\storage目录的文件列表库,用WORD以unicode格式打开,就可以看到内容,把不想要的文件行删除,最后保存为.TXT文本。。。。
这个没有进行测试呢,要转换为.DAT格式的文件需要用到tounicode.c这个脚本(.pl文件都是脚本命令),应该是C语言吧,还没有找到呢。。。
关于RAM文件的删除,目前还没有找到方法,有人说把文件写为0字节,没什么用,文件是没了,可占用的空间还在,因为RAM是按内存位址写入的,如果要手工修改文件的位址的话,工作量太大了,而官方没有将工具提供出来,所以没办法。。。
个别文件的话只是有个想法,还没有写回测试,成功的话再具体写吧。。。
命令:dumpromx os.nb -f
得到ROM所有文件在ROM中位址信息,可能你无法在DOS窗口完全保存下来,但是是可以的。在DOS窗口的属性--布局--屏幕缓冲区大小,将宽度改为:255,高度改为:9999,保存属性-供以后相同窗体使用。然后输入cls,再输入以上命令,显示完成后点鼠标右键--全选,再点鼠标右键,DOS窗口的内容已经复制到剪帖板,新建一个文本文件,打开,粘贴,就可以把所有的信息保存下来了。。。
是供研究ROM内部文件结构使用的,大题来讲把一个分为文件名、文件结构表、文件内容,三部分,大的复杂的文件内容分为几部分,所以替换很困难,牵涉到位址的改变。不过这里提供了直接修改ROM文件的方法,需要研究一下ROM信息的位址信息,ROM分为五部分,就是开头的五行如img 01040000 : hdr=83156224 base=82040000 commandlineoffset=82040000这样,mg 01040000是内存实位址--在WINHEX中打开OS.nb就对应这个位址,base=82040000是定位转换位址--定位的基点, hdr=83156224 是信息位址--文件信息中显示就是这种位址。。。
在WINHEX中定位文件的位址,需要用十六进制计算,以寻找文件前面的hdr位址减去定位基点位址,就得到文件在WINHEX中的offest,即hdr-base=img,找到所寻找文件的所有信息,全部清零,这个文件就不存在了。。。
只用此试过摄像头驱动程序的替换,不过未成功,考虑到摄像头驱动程序的复杂性,曾经测试七八种方法都未成功,可能与此无关,下一步再测试是否可以完全删除一个文件,不过又牵涉到ROM中还有文件的列表统计,不知有没有影响,慢慢来吧。。。