打印

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

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

经常看到有些朋友问如何解开某某ROM,如何修改某某机器的PagePool等等,嫌麻烦不再一一解答了,写个教程。

请先下载本人拙作osnbtool.exe以及压缩支持库cecompr_nt.dll。关于OS镜像等的说明请移步osnbtool发布贴查阅,osnbtool.exe的命令参数说明请参考所附readme,本文不再赘述。工具发布贴:http://www.pdaclan.com/thread-12817-1-1.html

2008.10.18新增BIN打包,更新在第5楼。

一、ROM文件的构成以及用-sp命令分离出OS镜像
粗略看了一下部落所发布的各机型ROM,大多数都包含了完整地OS镜像,对于这些rom文件都能够被osnbtool.exe直接支持。这些ROM的结构的种类如下图:


使用osnbtool.exe –sp <rom文件>来了解rom的构成和分离出OS镜像。对于种类一和种类三,-sp会分离出fName.ext.PRE文件(头部)和fName.ext.OS.NBOS镜像或OS镜像+尾部);对于种类二和种类四-sp命令执行后会提示不用split。只要ROM已经是以OS镜像开头,不管后面又没有“ROM尾部”,osnbtool都会正确处理,因此种类二和种类四是在本文中都看作是纯OS镜像。

-sp命令示例一:
下面是对ASUS-P535的纯OS-ROM执行-sp后的情况:
D:\ tools>osnbtool -sp galaxyii.nb0
OS ROM Partition Tool V1.30 By Weisun :> PDAclan.com
Sector size : 0x00000200
OS IMAGE found.
Partitions infomation:                                      ß------下表列出各分区信息
**************************************
Part-0 type: BOOT SECTION image                ß------分区 0 BOOT
Part-1 type: XIP RAM Image                          ß------分区 1 XIP
Part-2 type: IMGFS file system                       ß------分区 2 IMGFS文件系统
**************************************
Source file does not need to split!                    ß------已经是纯OS镜像

-sp命令示例二:
下面是对SORGASUS-P750 ROM执行-sp后的情况(750的官方ROM结构和535完全一样,但是SORG自定义了ROM结构):
D:\ tools>osnbtool -sp PegasusP.nb0
OS ROM Partition Tool V1.30 By Weisun :> PDAclan.com
Sector size : 0x00000200
OS IMAGE found.
Partitions infomation:                                      ß------下表列出各分区信息
**************************************
Part-0 type: XIP RAM Image                           ß------分区 0 XIP
Part-1 type: IMGFS file system                        ß------分区 1 IMGFS文件系统
**************************************
PegasusP.nb0.PRE written.                             ß------生成了.PRE文件(rom头部)
PegasusP.nb0.OS.NB written.                         ß------生成了.OS.NB文件(OS镜像)


基于上面2个例子,我们看到-sp命令同时完成了分离出OS镜像和列出分区信息的功能。善用这个命令就可以对种类一到四的ROM进行分解了。


对于-sp命令示例一,我们用 osnbtool.exe –d galaxyii.nb0 2 imgfs.bin导出imgfs文件系统镜像,对于-sp命令示例二,我们用osnbtool.exe –d PegasusP.nb0.OS.NB 0 XIP.BIN导出XIP镜像(注意源文件是fName.ext.OS.NB)。至于如何导出示例一的XIP和示例二的IMGFS,留给读者自己想。。。。



**********************************************************

7.23 增强了的 -sp 命令支持包含扇区计数BLK的源ROM文件,对其进行自动判断并且分离出纯正的OS-IMAGE、.Extra文件,如果ROM有头部内容的话也同样生成.PRE文件,示例如下:

-sp命令示例三:
下面这个rom是在随便找了个SAMSUNG-i780的nb0,其中包含了头部以及os部分,文件中包含扇区计数BLK,osnbtool先把头部分离出来(头部不处理extra数据),再将OS部分分离为.os.nb(纯OS镜像)和.Extra,纯OS镜像把imgfs以及之前的分区长度全部按照标准还原,和nbsplit.exe -data 2048 -extra 8 导出的.payload文件不同,.payload没有还原长度,用osnbtool -d 以及2.1版本的imgfsfromnb.exe都不能导出正确的IMGFS.BIN,而osnbtool -sp导出的os镜像完全能够按照标准导出正确的imgfs.bin(至少用osnbtool -d 可以):
D:\osnbtool>osnbtool -sp i780.nb0
OS ROM Partition Tool V1.34 By Weisun :> PDAclan.com
Sector size : 0x00000800                                        ß------自动扫描得到扇区尺寸
Extra data bytes : 0x00000008                               ß------插值长度(extra data)
OS IMAGE found.
Partitions infomation:
**************************************
Part-0 type: BOOT SECTION image                          ß------分区-0:BOOT
Part-1 type: XIP RAM Image                                     ß------分区-1:XIP
Part-2 type: IMGFS file system                                  ß------分区-2:IMGFS
Part-3 type: legit DOS partition                                 ß------分区-3:DOS-FAT
**************************************
i780.nb0.PRE written.                                               ß------首先把头部存为.PRE文件
i780.nb0.OS.NB written.                                           ß------得到符合标准的纯OS镜像
i780.nb0.Extra written.                                            ß------extra数据保存为.Extra文件,留作还原时用


