爱技术

 找回密码
 注册会员

QQ登录

只需一步,快速开始

微信登录

微信扫一扫,快速登录

搜索
楼主: wwssff
收起左侧

[讨论建议] 我决定汉化56版, (2006-01-27成功显示汉字)

[复制链接]
发表于 2006-2-20 06:57:10 | 显示全部楼层
结果怎么样了??
期待!
回复 支持 反对

使用道具 举报

发表于 2006-2-20 17:16:08 | 显示全部楼层
支持楼主,可惜俺出不了什么力啊!遗憾!!!
回复 支持 反对

使用道具 举报

发表于 2006-2-20 17:44:52 | 显示全部楼层
已经一个月无法从论坛下载任何东西了~~~~~~崩溃欲死
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-2-20 19:30:48 | 显示全部楼层
别担心,输入法还没那么快见世面呢, 呵呵。
回复 支持 反对

使用道具 举报

发表于 2006-2-20 19:40:55 | 显示全部楼层

回复 #404 wwssff 的帖子

呵呵
看见必顶。。

最近才发现狼大的那个dump栈和寄存器的补丁真是好。。。
可以看到哪里calls了。。。
回复 支持 反对

使用道具 举报

发表于 2006-2-20 19:49:36 | 显示全部楼层

回复 #404 wwssff 的帖子

一次不过瘾

再支持一次。。。

输入法。。。

对了,写信问问rst7怎么样?云河,他写了ted出来,对输入法有一定的了解。。。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-2-20 20:33:03 | 显示全部楼层
狼大的DUMP在那儿?英文网发过贴了,估计非汉字地区不存在输入法问题,他们少研究吧。手机都出现几十年了,一直都是那三种输入法的天下,说明打破那三种输入法不容易。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-2-20 20:36:11 | 显示全部楼层
我估计T9输入法一定有个标准的格式,但就算我们掌握了也脱离不了那种陈旧的输入方式,还不如不受影响的另搞一套,说不定自己弄出来的比T9强多了。
回复 支持 反对

使用道具 举报

发表于 2006-2-20 21:33:15 | 显示全部楼层

回复 #407 wwssff 的帖子

我是说对如何取字。。。
他的ted不是用到了fnt文件来输入?

狼大dump文件在这里
只找到两个,原版,我自己改的当垃圾清了。。。


在Patch中,一般的困惑就是,看到一段Flash,都是静态的内容,但如果做过Crack的都知道,需要加以动态调试才能深入了解软体的运行过程,可是西门子不会大方的送给我们开发板,那么只能自己想一些办法来。在Flash中,一般的如果是全局数据的话,我们可以看代码段或用AT指令看数据段。但如果是栈区的内容不同方法就无能为力了,此外还有函数的调用栈,这是使用的是系统栈。针对这个我写了两个小程序,一个是Dump一段连续内存,另一个是打印当前的调用栈,大家感兴趣的可以看一下!

dump栈
;DumpCS.asm

;Address for Patch Data
org        1F8000h ;Free Space in Flash (CHANGE THIS)

mov  [-r0],r12
mov  [-r0],r13
mov  [-r0],r14
mov  [-r0],r15
mov  r4,#8      ;Dump栈的深度

; cmp  r12, #243h         ;可能满足某种条件才Dump
; jmp  CC_NZ, ProcEnd

mov  r15, r4
mov  r14, #1000h        ;Dump到C:1000,然后用at+cgsn查看
PopProc:
pop  r12
pop  r13
extp #0Ch, #1
mov  [r14],r12
add  r14,#2
extp #0Ch, #1
mov  [r14],r13
add  r14,#2
mov  [-r0],r12
mov  [-r0],r13
sub  r15,#1
jmp  CC_NZ,PopProc

mov  r15,r4
PushProc:
mov  r13,[r0+]
mov  r12,[r0+]
push r13
push r12
sub  r15,#1
jmp  CC_NZ,PushProc

ProcEnd:
mov  r15,[r0+]
mov  r14,[r0+]
mov  r13,[r0+]
mov  r12,[r0+]
;   TODO
    cmp     r12, #1388h
rets

END



;DumpMemory.asm

$Segmented
$Mod167

