【转帖】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!

tags: , , ,

文章分类: 手机相关

留下您的评论