下图为示例3导出的纯OS镜像.os.nb和nbsplit.exe导出的.payload的对比,请注意圈中文件长度:



对于示例3得到的.os.nb文件(纯OS镜像)用osnbtool -d 命令导出完整的imgfs.bin过程如下:
D:\osnbtool>osnbtool -d i780.nb0.OS.NB 2 imgfs.bin
OS ROM Partition Tool V1.34 By Weisun :> PDAclan.com
Sector size : 0x00000800                                        ß------扇区尺寸
Extra data bytes : 0x00000000                                 ß------因为源文件已经是纯OS镜像,extra数据为0
OS IMAGE found.
Partitions infomation:
**************************************
Part-0 type: BOOT SECTION image
Part-1 type: XIP RAM Image
Part-2 type: IMGFS file system                                ß------分区-2:IMGFS
Part-3 type: legit DOS partition
**************************************

Can not find compression signature.                         ß------未找到分区压缩标识(指的是srpx而不是imgfs的压缩)
Part-2 de-packing...
Successfully de-packed to imgfs.bin                         ß------输出了imgfs.bin


附注:
这个i780.nb0的MSFLASH签名段比较特殊,所以就算IMGFS分区符合MBR,用2.1版的imgfsfromnb.exe对.os.nb也不能正确导出imgfs.bin。同时在用imgfstonb.exe把imgfs导入时也会在错误的位置写入IMGFS_BLOCK_SIZE,而用osnbtool -c导入的话可以正确处理。


****************************
2008.10.7更新为v1.42
主要增加对HTC系列含有扇区地址标志rom的支持。


由于v1.41的-extra命令对扇区地址的编排算法已经规范化,在这之上增加了一个intBlocksToFill的数字可选参数即可对HTC系列的rom进行扇区编排和extra插入。
相对于nbsplit、nbmerge这一对工具来说,osnbtool -sp和-extra的算法通用性更强:
1、不需要知道扇区大小等参数.-sp会自动扫描。
2、不需要知道原rom是否有扇区地址块(extra),-sp会自动扫描提示,并直接导出RAW-OS-ROM。
3、-sp导出的RAW-OS-ROM(xxx.os.nb)是完全按照内存中的位置构建的,在这基础上修改定制等不会出错。
4、-sp导出的纯OS镜像用osnbtool -d都可以准确导出各分区。而nbsplit导出的xx.nb.payload大多IMGFS地址都偏离实际地址,用配套的imgfsfromnb也只能支持预定的几个机型,很多其他机型会出错。
5、osnbtool -extra插回扇区地址块(extra)的算法基于对原rom的BPB扫描得到的参数,准确无误。
6、由于插入扇区地址的算法符合标准,有的需要进一步打包为BIN的刷机包基于这个结果打包不会出错。

以下解开和合成以diamond的RUU_signed.NBH为例:
1、用nbhtool分解RUU_signed.NBH得到的os文件为windows.nb。
2、执行osnbtool -sp windows.nb,如下:
D:\osnbtool>osnbtool -sp windows.nb
OS ROM Partition Tool V1.42 By Weisun :> PDAclan.com
Sector size : 0x00000800                ß------扇区尺寸
Extra data bytes : 0x00000008        ß------extra块(扇区地址)
OS IMAGE found.
Partitions infomation:                     ß------以下为各分区信息
**************************************
Part-0 type: BOOT SECTION image
Part-1 type: XIP RAM Image
Part-2 type: IMGFS file system
Part-3 type: legit DOS partition
**************************************
It does not include .PRE section in source file.ß------没有.PRE部分
-------------------------------------------------
Sector counters (extra-data) found in source file.
ß------以下为各分区实际以及额定参数

Partition 0 true offset:00000002 true size:0000063E Len:0000063E
Partition 1 true offset:00000640 true size:00000940 Len:000008C0
Partition 2 true offset:00000F80 true size:0000EB00 Len:0000EB80
Partition 3 true offset:00000000 true size:00000000 Len:0000B540
windows.nb.OS.NB written.                       ß------得到RAW-ROM