;Memory Function
Memchr    EQU 0C78360h ;Finds characters in a buffer. R12 = Offset R13 = Page R14 = Char R15 = Size
Memcmp    EQU 0C78388h ;[R0] = Size.
Memcpy_Src_LT_Dst EQU 0C77430h ;Memory copy. R4 = SrcOff R5 = SrcPag R10 = DstOff R11 = DstPag R3 = Size
Memcpy    EQU 0C783DCh ;[r0] = size r12 = Dstoff  r13 = Dstpag r14 = Srcoff r15 = Srcpag
;String Function
Strcat    EQU 0C784A6h ;Append a string. r12 = Dstoff  r13 = Dstpag r14 = Srcoff r15 = Srcpag
Strchr    EQU 0C784CCh ;Find a character in a string. R12 = Offset R13 = Page R14 = Char
Strrchr    EQU 0C785CCh ;Scan a string for the last occurrence of a character.
Strcmp    EQU 0C784EEh ;Compare strings. r12 = Dstoff  r13 = Dstpag r14 = Srcoff r15 = Srcpag
Strcmp_Size   EQU 0C78578h ;Compare strings. [R0] = Size
Strcpy    EQU 0C78516h ;Copy a string. r12 = Dstoff  r13 = Dstpag r14 = Srcoff r15 = Srcpag
Strcpy_FillSize  EQU 0C7859Eh ;Copy a string,Fill #FF1Ch. [R0] = Size
Strcspn    EQU 0C785F0h ;Find a substring in a string.r12 = Setoff  r13 = Setpag r14 = SubSrcoff r15 = SubSrcpag
Strset    EQU 0C78416h ;Set characters of a string to a character.R12 = Offset R13 = Page R14 = Char R15 = Size
GetLength   EQU 0C78536h ;R12 = Offset R13 = Page R4 = Length

;AT Function
SendATCommand  EQU 0CC9DCCh ;Send reply string.

;Address for Patch Data

Patch_Address    EQU 1F8000h ;Free Space in Flash (CHANGE THIS)

Patch Section Code Word At Patch_address ; Start Patch at Patch_Address
;-------------------------------------------------------------------------------;  
    main proc far  ; start main of patch
;///////////////////////////////////////
;ToDo,补充被修改的位置的指令
;///////////////////////////////////////
    MOV  [-R0],R12
MOV  [-R0],R13
MOV  [-R0],R14
MOV  [-R0],R15
MOV     R14,R12         ;需要Dump内存的offset
MOV     R15,R13         ;需要Dump内存的Page
MOV  R12,#400H        ;Dump的内存数量
MOV  [-R0],R12
MOV  R12,#1000H      ;Dump到0c:1000,有大段空间(约A00),如果是多次Dump,需递增地址
MOV  R13,#0CH
CALLS SEG(Memcpy),SOF(Memcpy)
ADD  R0,#2
MOV  R15,[R0+]
MOV  R14,[R0+]
MOV  R13,[R0+]
MOV  R12,[R0+]
;///////////////////////////////////////
;ToDo,补充被修改的位置的指令
;///////////////////////////////////////
  RETS
    main endp
;-------------------------------------------------------------------------------;  
Patch   EndS

CHANGEBYTE Section Code Word At 0x35622A ; Start Patch at Patch_Address
CHANGE PROC FAR
CALLS  SEG(Patch_address+0xA00000),SOF(Patch_address+0xA00000)
CHANGE ENDP
CHANGEBYTE ENDS
END




此外,还可以Dump所有的寄存器的值,这个Riza曾经写过一个Dump寄存器,和上面的类似,但是很简单,我也写过一个,这个找不到了,关键是要能Dump多次的信息,就是在Ram中增加一个计数,然后滚动的向前Dump。



?动态的寻找数据或转跳点真的是太需要了,大概看了一下dump程序,好像是把给定地址的数据复制400h字节到0c:000处,如何使用呢,是不是将需要的地址参数刷入,然后通过at调用查看呢?


对,是这样的。般的程序都只用R12,R13,R14,R15作参数。如果是键盘处理程序,会把按键的相关信息放在R15:R14里,而把主程序传入的参数放在R13:R12里,这样你可以在常用的mov r8,r12 mov r9,r13的地方hook,dumpR13:R12的内容,就可以看到很多感兴趣的东西,比如短消息列表V2的信息就是如此。

而DumpCS的用处也很大,比如你只知道某个地方显示了一个信息,那么你可以找到语言文件中信息的ID,然后Hook函数GetUStringByID,根据调用栈找到你感兴趣的地方。


Dump的调用栈在内存中显示从1000开始,是从栈顶到栈底,一般情况如果是键盘处理,很容易看到后面是系统的中断函数了。需要注意Jmps并不会把调用地址压入系统栈。


哦?这样子的啊。
狼大的意思是说,将程序挂载到某一函数后,还能发现是哪里的程序调用它了吗,那就太有用了。
不知道c167种调用时压入的顺序是什么,先是segment,然后是offset?如果是中断flag等是否也压入保存呢?盼狼大指点。

关于追踪jmps转跳地址,pinky在x86上一般用回调的方法,不知道在c167中是否仍然可用的说~

在X86中,系统栈和用户栈是通用的,而在C166中,一般是Push和Pop操作系统栈,主要存放系统信息,比如指令地址,它是先压Seg,后压Off。而用户栈一般是用[R0]作为栈顶来使用。

