【转帖】VKP高级移植技术
以Protecting your important functions of the phone v2.vkp 这个补丁为例,说明一下
补丁的移植。
+44000000
29a7c8: 7984EA44 414B1D45
df1a68: 47F76CFE E3F38DF8
e283da: FFF7DDFE ACF3DFFB
fa284e: 14F0B7FD 32F2A9F9
106e026: 14F609FC 66F1B5FD
d4b43c: C943002022F3C6FD 004CA0477D4B1D45
11d4b00: FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 38B50C4C2578012D01D10025257038BD
11d4b10: FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 084C2578012D0CD001252570134C2578
11d4b20: FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 012D06D17FB404210222034B034EB047
11d4b30: FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 7FBC70BD0078034C50130000D550DE44
11d4b40: FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 3EB50A4C2578002D03D1012525700A49
11d4b50: FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 04E0012DF7D1002525700549054A0248
11d4b60: FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 92F61EFD3EBDFFFFFFFFFF6F0278034C
11d4b70: FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 9B1200005AE600006E090000C9430020
11d4b80: FFFFFFFFFFFF 99F626FABCE7
11d4b86: FFFFFFFFFFFFFFFFFFFFFFFFFFFF 70B5014CA047C0E7FFFF4597D344
11d4b94: FFFFFFFFFFFFFFFF 70B5ADF451FEBFE7
11d4b9c: FFFFFFFFFFFFFFFF 70B553F4FBFAB5E7
11d4ba4: FFFFFFFFFFFFFFFF 70B5E2F50BFCB1E7
首先,从空白地址开始,即从11d4b00 到尾,用UltraEdit-32建立一个16进制文件,如下

然后,用IDA打开这个文件,处理器类型选择如下

如下图,填入开始地址,就是44000000+11d4b00=451D4B00

打开文件后,选择 菜单的选项—常规

在机器码字节数那里填上 4

然后,点击 分析 页,点击 处理器专用分析选项

出现以下画面,勾上“Disable pointer dereferencing”,点击”ok”

再点击“重新分析程序”,点击“确定”

页面关闭后,然后按键盘的Alt + G ,出现以下画面,把值设为 1 ,按“ok”

再按键盘 C 键,进行反汇编,就会看到如下的源码

把源码复制,粘贴到记事本,把文件命名为 pass.asm ,文件名随你定,扩展名一定要为asm
1. 在文件开始加上 org patch1[patch1是随你定]
2. 要把每行前面的地址和代码去掉,
3. 把 # 去掉,例如 MOV R5, #0 改为 MOV R5, 0
4. 在loc_451D4B00,sub_xxxxxxx等语句后面加上冒号
5. 有#号的16进制的数要改为10进制,例如:MOV R3,#0xB 改为 MOV R3,11
6. 把其中出现地址以add1,add2,add3,……等命名,例如右下图的0×44E8283C, 0×44E28198, 0×44FB73C0 写成 BL add1 , BL add2 等


7. 把patch1,add1,add2…等的地址写入另一个文件,如:w800.inc ,扩展名一定为 inc
书写格式如下:
patch1=0×451D4B00
add1=0×44E8283C
add2=0×44E28198
8. 在pass.asm文件开头加上两句,变成如下:
include “x.inc”
include “w800.inc
org patch1
CODE16
Loc_451D4B00:
” PUSH {R3-R5,LR}
LDR R4, dword_451D4B34
……………
补丁中其它的不是空把地址的,如
d4b43c: C943002022F3C6FD 004CA0477D4B1D45
把004CA0477D4B1D45 这段代码写入main文件中再用IDA反汇编,方法和上面的方法,把源代码写入pass.asm文件中,每段前面记住加上 org patch2 ……等,把地址写入w800.inc文件中,
以下的asm和inc 文件是另一个补丁的
asm文件举例:
include “x.inc”
include “k750vibra-block.inc”
org add1 ;add1=0×44d47a3c
dword_44d47A3C DCD add3+1
org add2 ;add2=0×44d47a0a
BLX R2
org add3 ;add3=0×451D4BE0
CODE16
LDR R2, d_451D4C20
ADD R1, R5, 0
PUSH {R0-R7,LR}
MOV R0, 100
MOV R1, 50
MOV R2, 250
LDR R5, d_451D4C1C
Inc文件举例:
add1=0×44EA5BEC
add2=0×44EA5BBA
add3=0×45341F90
add4=0×4C037808
add5=0×450FA8F5
add6=0×44EA5E2D
add7=0×450FAA45
add8=0×44FEBDA9
最后用nj528提供的vkp汇编工具,完成补丁的制作
在dos窗口下运行 make asm文件 main文件 main文件的开始地址
例如: make pass.asm w800-r1bc002-main.raw 44020000
原文作者:超记
If you enjoyed this post, make sure you subscribe to my RSS feed!
文章分类: 手机相关
留下您的评论