3、分解windows.nb.OS.NB的XIP及IMGFS分区:
D:\osnbtool>osnbtool -d windows.nb.os.nb 1 xip.bin
OS ROM Partition Tool V1.42 By Weisun :> PDAclan.com
Sector size : 0x00000800
Extra data bytes : 0x00000000        ß------已经没有extra了
OS IMAGE found.
Partitions infomation:
**************************************
Part-0 type: BOOT SECTION image
Part-1 type: XIP RAM Image
Part-2 type: IMGFS file system
Part-3 type: legit DOS partition
**************************************
Can not find compression signature.
Part-1 de-packing...
Successfully de-packed to xip.bin   ß---得到XIP镜像

D:\osnbtool>osnbtool -d windows.nb.os.nb 2 imgfs.bin
OS ROM Partition Tool V1.42 By Weisun :> PDAclan.com
Sector size : 0x00000800
Extra data bytes : 0x00000000
OS IMAGE found.
Partitions infomation:
**************************************
Part-0 type: BOOT SECTION image
Part-1 type: XIP RAM Image
Part-2 type: IMGFS file system
Part-3 type: legit DOS partition
**************************************
Can not find compression signature.
Part-2 de-packing...
Successfully de-packed to imgfs.bin  ß---得到IMGFS镜像
接下来dump以及xip和imgfs的移植、定制等参考其他教程。


4、把编辑好的新的分区镜像导入windows.nb.OS.NB:
Osnbtool -c windows.nb.OS.NB 2 imgfs-new.bin 导入imgfs分区,得到windows.nb.OS.NB.NEW.
同样可导入xip到分区1,略。。

5、为新的纯OS镜像windows.nb.OS.NB.NEW插入扇区地址块:
D:\osnbtool>osnbtool -extra windows.nb.os.nb.NEW 0x06ß---0x06diamond的参数,意思是6个填充Blocks
OS ROM Partition Tool V1.42 By Weisun :> PDAclan.com
Sector size : 0x00000800
Extra data bytes : 0x00000000
OS IMAGE found.
Partitions infomation:
**************************************
Part-0 type: BOOT SECTION image
Part-1 type: XIP RAM Image
Part-2 type: IMGFS file system
Part-3 type: legit DOS partition
**************************************
Extra data inerted into windows.nb.os.nb.NEW.EXA. ß---得到了.EXA文件
最后得到的windows.nb.os.nb.NEW.EXA就是含有扇区地址块的镜像,也就是还原到了原来的windows.nb。windows.nb.os.nb.NEW.EXA改名为xxx.nb或覆盖原windows.nb即可

5、上一步得到的文件作为OS部分,用nbhtool或其他nbh工具重新打包为NBH即可。



[ 本帖最后由 weisun 于 2008-10-18 16:31 编辑 ]
附件: 您所在的用户组无法下载或查看附件
本帖最近评分记录
  • smile616 部落币 +50 牛!谢谢weisun 2008-8-28 12:19
  • smile616 智慧 +20 牛!谢谢weisun 2008-8-28 12:19
  • Oldcat 部落币 +100 偶狂顶~~~狂加分感谢! 2008-7-12 00:09
  • Oldcat 智慧 +60 偶狂顶~~~狂加分感谢! 2008-7-12 00:09
  • 3601 部落币 +50 猫不给俺权限,否则俺把银行给您搬来! ... 2008-7-8 21:36
  • 3601 智慧 +20 猫不给俺权限,否则俺把银行给您搬来! ... 2008-7-8 21:36
  • acwan 部落币 +50 晕,我只能加这么多了 2008-7-6 23:19
  • acwan 智慧 +20 晕,我只能加这么多了 2008-7-6 23:19
  • GXQ 部落币 +96 部落导师 2008-7-6 20:11
  • GXQ 智慧 +50 部落导师 2008-7-6 20:11

TOP

二、解开IMGFS文件系统以及合成ROM

在教程第一部分已经得到了imgfs.bin镜像,很多ROM diyer都能够熟练解开和打包,为了教程完整和对初学者照顾,再写一下解开和打包步骤:
Imgfstodump.exe imgfs.bin         得到DUMP文件夹,定制过程略。。。

Imgfsfromdump.exe imgfs.bin imgfs-new.bin         把定制好的DUMP文件夹打包生成imgfs-new.bin

Osnbtool.exe –c galaxyii.nb0 2 imgfs-new.bin         把新的IMGFS镜像插入源OS镜像,生成的新镜像文件会在源OS镜像文件名后再加上 .NEW后缀。(galaxyii.nb0是源OS镜像,如果-sp曾经分离出fName.ext.OS.NB,这里就要填这个文件名)

Copy /b/y fName.ext.PRE+fName.ext.OS.NB.NeW fName.ext         如果-sp时提示“Source file does not need to split!”就不需要这一步了,执行后生成原来的ROM文件。

