打印

[ROM教程] ROM的分解以及合成、BIN打包、PP修改超强rom工具osnbtool详解

不是很懂,但还是先下载了。慢慢研究

TOP

回复 120# weisun 的帖子

WEISUN 老大: 117#帖子已做修改,请老大指教!

TOP

回复 122# nhlkcn 的帖子

partxx.raw不能用-sp。。

把part00到最后一个partxx用copy /b +的方法合成一个文件,再把原rom的前面0x400长度的文件头加在最前面(注意0x200到0x208的8个字节剔除,0x400是指剔除后的长度),再在文件最后填入足够多的FF(大于等于原rom文件都可以),用osnbtool -extra 这个合成的文件,得到xxx.xxx.EXA,把它改名为temp.bin刷机看看。没看过你的rom,后果自负。。

[ 本帖最后由 weisun 于 2008-10-4 23:48 编辑 ]

TOP

真的是長知識了!
謝謝大大了

TOP

回复 123# weisun 的帖子

老大:
我是新手,对使用工具不熟悉,请耐心赐教!
  是用HEX编辑吗?
  删除的是0x200--0x2007吧,到0x2008就是9个字节了对吗?
  如何提取原rom的前面0x400长度的文件头?
  我用copy /b part00.raw+part01.raw+part02.raw+part03 合成新文件part对吗?
  是在新文件part后填入足够多的FF吗?
  但我合成的新文件part比原ROM已经大好多(原rom 69.5Mb,而part 125Mb)请问怎么做?

TOP

刷机rom在编排好扇区时把填充的无效数据删除,所以会比raw镜像小很多。
没有看过你的rom很难回答问题。

TOP

回复 126# weisun 的帖子

Weisun老大:
  现把别人的W800 WM5 rom的下载地址奉上,请大哥指点我如何把我d的part00.raw---part03.raw合成卡刷rom.
WM5 rom 下载地址http://www.rayfile.com/files/8db ... -8ec1-0014221b798a/

TOP

part00.raw贴上来看看。

TOP

Weisun 老大:
part00.raw 贴上来了
附件: 您所在的用户组无法下载或查看附件

TOP

回复 129# nhlkcn 的帖子

目前理解,您是要把从机器导出的各分区导入刷机包,可如下操作,不保证一定成功,后果自负:

需要工具:
1、osnbtool v1.42。下载:http://www.pdaclan.com/attachmen ... 06&t=1223431053
2、任何HEX编辑器,如010editor、winhex。

下面所有地址值和长度值均为16进制,不再赘述。
步骤一:从刷机包temp.bin导出纯OS镜像。
1、用HEX编辑器打开temp.bin,从偏移0到偏移1248073(长度1248074)剪切出来,新建另存为temp.header。
2、从偏移1248074到偏移41A2873(长度2F5A800),剪切出来,新建另存为temp.nb0。(temp.nb0为带有扇区地址extra的OS镜像。)
3、从偏移41A2874到文件末尾(长度为5C600),剪切出来,新建另存为temp.footer。
4、osnbtool -sp temp.nb0 得到temp.nb0.os.nb。这个文件就是结构完整的纯OS镜像了。


步骤二:把机器中导出的各分区用osnbtool分别插入到纯OS镜像中。
1、osnbtool -c temp.nb0.os.nb 0 part00.raw  插入boot分区,得到temp.nb0.os.nb.NEW。
随即拷贝覆盖回temp.nb0.os.nb:
copy /y temp.nb0.os.nb.new temp.nb0.os.nb。

2、osnbtool -c temp.nb0.os.nb 1 part01.raw  插入XIP分区,得到temp.nb0.os.nb.NEW。
随即拷贝覆盖回temp.nb0.os.nb:
copy /y temp.nb0.os.nb.new temp.nb0.os.nb。

3、osnbtool -c temp.nb0.os.nb 2 part02.raw  插入imgfs分区,得到temp.nb0.os.nb.NEW。
随即拷贝覆盖回temp.nb0.os.nb:
copy /y temp.nb0.os.nb.new temp.nb0.os.nb。

4、osnbtool -c temp.nb0.os.nb 3 part03.raw  插入ext_rom分区,得到temp.nb0.os.nb.NEW。
随即拷贝覆盖回temp.nb0.os.nb:
copy /y temp.nb0.os.nb.new temp.nb0.os.nb。

