- UID
- 1771204
- 精华
- 0
- 帖子
- 95
- 主题
- 18
- 积分
- 419
- 阅读权限
- 30
- 威望
- 37
- 活跃度
- 195
- 性别
- 男
  
 - 精华
- 0
- 帖子
- 95
- 金币
- 2625
- 注册时间
- 2005-12-24
|
发表于 2006-9-22 19:08:03
|显示全部楼层
设想如下:
{9 o ?( R$ |: A我觉得不能再用特征码搜索的办法了,需要用上反编译和汇编语言的知识了,老毛子在空白区域重新写了一段中断跳转处理程序,把原来的跳转处理程序的入口地址改成新地址,新程序应该还包括处理完后回到原来地址的命令,主要是要找准main中跳转地址的位置,还有如何回到原位置的问题,可惜我不咋懂汇编和反编译
/ E% z$ d6 X- b! U* Y
2 e: s) g3 ?6 |6 x1 @举个例子说:4 X$ R C1 o( V: Z* I( D2 R/ X
;W800 SW-R1BC002& ~. F3 O3 E# L4 R' [
;FlashLight on/off by "camera" button
, X* y: e4 O+ F- N7 S& C;(C)SiNgle
5 K9 w+ v1 ]9 p;(P)romeo6 O& ~( ~2 r# w: }6 t
;(P)Ju Ming/ d. w( ~% u, C7 j- N0 W
+44000000
- ~" X6 j& P, C+ ?& q+ U2568D4: C5401045 C4B63445 ;这一行估计是修改了中断程序的入口地址,可能就是地址,前面旧地址,后面新地址,不包括命令,不同版本或许旧地址不一样,所以就算用特征码搜索到,也可能没什么意义。, P1 c" N5 E' R4 W
4 M1 d, w0 O7 Z1 d, n. N8 o" E$ O- G;下面应该就是正式的处理中断的新程序,就这一个例子就开关灯的命令集了6 G6 X! n0 x: j, D! K, g: ~/ Z) d$ W
134B6C4: FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FE402DE930209FE50030D2E5010053E3" M7 Y; @2 d* S& a2 s9 @( d; n
134B6D4: FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 0030A0030000A0030130A0131E00A0130 n/ W- B0 ?8 e i$ l
134B6E4: FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 0030C2E51210A0E30620A0E30FE0A0E1# a7 d+ O" Y2 V1 b" m. T0 Q0 D
134B6F4: FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 08F09FE50100A0E3FE80BDE89CE3064C0 F" s$ J) q: k* l l
134B704: FFFFFFFF AD8F0245 9 U5 N5 z; `. q$ ?) p- a+ I9 S
;最后一两行,估计包括回到原位置下一条命令地址的跳转命令4 e0 t- g; q% M: P: e
============
% C( c1 [$ \& O& y我所要确定的有两个要点:1。旧地址八位数值所在的位置 2。新程序返回的地址的八位数值# ^: n: J& n/ }7 }& U
+44000000
9 j! f( U5 P) Z- x) C2568D4: C5401045(旧地址451040c5) C4B63445(新地址4534b6c4). o! U5 j+ v* A- j% [6 _
134B6C4: FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FE402DE930209FE50030D2E5010053E3% G L7 ~' g8 f6 n
134B6D4: FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 0030A0030000A0030130A0131E00A013
4 g' u! ]" X2 }6 c @134B6E4: FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 0030C2E51210A0E30620A0E30FE0A0E1
. t8 U4 l" O. R2 w. U& \134B6F4: FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 08F09FE50100A0E3FE80BDE89CE3064C
$ Z7 g/ g8 q0 H, z1 j9 v8 ^. B134B704: FFFFFFFF AD8F0245 (一般最后是返回命令,操作数在后,命令在前,假定这最后8位就是返回地址 45028fad)# r( @) @: ?: V3 g0 P$ V6 i/ c
a。分析要点19 c) w- o) ^( Q U, s
从匹配的原版本入手,按照旧地址数值,找到其具体位置,在这个位置,选取一段足够长的特征码,在目标版本中搜索,确定出相应旧地址的数值,原版旧地址数值处(2568d4)前面的数值可能就是跳转命令代码,然后在目标版本中以目标版本旧地址数值,前面连上原版本旧地址数值处前面的部分代码,作为特征码进行搜索。就可以确定要点1了
, \& T# {5 T. n
/ h& K# `1 w7 D# {9 rb。分析要点2
" I; H( n- L; }/ ~& U假定45028fad就是返回地址,找到原版本中返回地址处的代码,取一合适的部分作为特征码在目标版本中搜索,确定出目标版本的返回地址的数值
6 a# H( p% Z3 E5 i. k
5 X% J1 z( W1 R; }$ L这只是我的设想,还没时间去慢慢验证,仅供大家参考. {* G7 g+ B$ h/ \" A' _
0 G8 g$ s# `) E+ }
当然老毛子的有些补丁不仅仅是修改个入口地址这么简单,有些还修改了原来的命令,那就要分析出他的设计思想才能一步步的移植了,
6 x `7 r& R) m8 K9 F) j================3 T: b# c( W9 B) Z) T
现在我开始行动了,经过20分钟的琢磨终于把上例子800r1bc002 的Light_On_Off_by_Camera_button补丁成功移植到我自己的800r1aa008上,代码如下
! j* V7 v e5 ^/ o6 Z;for w800 r1aa0080 M" C1 [) O- Z& [# r& a5 e _
+44000000
8 d4 ~4 Y7 t" M- E4 |2 Q4 z255B28: 552F0F45 C4B63445
+ A/ ?0 J' m* Z6 `' F134B6C4: FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FE402DE930209FE50030D2E5010053E3
- b# l7 a5 @1 U* S8 m5 U134B6D4: FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 0030A0030000A0030130A0131E00A013
0 p5 n- r# p6 l; [134B6E4: FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 0030C2E51210A0E30620A0E30FE0A0E1& T3 T% ^- _3 _
134B6F4: FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 08F09FE50100A0E3FE80BDE89CE3064C
$ |' v- P. g! ?- t' Y- A/ a134B704: FFFFFFFF B5880145
# |- ?6 o. L5 X6 ~刷机试验,果然收可以当手电筒用了,其他一切正常,终于研究出一个补丁的移植了,呵呵,很高兴啊,不过还有几个有待研究,尚须继续努力
6 k7 @& I4 D; j我不太喜欢800r1bc002版本,所以一直用800r1aa008的
& y0 D- P: l! y) X
; }2 I( T j: H我提供了一种移植vkp到其他版本的思路和方法,抛砖引玉,希望高手们在这个基础上更进一步!
) I4 t2 s% ^2 r" F# b
( S: J8 W/ z' h[ 本帖最后由 xanadus 于 2006-9-23 09:56 编辑 ] |
-
1
查看全部评分
-
|