[ 本帖最后由 weisun 于 2008-7-6 19:14 编辑 ]

TOP

三、对XIP.BIN修改PagePool值以及合成ROM

XIP分区在OS镜像中大多是分配在Part-1,也有少数分配在Part-0,目前还没有看到过XIP在其他分区的。
XIP分区镜像有压缩和不压缩之分,压缩的XIP镜像就是所谓的“SRPX”签名的分区。


这里需要说明一下以前的xip2srpx.exe在压缩新生成的XIP.BIN镜像有时会发生错误,一些喜欢移植XIP的玩家在ROM引导失败后浪费了很多时间去查找XIPPORT地址分配等问题,其实都是压缩镜像时惹的祸。Xip2srpx.exe的错误发生在Compress block table不能变长导致随后的data block内容不完整。Osnbtool.exe以及前一个版本srpxtool.exe起初就是为了解决这个问题而作,同时出于方便考虑支持了压缩和导入OS镜像一步完成,省却原来还要用HEX修改分区镜像头部等麻烦的操作。osnbtool.exe的“SRPX”压缩算法采用M$的标准头文件,保证了压缩是完全无误的。
另外说明一点osnbtool.exe –c命令在导入各分区时,不论输入的分区镜像文件尺寸有何变化,都能够正确重组整个OS镜像的结构。

1、第一步:XIP分区的导出

对于非压缩的XIP分区导出示例:
D:\ tools>osnbtool -d i350.nb0 0 xip350.bin
OS ROM Partition Tool V1.30 By Weisun :> PDAclan.com
Sector size : 0x00000200
OS IMAGE found.
Partitions infomation:

**************************************
Part-0 type: XIP RAM Image                       ß------指出分区 0 XIP
Part-1 type: IMGFS file system
**************************************
Can not find compression signature.            ß------未找到签名,说明为未压缩分区
Part-1 de-packing...
Successfully de-packed to xip.bin               ß------导出到xip.bin


对于压缩的XIP分区导出示例:
D:\ tools>osnbtool -d 535.nb0 1 xip.bin
OS ROM Partition Tool V1.30 By Weisun :> PDAclan.com
Sector size : 0x00000200
OS IMAGE found.
Partitions infomation:
**************************************
Part-0 type: BOOT SECTION image
Part-1 type: XIP RAM Image                   ß------指出分区 1 XIP
Part-2 type: IMGFS file system
**************************************
Signature: SRPX                                    ß------签名
CompressVersion: 5                               ß------压缩版本
Uncompressed size: 2FF000                   ß------未压缩前的size
Deompress processing...
Successfully decompressed to xip.bin     ß------成功解压到xip.bin


2、第二步:修改PagePool
自动搜索PP偏移地址并修改到要求的数值示例:
D:\ tools>osnbtool -ap xip.bin 16
OS ROM Partition Tool V1.30 By Weisun :> PDAclan.com
Find "NKKD8" signature at offset: 0x000D6288    ß------NKKD8偏移地址
Find instruction at offset: 0x000D6548                ß------instruction偏移地址
Find PagePool Value at offset: 0x000D6558         ß------PP偏移地址
Old value: 0x00500000(5MB)                             ß------ PP原值
Sure to modify it to 0x01000000 (16MB)(y/n)? y ß------是否修改到新值?y
New value: 0x01000000(16MB) written to offset 0x000D6558. ß------写入完成

指定PP偏移地址并修改到要求的数值示例:
D:\ tools>osnbtool -pp xip.bin 0x000D6558 5
OS ROM Partition Tool V1.30 By Weisun :> PDAclan.com
Offset: 0x000D6558                                      ß------指定的PP偏移地址
Old value: 0x01000000(16MB)                       ß------ PP原值
Sure to modify it to 0x00500000 (5MB)(y/n)? yß------是否修改到新值?y
New value: 0x00500000(5MB) written to offset 0x000D6558. ß------写入完成


有些兄弟可能会问,既然可以自动搜索PP地址,为什么还要有指定PP地址命令呢?

这里说明一下,osnbtool.exe –ap命令的搜索算法模拟了人工使用HEX编辑器在XIP.BIN中寻找PP位置的逻辑,但是计算机程序总有机械的一面,虽然目前还没有遇到这个算法找不到的PP值地址,但是不排除特殊情况。如果遇到-ap不能找到PP地址,在不用HEX编辑器的情况下可以利用-ap的提示配合-pp指定地址去测试哪个是PP值,一般PP值的位置在instruction地址后面加0x10左右的地方,就从此地址开始。

自己用HEX编辑了一个-ap不能找到PP地址的XIP.BIN,示例如下:
D:\ tools>osnbtool -ap xip.bin 16
OS ROM Partition Tool V1.30 By Weisun :> PDAclan.com
Find "NKKD8" signature at offset: 0x000D6288
Find instruction at offset: 0x000D6548                            ß------找到instruction地址为0x000D6548
Can not find value of PagePool.


