~~~~之我见
最新更新在一楼尾部
最近部落有DD和MM们入手了这台JJ,看网评还不错,应该挺有市场。他们跟我说目前做这个rom卡在还原OS部分的PDA.NB0的还原上,想要俺一起想想办法。。。
可惜,某早已隐退,不会再玩这些现在看来较无聊的事情了,也不会再搞什么工具等等的麻烦事儿了。
前几天正好有闲,看了看这个rom,貌似还原还是比较有希望的,故发此文共同讨论,望能帮助这JJ的玩家完成定制及精简此J的愿望。
此文主要针对已经尝试过此rom的玩家,很多主要步骤要以手工x作完成,因没有很多时间,恕不对初学者详解了,且文中所提的一些软件请自行寻找下载,望见谅!
一 、分解
分解这个rom,想必有很多人早已经架轻就熟了,这里还是简要说一下。
1、Exe一体包的分解
对于.exe的一体升级包,这个和以前三星的exe资源结构类似,没什么难度。况且,现在有俄国高手Pako777的i900_EXEcutor可以直接使用,目前貌似已经是v2.4了,诸位到modaco去下的同时,也不要忘了感谢一下此君不断更新的执著精神。
分解exe的具体过程,看了下图就明白了:(选好exe点击‘Go’即可)
顺带说一下这JJ的CSC,这JJ的CSC镜像结构较i900已经更改,i900_EXEcutor目前尚不支持分解。其实原来俺的i900tool代码改一下即可分解和还原,可是这代码。。。哎。。不提也罢。。。现今也不会再去搞了,等Comrade-777更新吧。
2、PDA.NB0的分解
这个貌似没什么难度,大家都知道OS镜像的开头跳转指令E9 FD FF。这个NB0的偏移0x100即是。用俺的旧作osnbtool也可,如下:
Osnbtool –sp pda.nb0 得到pda.nb0.os.nb,所谓的OS-RAW-IMAGE,以及一个.PRE文件(后文合成时有用)
Osnbtool –d pda.nb0.os.nb 2 imgfs.bin –acwan 得到imgfs.bin
接下来的dump等等,貌似应该是谁都会了。。。
这里osnbtool 冒出了一个 “-acwan”的奇怪参数,那是以前ACWAN大大提议对不标准尺寸的os.nb进行强制分解imgfs分区的一个隐含参数,因为一直没用,偶自己也早已淡忘,没想到现在倒是用到了。。呵呵。( 这里再说明一下,osnbtool绝没有木马,N记等杀软纯属脑残。。。
)
二 、合成
这里就到了本文关键所在。
前面用OSNBTOOL分解PDA.NB0时,分解出了PDA.NB0.PRE,这个文件为0x100长度,是这个NB0的头部信息区,奥妙就在于此:
用010editor把它打开,如下图:
上图中:
- OS.NB长度值:在偏移0x04取DWORD值,黑色框内所示
(注:这就是PDA.NB0.OS.NB,也就是RAW-IMAGE的长度)
- Blocks值:在偏移0x08取DWORD值,绿色框内所示
(这个值是指BIN的Block数量,i8000的Block长度是0x1F800,因此,要得到此值,只要把PDA.NB0.OS.NB的长度除以0x1F800即可)
- 校验值:在偏移0x0C取DWORD值,红色框内所示
(这个比较关键,其实说白了也简单,如何计算下文详述)
- 另外,头尾各一个DWORD标志,表示区段起始和结束,其他,都是ASCII字串,一看就懂,不多说了。
1、合成XIP,IMGFS等。。。这就不多说了。
要提一下的是这个ROM的IMGFS尺寸和MBR不符,因此还原时还是尽量先不要改变尺寸,用buildimgfs.exe可以保持IMGFS尺寸,如果用imgfsfromdump的话,最好先自己把新压缩好的IMGFS用HEX填充成和原来一样长度。把IMGFS插入OS.NB也因为MBR问题不被OSNBTOOL支持,自己HEX吧(大家都知道查找.os.nb中的IMGFS的GUID即可,就是F8 AC。。。。什么的,找到后把之后的内容用新的IMGFS内容替换掉即可),但是XIP和BOOT还是可以用OSNBTOOL正常x作的。会HEX修改MBR的倒是可以尝试改变OS.NB的尺寸,以真正达到精简和释放rom空间的目的。
2、还原PDA.NB0
这也是比较关键的步骤了:
** 在定制好了.OS.NB后,要注意一下如果变化了尺寸的.OS.NB要确保是BlockSize的整倍数,也就是.OS.NB的长度要能够被0x1F800整除。
下面开始说如何用010editor进行手工HEX还原:
a)用010editor打开先前的PDA.NB0.PRE,如下图:
b)把新的OS.NB的长度(十六进制,下同)值填入偏移0x04处整个DWORD(上图中黑框内),(注意字节倒序排列,下同)。
c)把新的OS.NB的长度除以0x1F800,得到的值填入偏移0x08处整个DWORD(上图中绿框内)。
d)计算新的.OS.NB的校验值,这个校验其实是CheckSum32,即依次以DWORD取值进行模和,庆幸的是不用写程序,010editor就可直接支持。用010打开新的.OS.NB,选菜单中的Tools-->CheckSum,在窗口中如下图选择确定即可:
等一小会儿,下面就会出结果了,看看下图棕色框中的即是,把它填入上面.PRE中的偏移0x0C处整个DWORD(上图中红框内,同样也要注意字节倒序),存盘完成。
e)有了新的.PRE和.OS.NB,COPY /B .PRE + .OS.NB PDA.NEW.NB0即可开刷了。
以上言论乃一己之见,只提供参考,对一切不可预知的后果不负任何责任,敬请三思而后行!
如若能够依此方法成功定制自己的rom,也请发扬共享之精神,并希望有人能写出比较方便的程序及kitchen,所谓独乐不如众乐,呵呵。。
11.06更新
今天试了下原来支持i900的imgfsfromdump.exe还是不够内存去打包这变态的imgfs,就改了下贴出来。在二楼。
~~感谢Acwan大大提供源码。
11.07更新
这里写下如何尝试修改.os.nb的大小。
由于不一定会修改MBR,而osnbtool又不支持这个长度和mbr不符的rom,因此就要用010editor填充原来的pda.nb0.os.nb到osnbtool认为合法的尺寸。x作方法如下:
1、用010打开原来的pda.nb0.os.nb,拖动滚动条到文件末尾,记下原来的长度值,此例中为0x13576800,如下图:
2、010中选择菜单的Edit-->Set file size,在弹出框内填入1B200000(这个值是根据mbr算出来的正确长度,大于它也没问题),其他都如下图填写,然后确定存盘:(注:如果不知道文件应该设为多大值,可以尽可能大些,大于等于标准长度,osnbtool都能支持的,但也不要太大,怕PC内存吃不消。这里示例的是联通i1的rom,其他版本的rom一般在这个数量级略大基本就可以了)
3、执行osnbtool -c pda.nb0.os.nb 2 imgfe.new (假设这个imgfe.new是新的改变了尺寸的imgfs),可以看到执行成功了,并新生成了pda.nb0.os.nb.new,这个pda.nb0.os.nb.new由于是osnbtool生成的,所以已经把MBR按新的imgfs长度修改了。
4、还原pda.nb0.os.nb.new到不标准的长度,用010打开新生成的pda.nb0.os.nb.new,重新Set file size,可以先试试原来rom的长度,在这里即是0x13576800(填入框中时不用写"0x"),也可以用010看着尽量删除文件末尾更多的FF填充段以减小文件尺寸,但是要注意这个长度要能够被0x1F800整除。
之后存盘,修改.PRE,copy/b + 即可试验刷机了。
[
本帖最后由 weisun 于 2009-11-7 22:39 编辑 ]