狂风当道 发表于 2008-6-27 01:05:43

三星Swift系统手机补丁移植制作教程(1)初级类

首先,说说手机补丁是什么东西,如何起作用的。我们刷机时所用到的固件(firmware),
实际上是源代码经过编译后的目标代码。一个程序的源代码可以是高级语言,例如c语言,
或是汇编语言,或是二者的嵌套,但最终需要硬件能识别执行的是机器指令,这就是目标
代码,其文件是二进制或十六进制数据文件。而手机补丁的原理是通过修改编译后的数据
改变其功能。比如分钟提示音的间隔时间,通过高级语言编译后,60秒这个数值,即60这
个数值,在编译后的固件中是存放在一个地方的,找到这个地方,改成其他数值,就实现
了把间隔时间做了调整,这是最简单的方式。
“工欲善其事,必先利其器”。做补丁需要一些基本的软件作为开发的工具:Hex Workshop,
UltraEdit。(点击其名称进行下载)软件如何安装使用后面再说。
上面说了补丁的基本原理,那么补丁是如何改变固件的数值的呢?对于三星Swift系统手机
俄罗斯玩家为此开发了Resman这种手机固件的编辑软件。补丁文件,即后缀名为smp的文件。
通过Resman,可以对固件中制定位置的数据进行替换。也就是本来要通过手工一处一处改固
件的繁杂工作,可以通过Resman自动完成。
上面对补丁的说明不知道是否清楚,下面以一个例子来说明如何移植制作一个补丁。
首先安装UltraEdit,这个软件不是必须的,但我觉得这个软件用来看源代码以及补丁文件
最方便,因为它有语法高亮显示。安装完毕,把压缩包里的wordfile.txt文件拷到安装目录
下,替换原文件。这样,用UltraEdit打开smp文件或asm文件,会自动语法着色。当然,用
记事本也可以打开上述两个文件,就是看着没那么舒服罢了。然后安装Hex Workshop,安装
没什么难度。这样,最基本的移植环境就建立起来了。
接着,需要补丁文件,也就是俄版的补丁。这里要说明一下,目前三星几乎所有的补丁,几
乎都是从俄罗斯的论坛里找到的。俄罗斯的一些高手原创了这些补丁,但是根据俄罗斯的固
件做的,以G608来说,俄罗斯的固件版本是G600XEGL1(点击此处下载)。但问题来了,俄版
补丁显然是无法在中文固件上使用的,因为补丁要修改的数据的数值、位置(也就是地址)
都不尽相同。我们要做的工作就是把俄版的补丁对固件的修改,在中文固件中实现。以Java
安装文件扩展至7M为例,其俄版补丁,用UltraEdit打开如图。
http://download.52samsung.com:82/52_admin_upload/michael_wind/pic/Swift_Pathes_Tech/smp_file_open.jpg
其重点内容为:
  <changes>
   <nord offset="0x01846B57" from="03" to="04" type="CODE" />
  </changes>
这就是补丁起作用的部分,这个补丁就是做了这处数值的修改。
用Hex Workshop打开G600XEGL1.cla固件,Alt+g转到1846B57这个地址,如图。
http://download.52samsung.com:82/52_admin_upload/michael_wind/pic/Swift_Pathes_Tech/hexworkshop_L1.jpg
为了找到G608ZCHA1中的对应位置,查找其后面的一段数“030124914200D80024012C03D10622”。
在G608ZCHA1中Ctrl+f,这段数,找到一处,如图。
http://download.52samsung.com:82/52_admin_upload/michael_wind/pic/Swift_Pathes_Tech/Java_pathes.jpg
从两个文件的这两段数据的对比上看,及其相似,所以这里有可能就是我们要找的G608ZCHA1
中对应的位置。所以修改的这句应改为:
<nord offset="0x00AF08FF" from="03" to="04" type="CODE" />
移植后的G608ZCHA1补丁为:
<?xml version="1.0" encoding="Windows-1251"?>
<patch version="0.5">
<info title="扩展java安装程序" id="88CDA091" group="Java" version="1">
  <description short="补丁作用:扩展java安装程序至7M" />
  <author nickname="ruoyi850" fullname="" status="" email="ruoyi850@163.com" www="" icq="19761740" />
  </info>
<patchdata firmware="G608ZCHA1" mode="C100"  >
  <changes>
   <nord offset="0x00AF08FF" from="03" to="04" type="CODE" />
  </changes>