这样子啊~Pinky有些明白了
还有一点,在c166中如果用户程序碰到ret指令,是从[r0]栈中弹出返回地址,还是从系统栈呢?
系统栈里的内容有没有办法像x86那样通过指针寄存器来操作修改呢?


遇到rets才是从系统栈返回,ret并不存取系统栈。你可以用push在pop的办法修改。

比如常用的用函数指针调用一个函数的办法

push r5

push r4

rets
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-2-20 21:40:26 | 显示全部楼层
越看越糊涂,哈哈。
我现在还在一直找合适的码表,双对码表加入拼音重码还是有点高,有720个重码,如果再找不到合适的码表就先用着好了,以后找到更好的码表再说了,双对码表看起来很好学的。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-2-20 21:43:31 | 显示全部楼层
TAD.BIN估计没负责输入, 连microREAD都是调用输入法, 说明输入法可以由JAVA来调用的.
回复 支持 反对

使用道具 举报

发表于 2006-2-20 21:44:03 | 显示全部楼层

回复 #410 wwssff 的帖子

我觉得挺有用的
由于calls是会把下一条指令压入栈内。。。。

所以在需要的地方中断,就可以看到是哪里调用了。。。比如说在输入法的入口中断,看看是哪里在用,具体是怎么运行。。。呵呵可以连贯些的看
回复 支持 反对

使用道具 举报

发表于 2006-2-20 21:48:08 | 显示全部楼层

回复 #411 wwssff 的帖子

我看了反汇编后的ted
确实可以通过更改fnt来显示还是输入,我也不大明白
已经有人改了德文fnt文件
俄文说明看的糊里糊涂的

trustkill还写了个ted字体编辑器
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-2-20 21:59:50 | 显示全部楼层
我猜这儿是55版的编辑界面:

E3B7A6: 88 90       :         mov        [-r0], r9
E3B7A8: 88 80       :         mov        [-r0], r8
E3B7AA: 88 70       :         mov        [-r0], r7
E3B7AC: 88 60       :         mov        [-r0], r6
E3B7AE: F0 6D       :         mov        r6, r13
E3B7B0: F0 9C       :         mov        r9, r12
E3B7B2: DA D9 36 E6 :         calls        0D9h, loc_D9E636;★ 检查某些保存的值
E3B7B6: F0 74       :         mov        r7, r4
E3B7B8: 2D 04       :         jmpr        cc_Z, loc_E3B7C2
E3B7BA: DC 46       :         extp        r6, #1
E3B7BC: A8 89       :         mov        r8, [r9]
E3B7BE: 4F F8       :         bset        r8.4
E3B7C0: 0D 03       :         jmpr        cc_UC, loc_E3B7C8
;------------------------------------------------------------
E3B7C2: DC 46       : loc_E3B7C2:
E3B7C2: DC 46       :         extp        r6, #1
E3B7C4: A8 89       :         mov        r8, [r9]
E3B7C6: 4E F8       :         bclr        r8.4
E3B7C8: DC 46       : loc_E3B7C8:
E3B7C8: DC 46       :         extp        r6, #1
E3B7CA: B8 89       :         mov        [r9], r8
E3B7CC: 48 71       :         cmp        r7, #1
E3B7CE: 3D 02       :         jmpr        cc_NZ, loc_E3B7D4
E3B7D0: E0 48       :         mov        r8, #4
E3B7D2: 0D 01       :         jmpr        cc_UC, loc_E3B7D6;★ 调用输入法?
;------------------------------------------------------------
E3B7D4: E0 18       : loc_E3B7D4:
E3B7D4: E0 18       :         mov        r8, #1
E3B7D6: F0 C9       : loc_E3B7D6:            ;★★★ 调用输入法? ★★★
E3B7D6: F0 C9       :         mov        r12, r9
E3B7D8: F0 D6       :         mov        r13, r6
E3B7DA: F0 E8       :         mov        r14, r8
E3B7DC: DA E3 5A B8 :         calls        0E3h, loc_E3B85A;★ 按R12保存R14值
E3B7E0: DA D9 F2 E6 :         calls        0D9h, loc_D9E6F2;★ 找第几输入法
E3B7E4: C0 88       :         movbz        r8, rl4
E3B7E6: 48 80       :         cmp        r8, #0
E3B7E8: CD 03       :         jmpr        cc_SLT, loc_E3B7F0
E3B7EA: 46 F8 0A 00 :         cmp        r8, #0Ah
E3B7EE: CD 01       :         jmpr        cc_SLT, loc_E3B7F2
E3B7F0: E0 18       : loc_E3B7F0:
E3B7F0: E0 18       :         mov        r8, #1
E3B7F2: F0 C8       : loc_E3B7F2:
E3B7F2: F0 C8       :         mov        r12, r8
E3B7F4: 46 FC 08 00 :         cmp        r12, #8
E3B7F8: ED 1B       :         jmpr        cc_UGT, loc_E3B830
E3B7FA: 5C 1C       :         shl        r12, #1
E3B7FC: 06 FC DA 3F :         add        r12, #3FDAh
E3B800: D7 40 77 03 :         extp        #377h, #1
E3B804: A8 CC       :         mov        r12, [r12]
E3B806: 9C 0C       :         jmpi        cc_UC, [r12]
;------------------------------------------------------------
E3B808: 48 71       :         cmp        r7, #1
E3B80A: 3D 12       :         jmpr        cc_NZ, loc_E3B830
E3B80C: 0D 10       :         jmpr        cc_UC, loc_E3B82E
;------------------------------------------------------------
E3B80E: 48 70       :         cmp        r7, #0
E3B810: 3D 0F       :         jmpr        cc_NZ, loc_E3B830
E3B812: E0 18       :         mov        r8, #1
E3B814: 0D 0D       :         jmpr        cc_UC, loc_E3B830
;------------------------------------------------------------
E3B816: DA E3 8E B8 :         calls        0E3h, loc_E3B88E
E3B81A: 40 48       :         cmp        r4, r8
E3B81C: 2D 09       :         jmpr        cc_Z, loc_E3B830
E3B81E: DA E3 A8 B8 :         calls        0E3h, loc_E3B8A8
E3B822: 40 48       :         cmp        r4, r8
E3B824: 2D 05       :         jmpr        cc_Z, loc_E3B830
E3B826: DA E3 8E B8 :         calls        0E3h, loc_E3B88E
E3B82A: F0 84       :         mov        r8, r4
E3B82C: 0D 01       :         jmpr        cc_UC, loc_E3B830
;------------------------------------------------------------
E3B82E: E0 48       : loc_E3B82E:
E3B82E: E0 48       :         mov        r8, #4
E3B830: F0 C9       : loc_E3B830:
E3B830: F0 C9       :         mov        r12, r9
E3B832: F0 D6       :         mov        r13, r6
E3B834: F0 E8       :         mov        r14, r8
E3B836: DA E3 7A B8 :         calls        0E3h, loc_E3B87A;★ 按R12保存R14值
E3B83A: 98 60       :         mov        r6, [r0+]
E3B83C: 98 70       :         mov        r7, [r0+]
E3B83E: 98 80       :         mov        r8, [r0+]
E3B840: 98 90       :         mov        r9, [r0+]
E3B842: DB 00       :         rets
;------------------------------------------------------------