D:\Share\p535prj\debug>osnbtool -pp xip.bin 0x000D6558 16
OS ROM Partition Tool V1.30 By Weisun :> PDAclan.com
Offset: 0x000D6558                                                    ß------先试试看instruction地址+0x10的地方
Old value: 0x00000000(0MB)                                       ß------原值为0,看来不是(怀疑PP原值为0的可以试改这里)
Sure to modify it to 0x01000000 (16MB)(y/n)? n           ß------先不改,取消
User cancel.

D:\ tools>osnbtool -pp xip.bin 0x000D6554 16
OS ROM Partition Tool V1.30 By Weisun :> PDAclan.com
Offset: 0x000D6554                                                  ß------往前挪4个字节(DWORD)看看
Old value: 0x8854099C(2181MB)                               ß------更不像了。。。
Sure to modify it to 0x01000000 (16MB)(y/n)? n         ß------还是取消
User cancel.

D:\ tools>osnbtool -pp xip.bin 0x000D655C 16
OS ROM Partition Tool V1.30 By Weisun :> PDAclan.com
Offset: 0x000D655C                                                 ß------往后挪4个字节(DWORD)看看
Old value: 0x0050BB00(5MB)                                    ß------这个比较像
Sure to modify it to 0x01000000 (16MB)(y/n)? y         ß------好的,就改吧
New value: 0x01000000(16MB) written to offset 0x000D655C.  ß------改好了
如上在instruction地址+0x10附近查找哪一个值比较像,就改掉它刷机测。万一-ap改的没有效果也可以用此方法。目前遇到asus-p526以及gsmart-i350的pp偏移量比较特殊,最新版的-ap自动搜索已经改进并支持。在此感谢本坛大大STAR3000和ACWAN的测试!

3、第三步:XIP分区的导入并生成新的OS镜像

对于压缩的XIP分区导入示例:
D:\ tools>osnbtool -c i350.nb0 0 xip.bin
OS ROM Partition Tool V1.30 By Weisun :> PDAclan.com
Sector size : 0x00000200
OS IMAGE found.
Partitions infomation:
**************************************
Part-0 type: XIP RAM Image                         ß------指出分区 0 XIP
Part-1 type: IMGFS file system
**************************************
Can not find compression signature.               ß------未找到签名,说明为未压缩分区
Part-0 inserting...
Successfully inserted xip.bin into i350.nb0.NEWß------导入了xip.bin,生成i350.nb0.NEW


对于压缩的XIP分区导入示例:
D:\ tools>osnbtool -c 535.nb0 1 xip.bin
OS ROM Partition Tool V1.30 By Weisun :> PDAclan.com
Sector size : 0x00000200
OS IMAGE found.
Partitions infomation:
**************************************
Part-0 type: BOOT SECTION image
Part-1 type: XIP RAM Image                        ß------指出分区 1 XIP
Part-2 type: IMGFS file system
**************************************
Source OS image:                                        ß------以下为源OS镜像中的参数
Signature: SRPX                                          ß------签名
CompressVersion: 5                                     ß------压缩版本
Uncompressed size: 2FF000                         ß------未压缩前的size
Source Part-1 Size: 1F4000                          ß------压缩分区size
--------------------------------------                 ß------以下为新的OS镜像中的参数
Compress processing...
NEW Uncompressed size: 2FF000                ß------未压缩前的size
NEW Compressed size: 1B3137                    ß------XIP镜像压缩后的size
New Part Size: 1B377B                                ß------导入新OS镜像后的XIP分区size
Successfully compressed xip.bin into 535.nb0.NEWß------导入新OS镜像 535.nb0.NEW



上面这些步骤弄好了就可以用新做好的OS镜像刷机了,至于XIP.BIN的分解移植等不在本文讨论范围,请参考其他教程。



[ 本帖最后由 weisun 于 2008-7-21 12:10 编辑 ]

TOP

四、解开一些ROMXOR掩码


有的机型支持多种包装的rom文件刷机,比如华硕535525750系列,可以直接刷OS镜像,又可以刷官方发布的升级包。而有些官方升级包的ROM文件使用了掩码,要分解这类ROM需要先解掩码,osnbtool提供了-x命令在解开掩码的同时显示rom中分区信息供参考。