</patchdata>
</patch>
是不是很简单?这里之所以搜索03后面的一段数据是为了更准确的找到03对应的位置,如果
直接搜索03,将搜索出无数个结果。
上面这种补丁是最简单的数值修改,这种简单的数值修改的补丁十分少,举这个例子不过是
想揭开补丁什么的面纱而已。下面我们再来看一个补丁,上网去确认。其改变部分:
<nord offset="0x10E8524" from="843CCE20" to="CCCA5C21" />
我们在L1里转到10E8524,复制843CCE20,在A1里搜索结果为0.想这样的数值修改就无法用
上面讲的方式进行移植。这里就有必要讲一下三星Swift系统手机固件的一个特点。Swift系
统中的一些手机固件,其编译地址是从0x20000000开始,并且地址和指针之间颠倒调用。在
编译时还用到了字节翻转,其翻转规则是,一个数据843CCE20,按字节翻转后变为20CE3C84,
而在固件中以20或21结尾的数,很有可能表示一个指针,其指向的实际地址为翻转后的地址。
即843CCE20是个指针,其指向地址为20CE3C84,在固件中为00CE3C84。如果指针是843CCE21,
则指向的地址是01CE3C84.如果对这个理解不是很清楚也没关系,知道转换规则就可以。我们
现在在L1中转到843CCE20这个指针指向的地址00CE3C84,在A1中搜索:
5C00000000000000000000000000000017161300000000000000000000000000
http://download.52samsung.com:82/52_admin_upload/michael_wind/pic/Swift_Pathes_Tech/waprequest_pathes.jpg
找到3处,对比这3处,发现最下面的与L1中附近的数据最相似。不妨先假设最下面的这个地址
0x014D2330就是。也就是L1指向的位置,对应A1指向这里。那么A1的指针就应该是30234D21,
在A1中搜索这个指针,找到一处。再对比L1中843CCE20这个指针的位置。
http://download.52samsung.com:82/52_admin_upload/michael_wind/pic/Swift_Pathes_Tech/waprequest_pathes2.jpg
发现指针所在位置周围的数据也十分相似,说明这个有可能就是要找的指针,这样就完成了
补丁修改的前半部分,即<nord offset="0x33C900" from="30234D21" to="" />
to里面是要改的指针,找这个指针的方法类似,先在L1中找其对应地址015CCACC,在A1中搜索:
171612000100000000000000000000002A000000000000080000000000000000
找到一处,其地址为0x010D3798,所以对应要改的指针为98370D21,最终修改完成:
<nord offset="0x33C900" from="30234D21" to="98370D21" />
这里需要说明的是,如果拿不准那三个地址中的哪个,可以做实验都试试。哪个效果对了就是
哪个。
找指针的时候要注意一点,如果指针指的地方还有指针,要转到后面的指针来找。比如43210020指向1B000000000012345620,要继续找0x563412的地方。
这样,就可以完成初级类的补丁移植了。当然举的这两个例子是最具有代表性的,也相对较为
简单。但只要不涉及源代码添加的补丁,用这种方法都可以完成移植,我发几个初级类的补丁,
可以用来练手。这类补丁在分类的时候,最好能统一分为“功能完善”。对于JAVA相关的补丁,
统一分类为Java。

[ 本帖最后由 狂风当道 于 2008-7-2 11:43 编辑 ]

狂风当道 发表于 2008-6-27 01:10:33

占沙发,做更新用。

狂风当道 发表于 2008-6-27 01:11:08

再占个板凳。以备更新。

lbyao 发表于 2008-6-27 08:25:36

呵呵,终于出来了。

[ 本帖最后由 lbyao 于 2008-6-27 08:36 编辑 ]

狂风当道 发表于 2008-6-27 08:45:18

昨天晚上搞到1点多才完成。先写初级类的,看看反应如何。如果都能掌握再写牵扯到源代码的。

yingjm 发表于 2008-6-27 09:28:07

终于出来了,一直在关注了。开始学习了

qdlfk 发表于 2008-6-27 10:33:38

通俗易懂,关注中...

中华民国 发表于 2008-6-27 14:13:43

:newem003: hao  kan kan :newem001:

wcy_35 发表于 2008-6-27 16:05:29

大哥 以后我就跟你混了:newem014:

老摇1 发表于 2008-6-27 17:58:07

非常感谢!认真学习中!
页: [1] 2 3 4 5 6 7
查看完整版本: 三星Swift系统手机补丁移植制作教程(1)初级类