这楼写一下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.51对BIN结构ROM的直接提取和合成********
Osnbtool v1.51
增强了 –sp
命令直接分离含有BIN
结构ROM
,并且在-2bin
时增加-cutheader
开关剪掉B000FF
头,以方便还原。
BIN结构在ROM中位置有几种情况。
一、ROM
包装是完整的BIN
结构:
比如ASUS-P320
的FLASH.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
即可。
二、BIN
在ROM
包装中间位置:
如OQO-G900
的ROM
:
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
时有提示。
三、BIN
在ROM
包装尾部位置:
读到这里应该已经能够类推,-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.Header
和xxx.Footer
文件生成,有的话在最后copy /b +
时都加上去,顺序是xxx.Header+xxx.BIN+xxx.Footer
。
四、
从BIN
结构ROM
分离出来的是经过转换得到的NB0
,再-sp
一次则得到了.NB0.OS.NB
。这个才是能够正确DUMP
的OS
。
五、
从.OS.NB
(或.OS.NB.NEW
)还原到BIN
必须经过以下步骤:
Osnbtool -extraxxx.OS.NB.NEW
编排扇区
Osnbtool -2binxxx.OS.NB.NEW.EXA
打包BIN
。
附加说明:
一些ROM
中BIN
结构虽然是包含B000FF
头的,但是BIN
中的起始内容并不是OS
。比如AMOI-N800
的.IMG
和SAMSUNG-i780
的.IMG
,-sp
在处理这些ROM
时直接把它当作不包含B000FF
头的来处理。
最后以AMOI-E78的ROM作解开及合成的例子:
解开:
osnbtool -sp e78.img
---得到e78.img.Header
和e78.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 编辑 ]