下面是AsusP535官方WM6CAP文件用-x解开后的情况:
D:\ tools>osnbtool -x asusp535.cap 0xA87BA0D5 ß------0xA87BA0D5就是掩码
OS ROM Partition Tool V1.30 By Weisun :> PDAclan.com
Unmasked to asusp535.cap.XOR                        ß------解掩码后得到的.XOR文件
Sector size : 0x00000200
OS IMAGE found.                                            ß------找到了OS镜像
Partitions infomation:                                         ß------以下为分区信息表
**************************************
Part-0 type: BOOT SECTION image
Part-1 type: XIP RAM Image
Part-2 type: IMGFS file system
**************************************
如果-x后没有分区信息表的话说明掩码错了。最好问明白再来,穷举法试不出来的。。呵呵


接下来可以-sp了:
D:\ tools>osnbtool -sp asusp535.cap.XOR
OS ROM Partition Tool V1.30 By Weisun :> PDAclan.com
Sector size : 0x00000200
OS IMAGE found.
Partitions infomation:
**************************************
Part-0 type: BOOT SECTION image
Part-1 type: XIP RAM Image
Part-2 type: IMGFS file system
**************************************
asusp535.cap.XOR.PRE written.
asusp535.cap.XOR.OS.NB written.
不用再解释这些东东的含义了吧。。。。。。asusp535.cap.XOR.OS.NB就是535OS镜像,要卡刷的话必须改名为:GalaxyII.nb0


用过本人的p535captool –d AsusP535.cap得到GalaxyII.nb0的朋友可能会问,这两种方法得到的OS有何区别?回答是没有区别。
P535captool是专用于535的,而osnbtool是通用工具。虽然也可以用Xda3nbftool-x命令,但是osnbtool会列出镜像分区情况,更实用些吧。。。

至于怎样看出rom的掩码是多少。。。方法简单但是要说清楚颇费口水,以后再说吧。。


列出一些官方ROM的掩码(Asus变态吧,这么多都加掩码。。。)
AsusP5350xA87BA0D5
AsusP7500xA87BA0D6
AsusP5260x23232323
AsusP5270x23232323
AsusA6960xB0B0B0B0
。。。。。。其他的以后看过再补充

[ 本帖最后由 weisun 于 2008-7-6 21:31 编辑 ]

TOP

这楼写一下BIN结构的解开和还原。(***本楼后半部更新v1.51直接处理BIN结构教程,请仔细阅读***)

这个功能较早就已经实现,起初只是为asus-p320的BIN结构还原,由于采用了规范算法,也可适应大多类似结构的机型。
osnbtool -2bin命令可以实现BIN结构的重组,处理的对象必须是osnbtool -extra来编排扇区后的.EXA文件(相当于含有扇区结构地址的nb0)。因为这一对命令是按照标准算法承前启后的。

在BIN结构里只包含OS的很简单,参考猫的i900-kitchen即可:http://www.pdaclan.com/thread-19982-1-1.html,320也一样。

有些rom在BIN结构里包含了PRE部分,目前只有osnbtool -2bin可以支持。这涉及到刷入FLASH-MEMORY的目的地址,出错即黑。

以下分别列出以前有朋友问的AMOI-n800和samsung-i780的分解及合成过程:

需要的工具:
1、osnbtool v1.48  下载:http://www.pdaclan.com/thread-12817-1-1.html
2、我改过的viewbin.exe 下载:http://www.pdaclan.com/thread-14599-1-2.html
3、split.exe 下载:
其他imgfs和xip等工具请自行寻找。。

n800分解:
split n800.img 0x60000 劈开文件得到n800.img-1.bin和n800.img-2.bin
ren n800.img-1.bin n800.header 第一个文件是header
ren n800.img-2.bin n800.bin 第二个文件是包含OS的BIN结构
viewbin -d n800.bin 解开BIN得到nb0,这个还有扇区地址
osnbtool -sp n800.nb0 得到n800.nb0.PRE和很纯洁的OS镜像==> n800.nb0.OS.NB。
这个n800.nb0.OS.NB就是我们能够处理的OS了,osnbtool -d n800.nb0.OS.NB 2 imgfs等等操作。。(不再赘述)