这时的temp.nb0.os.nb所有的分区都已用机器里导出的内容替换了。

步骤三:合成刷机包。
1、osnbtool -extra temp.nb0.os.nb 0x02  在纯OS镜像插入扇区地址标记,得到temp.nb0.os.nb.EXA。这个文件相当于回到了temp.nb0。
把.EXA文件拷贝覆盖temp.nb0:
copy /y temp.nb0.os.nb.EXA temp.nb0。

2、copy /b/y temp.header+temp.nb0+temp.footer temp-new.bin 合成新的刷机包temp-new.bin。刷机的话估计要改回temp.bin的文件名。

TOP

认真学习中……

TOP

回复 130# weisun 的帖子

Weisun老大:完成后好像文件大小不正常;用的原temp.bin为65.9Mb,WM6.1的ROM也只有69.5Mb,而合成后的temp-new.bin却有111Mb,请指教!

TOP

回复 132# nhlkcn 的帖子

应该不会有111MB那么多,除非你的part03.raw有问题。步骤三的第1步后temp.nb0.os.nb.EXA有多大?
也可以跳过步骤二的第4步试试,反正EXT里没什么冬冬的。

TOP

回复 133# weisun 的帖子

老大:用hex得到的文件大小分别为:temp.header  18.2Mb;temp.booter 369Kb;temp.nb0 47.3Mb;

      步骤三的第1步后temp.nb0.os.nb.EXA有110Mb;
         骤二的第4步后得到的temp.nb0.os.nb.NEW与执行前的temo.nb0.os.nb大小没什么区别;应该与part03.raw关系不大

  经查找发现步骤一的第4步后得到的temo.nb0.os.nb为109Mb,是不是问题在这里。

TOP

temp.nb0.os.nb有100MB以上是没问题的,因为这是和内存中的结构一一对应的。而.EXA是在扇区编排后,会省去多余的无效内容,因此会比temp.nb0.os.nb小很多。

步骤二的第3步copy /y temp.nb0.os.nb.NEW temp.nb0.os.nb后直接osnbtool -extra temp.nb0.os.nb 0x02 得到temp.nb0.os.nb.EXA。看看这个多大。

TOP

回复 135# weisun 的帖子

老大:
不执行步骤二的第4步得到 temp.nb0.os.nb.EXA为47Mb;这样最后得到的 temp-new.bin为65.3Mb,这个大小差不多。
但part03.raw 63.1Mb是什么呢?

TOP

回复 136# nhlkcn 的帖子

part03.raw不用管他,应该是ext,本来就是空的无所谓。

你从机器导出的part03.raw可能不是真正的part03(ext)分区,所以用它插入分区03就不对了。不用管他,不插入这个就是保留原rom中的ext,一样的。

TOP

回复 137# weisun 的帖子

多谢Weisun老大的赐教!!!!

在下能否深度请教一下:
1、老大是怎样分割原TEMP.bin得到.header  .footer .os三部分的起始地址和长度的?
2、分割的temp.header 和 temp.footer在rom中启何作用?
3、"osnbtool -extra temp.nb0.os.nb 0x02"   在纯OS镜像插入扇区地址标记“0x02”怎样得到的?
4、你都使用了哪些工具?
5、对WM6.1的ROM也可以做类似分割吗?
6、这样合成的ROM刷机有变砖头的可能吗?

[ 本帖最后由 nhlkcn 于 2008-10-10 10:05 编辑 ]

TOP

感谢 酋长的好教程

TOP

回复 138# nhlkcn 的帖子

这么复杂。。。。
试着答答看。。

1、明码的rom一般都看得懂。。。看看nb0的结构,记住它就可。
2、没有仔细研究,也不必。。头部好像有开机画面。
3、那是不同的标记rom地址方法,不可一概而论。这个数字是对比原rom和参考算法的差异得出的,需要编写程序代码计算。
4、osnbtool和010editor。
5、wm5和wm6的os镜像一样的。rom的封装和什么系统无关。
6、当然可能。纯OS基本不会,如果有Bootloader的话,看RP了。

顺便再次推荐一下010editor这个HEX编辑器,对于比较进阶的分析很方便。还可以写C-like脚本,不过run的速度实在不敢恭维,扫描一个rom用10几到几十分钟不等,同样的代码用C++在DEBUG模式也只有1、2秒钟。。。

TOP