[ 本帖最后由 wwssff 于 2006-2-20 22:02 编辑 ]
回复 支持 反对

使用道具 举报

发表于 2006-2-20 22:09:56 | 显示全部楼层
楼主太强啦 支持!!!!!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-2-20 22:24:04 | 显示全部楼层
估计输入窗的过程是这样的:

1.出窗口
2.找第几输入法
3.显示输入法界面
4.测按键
5.如果是输入法的按键就进入输入法子程序.
6.选字后上字,然后再调出联想字.
7.如果是符号则调出符号子程序.
8.其它按键的处理
9.菜单部分按执行菜单程序,如发短信则找到内存编辑好的字串发出去.
......

我们也可以按这个过程来设计, 主要找按键处理和上字的部分, 界面可以自制, 因为消除了重码就不需要那么大的输入框了,也不用中间再选部件了,只放在最底下,我想因为重码少, 选字部分不会多,最多三个, 所以界面应该很干净的.
回复 支持 反对

使用道具 举报

发表于 2006-2-20 22:36:38 | 显示全部楼层

回复 #416 wwssff 的帖子

过程可能是这样
但是由于是c166是基于消息的多任务系统,其间某些任务肯定是发送消息来完成的。。

看看这里,一个不错的在线调试工具for5601

http://forum.gsmhosting.com/vbb/ ... =78757&page=185

我用在5508也还不错
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-2-20 22:40:46 | 显示全部楼层
要有电脑上调汇编的程序就好了, 老是刷到手机上反复失败太苦了.
回复 支持 反对

使用道具 举报

发表于 2006-2-20 22:44:18 | 显示全部楼层

回复 #418 wwssff 的帖子

现在比较好的办法是用上面那个工具和ofv补丁


konca以前准备写一个模拟器的。。。
可惜很多东西不是很清楚,还没有做出来
都有点儿忙。。
呵呵
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-2-20 22:49:31 | 显示全部楼层
是啊, 以前研究过输入法的朋友都出差了, 呵呵.
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员 微信登录

本版积分规则

小黑屋|Archiver|手机版|爱技术 ( 沪ICP备08115260号-3 )

GMT+8, 2025-6-14 03:51

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表