n800合成:
定制好以后,假设新生成的纯OS镜像为n800.nb0.OS.NB.NEW
osnbtool -extra n800.nb0.OS.NB.NEW 编排扇区(注意必须用osnbtool编排扇区,不可用nbmerge!),得到n800.nb0.OS.NB.NEW.EXA
copy/b/y n800.nb0.PRE+n800.nb0.OS.NB.NEW.EXA n800.nb0.new 把之前-sp出来的.PRE和编排完扇区的OS镜像合成n800.nb0.new
viewbin n800.bin 看到Image Start = 0x00040400,记下这个数字作为下一步的参数(重要!这个关系到OS刷入FLASH的地址
osnbtool -2bin n800.nb0.new 0x00040400 打包BIN,得到n800.nb0.new.BIN
copy/b/y n800.header+n800.nb0.new.BIN n800.IMG.NEW 把最先前split出来的header和新的BIN合并,得到n800.IMG.NEW
完工,把n800.IMG.NEW改为可以刷的文件名即可。

i780分解:
split i780.img 0xDF5770 劈开文件得到i780.img-1.bin和i780.img-2.bin
ren i780.img-1.bin i780.header 第一个文件是header
ren i780.img-2.bin i780.bin 第二个文件是包含OS的BIN结构
viewbin -d i780.bin 解开BIN得到nb0,这个还有扇区地址
osnbtool -sp i780.nb0 得到i780.nb0.PRE和很纯洁的OS镜像==> i780.nb0.OS.NB
这个i780.nb0.OS.NB就是我们能够处理的OS了,解DUMP等等操作。。(不再赘述)

i780合成:
定制好以后,假设新生成的纯OS镜像为i780.nb0.OS.NB.NEW
osnbtool -extra i780.nb0.OS.NB.NEW  编排扇区(注意必须用osnbtool编排扇区,不可用nbmerge!),得到i780.nb0.OS.NB.NEW.EXA
copy/b/y i780.nb0.PRE+i780.nb0.OS.NB.NEW.EXA i780.nb0.new 把之前-sp出来的.PRE和编排完扇区的OS镜像合成i780.nb0.new
viewbin i780.bin 看到Image Start = 0x000A0A00 ,记下这个数字作为下一步的参数(重要!这个关系到OS刷入FLASH的地址)
osnbtool -2bin i780.nb0.new 0x000A0A00 0x28打包BIN,得到i780.nb0.new.BIN(i780的转换是参照rom网上随便下载的一个,如果转换出来有问题可加上红色的参数试试。
copy/b/y i780.header+i780.nb0.new.BIN i780.IMG.NEW 把最先前split出来的header和新的BIN合并,得到i780.IMG.NEW
把i780.IMG.NEW改为可以刷的文件名即可。


怕麻烦的可自行制作批处理kitchen。bat里注意osnbtool的输入文件不要用带路径的变量来引用,用%~nx1来引用不带路径。



********2008/11/24更新v1.51BIN结构ROM的直接提取和合成********

Osnbtool v1.51增强了 –sp命令直接分离含有BIN结构ROM,并且在-2bin时增加-cutheader开关剪掉B000FF头,以方便还原。

BIN结构在ROM中位置有几种情况。
一、ROM包装是完整的BIN结构:
比如ASUS-P320FLASH.BIN
E:\osnbtool>osnbtool-sp flash.bin
OS ROM Partition ToolV1.51 By Weisun :> PDAclan.com
Sector size :0x00000200
Extra data bytes :0x00000008
OS IMAGE found.
Partitions infomation:
**************************************
Part-0 type: BOOTSECTION image
Part-1 type: XIP RAMImage
Part-2 type: IMGFS filesystem
**************************************
Found 'B000FF' headerat offset:     0x00000000   <--找到了B000FF
BIN_START:   0x00000000    BIN_LENGTH:    0x03FBB000
Records:        0x000001F2    RecordsSize:     0x03F3A764
BinFileSize:    0x03F3A773
StartAddr:     0x00000000                                         <--起始地址
flash.bin.BIN.NB0written.                                           <--直接转换为NB0

这个flash.bin.BIN.NB0就是之前viewbin –d后得到的flash.nb0
对于这种情况,还原时直接-2bin就可,因为找到了B000FF头,所以不要用-cutheader开关切掉B000FF头。
还原命令:
Osnbtool -2bin flash.bin.BIN.NB0.OS.NB.NEW.EXA 0x00000000
得到新的BIN后直接改名为FLASH.BIN即可。

二、BINROM包装中间位置:
OQO-G900ROM
E:\osnbtool>osnbtool -sp G900.UPR
OS ROM Partition ToolV1.51 By Weisun :> PDAclan.com
Sector size :0x00000800
Extra data bytes :0x00000008
OS IMAGE found.
Partitions infomation:
**************************************
Part-0 type: BOOTSECTION image
Part-1 type: XIP RAMImage
Part-2 type: IMGFS filesystem
Part-3 type: legit DOSpartition
**************************************
Found BIN_FILEstructure in source file.  <--发现BIN结构,但是并未找到B000FF
Records:    0x000001E7    RecordsSize:    0x03D1E4E0
StartAddr:   0x000E0E00        <--起始地址
G900.UPR.Header written.     <--保存头部
G900.UPR.BIN.NB0 written.    <--将中间的BIN结构转换为NB0
G900.UPR.Footer written.       <--保存尾部

对于这种只要把中间的还原为BIN后,再copy /b Header+BIN+Footer即可合成。
比如:
Osnbtool -2bin G900.UPR.BIN.NB0.OS.NB.NEW.EXA 0xE0E00 –cutheader
Copy/b/y G900.UPR.Header+G900.UPR.BIN.NB0.OS.NB.NEW.EXA.BIN+G900.UPR.Footer G900.NEW.UPR
为什么加-cutheader去剪掉B000FF头?是因为-sp时没有。
0xE0E00参数怎么来的?-sp时有提示。

三、BINROM包装尾部位置:
读到这里应该已经能够类推,-sp分离出的只有.Header和转换好的.NB0
还原时只要-2bin转回BIN后,copy /b/y xxx.Header+xxx.BIN即可。


这里再归纳下:
-sp的结果来制定逆向合成步骤:
一、如果-sp时提示“Found 'B000FF' header at offset:…..”或“FoundBIN_FILE structure in source file”即说明ROM包装中OS是在BIN结构中。前者说明BIN结构含有B000FF头;后者说明BIN结构只有数据段,不包含B000FF头。
二、看到“Found 'B000FF'header at offset:…..”,则-2bin时不加-cutheader开关;看到“FoundBIN_FILE structure in source file”,则-2bin时在最后加上-cutheader
三、-sp后看提示确认是BIN结构后,再看有无xxx.Headerxxx.Footer文件生成,有的话在最后copy /b +时都加上去,顺序是xxx.Header+xxx.BIN+xxx.Footer
四、BIN结构ROM分离出来的是经过转换得到的NB0,再-sp一次则得到了.NB0.OS.NB。这个才是能够正确DUMPOS
五、.OS.NB(或.OS.NB.NEW)还原到BIN必须经过以下步骤:
Osnbtool -extraxxx.OS.NB.NEW  编排扇区
Osnbtool -2binxxx.OS.NB.NEW.EXA  打包BIN




附加说明:

一些ROMBIN结构虽然是包含B000FF头的,但是BIN中的起始内容并不是OS。比如AMOI-N800.IMGSAMSUNG-i780.IMG-sp在处理这些ROM时直接把它当作不包含B000FF头的来处理。

最后以AMOI-E78ROM作解开及合成的例子:
解开:
osnbtool -sp e78.img
---得到e78.img.Headere78.img.BIN.NB0
osnbtool -sp e78.img.bin.nb0
---得到e78.img.bin.nb0.OS.NB
osnbtool -d e78.img.bin.nb0.OS.NB 2 imgfs.bin
---得到imgfs镜像

DUMP及定制等。。。略)

合成:
osnbtool -c e78.img.bin.nb0.OS.NB 2 imgfs-new.bin
---得到e78.img.bin.nb0.OS.NB.NEW
osnbtool -extra e78.img.bin.nb0.OS.NB.NEW
---得到e78.img.bin.nb0.OS.NB.NEW.EXA
osnbtool -2bin e78.img.bin.nb0.OS.NB.NEW.EXA 0x3A3A00 –CutHeader
---打包BIN
copy /b/ye78.img.Header+e78.img.bin.nb0.OS.NB.NEW.EXA.BIN E78.New.IMG
---合成

文件名太长?看了头大?---作批处理时自己ren吧。。。呵呵。这里是为了说明步骤。

[ 本帖最后由 weisun 于 2008-11-24 23:48 编辑 ]
附件: 您所在的用户组无法下载或查看附件

TOP

难道是沙发!
技术强贴,裸体顶起来!
以下内容,需要回帖才可以浏览。

TOP

强烈顶上去,非常感谢楼主!
大海航行靠舵手!

TOP

WEISUN 老大出手,造就一大批高手
因为有了你  燃烧激情 传递爱心  世界更精彩                 超越梦想

TOP

GXQ老弟太抬爱了
。。。。实在是不敢也不配“导师“这个称呼的 。

被楼上几位说的飘飘然不知所措了。。 。。呵呵

TOP

大仙又制造宝物出来害人啊.嘿嘿嘿.
感谢WEISUN分享成果.

TOP

虽然不懂,但大师的大作一定要顶的
人之所以快乐,不是得到的多,而是计较的少;
财富不是一生的朋友,而朋友是一生的财富

TOP

感谢,等待以后的内容

TOP

weisun开课,趴着顶!

TOP

嗯。留个脚印吧

TOP

这个帖一定要顶

TOP

支持!

TOP

谢谢WEISUN的教程!

TOP

这样专业的帖子。不占个位置顶上去,怎么多得起部落呢。。
P535-RAM128

TOP

我对我自己的一个ROM进行操作,可以导出imgfs.bin,但是导不出XIP.BIN,不知道为什么
错误提示:ERROR-Can not load the cecompr_nt library
-----------------------------------
我用msflshtool.exe可以解出来

[ 本帖最后由 paulsky 于 2008-7-7 13:18 编辑 ]

TOP

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

TOP