- 积分
- 207
- 实力分
- 点
- 金钱数
- 两
- 技术分
- 分
- 贡献分
- 分
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?注册会员
x
手机不幸挂掉,趁重新刷系统的机会
整理下以前的资料
以我发的这个帖子中的未接提醒为例子
建议先阅读下,文章后面的几篇相关文章再阅读,否则可能有点吃力
用小2机会也不是太多,写这个文章得目的是为了回忆下过去
http://mobile.0110.cn/viewthread ... &extra=page%3D4
;---------------------------------------------------------------------------------------
;*** Reminding about the propushchenykh calls v2.3 of *** c Sinclair
;Firmware: C55v24
;Author: Sinclair
;It is renovated: On 16:50 18 June, 2004.
;Modified: Baloo
;For reduced lengpaka, does not interrupt conversation
;It requires patch of *** Initialization with the start *** c Sinclair
612050: CC00CC00 DAE1C826
612650: FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DA9130F5D7400300F2F4243D67F90800
612660: FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 3D1FDACF4AEE48403D17DAC508E44840
612670: FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 3D13D7405600F3F20E139AF10560DACC
612680: FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 0A9C28414843FD08DA83A8B470453D04
612690: FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DA8384B470452D04E6FC3B00DA940891
6126A0: FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF E6FC5026E6FDE10088D088C0E00E88E0
6126B0: FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF E6FCF003E00DE6FE3B04E6FF0000DA92
6126C0: FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF D62E0806FA913AF5F78E3AF6DA9130F5
6126D0: FFFF 0DE7
;612668: 3D17 CC00 ; to open signal about Notes
;612670: 3D13 CC00 ; -//- Alarm
;612686: FD08 CC00 ; -//- SMS
;61269A: 3B XX ; Replacement of the sound of
;6126B8: 3B04 XXXX ; Change of the interval of reminders. 043B = 5 seconds. 1 second = 216,57 (decimal), 10 seconds = of 2165,7
;6126BC: 0000 YYYY ; from where we obtain 0x0876 (HEX), consequently value for patcha - 7608
反汇编的结果
ADIS16X V3.0 - LOG-File
00050 : DA 91 30 F5 CALLS Invalid Coding
00054 : D7 40 03 00 Invalid Opcode#03H,#1
00058 : F2 F4 24 3D MOV R4,3D24H
0005C : 67 F9 08 00 ANDB RH4,#0008H
00060 : 3D 1F JMPR CC_NZ,00A0H
00062 : DA CF 4A EE CALLS Invalid Coding
00066 : 48 40 CMP R4,#0
00068 : 3D 17 JMPR CC_NZ,0098H ; to open signal about Notes
0006A : DA C5 08 E4 CALLS Invalid Coding
0006E : 48 40 CMP R4,#0
00070 : 3D 13 JMPR CC_NZ,0098H ; -//- Alarm
00072 : D7 40 56 00 Invalid Opcode#56H
00076 : F3 F2 0E 13 MOVB RL1,130EH
0007A : 9A F1 05 60 JNB R1.6,0088H
0007E : DA CC 0A 9C c86ab5 CALLS Invalid Coding短消息
00082 : 28 41 SUB R4,#1
00084 : 48 43 CMP R4,#3
00086 : FD 08 JMPR CC_ULE,0098H ; -//- SMS
00088 : DA 83 A8 B4 CALLS Invalid Coding
0008C : 70 45 OR R4,R5
0008E : 3D 04 JMPR CC_NZ,0098H
00090 : DA 83 84 B4 CALLS Invalid Coding
00094 : 70 45 OR R4,R5
00096 : 2D 04 JMPR CC_Z,00A0H
00098 : E6 FC 3B 00 MOV R12,#003BH 选择声音的种类
; Replacement of the sound of
0009C : DA 94 08 91 CALLS Invalid Coding播放声音函数
000A0 : E6 FC 50 26 MOV R12,#2650H
000A4 : E6 FD E1 00 MOV R13,#00E1H
000A8 : 88 D0 MOV [-R0],R13
000AA : 88 C0 MOV [-R0],R12
000AC : E0 0E MOV R14,#00H
000AE : 88 E0 MOV [-R0],R14
000B0 : E6 FC F0 03 MOV R12,#03F0H
000B4 : E0 0D MOV R13,#00H
000B6 : E6 FE 3B 04 MOV R14,#043BH ; Change of the interval of reminders. 043B = 5 second
000BA : E6 FF 00 00 MOV R15,#0000H
; from where we obtain 0x0876 (HEX), consequently value for patcha - 7608
000BE : DA 92 D6 2E CALLS Invalid Coding
000C2 : 08 06 ADD R0,#6
000C4 : FA 91 3A F5 JMPS Invalid Coding
000C8 : F7 8E 3A F6 MOVB 0F63AH,ZEROS
000CC : DA 91 30 F5 CALLS Invalid Coding
000D0 : 0D E7 JMPR CC_UC,00A0H
首先看一下这个程序,※)×)×)跳转,系统参数太多,看不懂怎么办。。。-_-:L
继续往下看,嗯,老外给的补丁86那句代码有个说明:;612686: FD08 CC00 ; -//- SMS
大意是不运行这句话就能关闭sms未接提醒
抛开前面系统参数,发现程序的中间有好几个步骤十分类似都是:
1:运行一个函数,这里以7e行短消息为例子 call 4C 0A 9C (语句DA CC 0A 9C)
2.对R4的值进行加减
3.比较R4和3是否相等
4.如果相等跳到98语句
联想这个程序共提供了三种未接的提醒,研究另外两个类似的程序块发现,这几个步骤
都是比较R4和某一数值,如果相等就跳到98语句
继续研究下98语句
00098 : E6 FC 3B 00 MOV R12,#003BH
; Replacement of the sound of
0009C : DA 94 08 91 CALLS Invalid Coding
发现了没有,9C调用了940891这个函数,这个函数在小2是发声的函数
继续联想,发现每种未接提醒都需要比较R4,而比较前并没有取系统参数值(2128运行内存中临时的数值,比如时间,最新打入的电话号码等。有固定的地址),也就是说很可能R4这个数值是由运行了某个函数而被赋值的,
回过头阅读程序,可以判断在短消息提醒里应该是CC0A9C这个函数
所以大胆假设4C0A9C函数可以读取系统参数,来判断有没有未接短消息
接下来我们可以有两个方法
方法1。在2128里查找和C55里CC0A9C相同的函数
工具可以用sfe,具体方法这里不详细介绍
然后照样画葫芦移植,ok
方法2:猜测终归是猜测,而且就算把三个未接函数的全找到了,咱也不晓得老外
这个程序啥意思,搞不好有啥副作用,所以我们要找到代表未接的系统参数具体地址
步骤:
1. 用sfe找到和C55里4C0A9C相同的函数48B56A
2. 程序不长,汇编下,嗯我看~~~~看。。。。zzzZZZ
48B56A: 28 06 : sub r0, #6
48B56C: E0 0C : mov r12, #0
48B56E: C4 C0 02 00 : mov [r0+#2], r12
48B572: B8 C0 : mov [r0], r12
48B574: C4 C0 04 00 : mov [r0+#4], r12
48B578: DA 84 E0 33 : calls 84h, loc_8433E
48B57C: 48 41 : cmp r4, #1
48B57E: 3D 07 : jmpr cc_NZ, loc_48B
48B580: E6 00 58 00 : mov DPP0, #58h
48B584: E0 1C : mov r12, #1
48B586: F6 FC 30 18 : mov mem_161830, r1
48B58A: EA 00 28 B6 : jmpa cc_UC, loc_48B
;---------------------------------------------
48B58E: E0 2C : loc_48B58E:
48B58E: E0 2C : mov r12, #2
48B590: 00 C0 : add r12, r0
48B592: 66 FC FF 3F : and r12, #3FFFh
48B596: F2 FD 02 FE : mov r13, DPP1
48B59A: DA 84 C8 33 : calls 84h, loc_8433C
48B59E: 48 40 : cmp r4, #0
48B5A0: EA 20 28 B6 : jmpa cc_Z, loc_48B6
48B5A4: F0 C0 : mov r12, r0
48B5A6: 66 FC FF 3F : and r12, #3FFFh
48B5AA: F2 FD 02 FE : mov r13, DPP1
48B5AE: DA 84 BC 33 : calls 84h, loc_8433B
48B5B2: 48 40 : cmp r4, #0
48B5B4: EA 20 28 B6 : jmpa cc_Z, loc_48B6
48B5B8: E0 4C : mov r12, #4
48B5BA: 00 C0 : add r12, r0
48B5BC: 66 FC FF 3F : and r12, #3FFFh
48B5C0: F2 FD 02 FE : mov r13, DPP1
48B5C4: DA 84 D4 33 : calls 84h, loc_8433D
48B5C8: 48 40 : cmp r4, #0
48B5CA: 2D 2E : jmpr cc_Z, loc_48B6
48B5CC: D4 C0 02 00 : mov r12, [r0+#2]
48B5D0: 48 C0 : cmp r12, #0
48B5D2: FD 06 : jmpr cc_ULE, loc_48
48B5D4: E6 00 58 00 : mov DPP0, #58h
48B5D8: E0 3D : mov r13, #3
48B5DA: F6 FD 30 18 : mov mem_161830, r1
48B5DE: 0D 18 : jmpr cc_UC, loc_48B
;---------------------------------------------
48B5E0: A8 C0 : loc_48B5E0:
48B5E0: A8 C0 : mov r12, [r0]
48B5E2: 48 C0 : cmp r12, #0
48B5E4: FD 06 : jmpr cc_ULE, loc_48
48B5E6: E6 00 58 00 : mov DPP0, #58h
48B5EA: E0 2D : mov r13, #2
48B5EC: F6 FD 30 18 : mov mem_161830, r1
48B5F0: 0D 0F : jmpr cc_UC, loc_48B
;---------------------------------------------
48B5F2: D4 C0 04 00 : loc_48B5F2:
48B5F2: D4 C0 04 00 : mov r12, [r0+#4]
48B5F6: 48 C0 : cmp r12, #0
48B5F8: FD 06 : jmpr cc_ULE, loc_48
48B5FA: E6 00 58 00 : mov DPP0, #58h
48B5FE: E0 4D : mov r13, #4
48B600: F6 FD 30 18 : mov mem_161830, r1
48B604: 0D 05 : jmpr cc_UC, loc_48B
;---------------------------------------------
48B606: E6 00 58 00 : loc_48B606:
48B606: E6 00 58 00 : mov DPP0, #58h
48B60A: CC 00 : nop
48B60C: F6 8E 30 18 : mov mem_161830, ZE
48B610: E6 00 58 00 : loc_48B610:
48B610: E6 00 58 00 : mov DPP0, #58h
48B614: CC 00 : nop
48B616: F3 F2 39 18 : movb rl1, mem_16183
48B61A: 3D 06 : jmpr cc_NZ, loc_48B
48B61C: F2 FC 30 18 : mov r12, mem_16183
48B620: 48 C4 : cmp r12, #4
48B622: 3D 02 : jmpr cc_NZ, loc_48B
48B624: F6 8E 30 18 : mov mem_161830, ZE
48B628: E6 00 58 00 : loc_48B628:
48B628: E6 00 58 00 : mov DPP0, #58h
48B62C: 08 06 : add r0, #6
48B62E: F2 F4 30 18 : mov r4, mem_161830
48B632: DB 00 : rets
3. 其实也蛮长的-_-,看不明白也没关系,我们只所需要的是知道R4是怎么赋值的所以我们从后向前看,看看程序结束前什么把值赋予R4这个变量
4. 倒数第二句,48B62E: F2 F4 30 18 汇编的意思mov r4, mem_161830
5. Bingo!这句就提供我们所需要的系统参数地址 161830 ,这句话的意思是将内存的mem
(memery)161830处的值赋值给R4
既然找到了这个系统参数,我们就可以写我们的函数了
举个简单的例子
设一个变量x
将内存161830处值赋值给这个变量x
将x和0作比较(一般0作为假,空无的意思)
如果是0表示没有未接短消息,直接跳转到程序终止函数
如果不是0,跳到发声函数,提醒
如果要隔多少时间提醒一次
无非再加上判断时间的函数
暂告一段落
[ 本帖最后由 fef 于 2005-11-17 16:49 编辑 ] |
|