ROM移植 · 2009/11/04 10

三星I8000 ROM 有望合成?

I8000作为一代强机,从开始到现在,一直无人能合成其ROM,导致诸多人使用繁体官方ROM。今日我在逛论坛,看到weisun大大似乎提了一些关于合成I8000ROM的参考意见,看来I8000的ROM Kitchen出现指日可待了。

下面转一下Weisun在PDA Clan网的提出的见解,忘I8000的机油努力做出ROM呵呵。

关于三星I8000之PDA.NB0的还原合成

~~~~之我见

最近部落有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,所谓独乐不如众乐,呵呵。。

原帖地址:http://www.pdaclan.com/thread-30396-1-1.html