首页
社区
课程
招聘
我是如何用OD调试输入法的IME程序的
发表于: 2005-4-6 09:00 5535

我是如何用OD调试输入法的IME程序的

2005-4-6 09:00
5535
有一个输入法软件,非常适合完全不懂拼音的人学习。该形码规则记忆量非常小,很受中老年或两广地区同志的欢迎。该软件需要注册才能输入全部汉字,不注册的话,拼音字母开头是ABCD的汉字不能输入。该输入法的状态栏上有一个注册按钮,点击此按钮弹开注册窗口进行注册。以前我调试该软件时,是在98下用TRW2000 。现在已用WIN2000了,正在学用OD,怎么用OD来调试呢?我困惑了很长时间,昨天摸索了一个晚上,总算找到一个方法,写出来与各位共享。各位看后,觉得还能用什么方法,不妨告诉我,我很想学习如何使用OD,谢谢了。我用的OD是看雪上下的汉化修正版,带有很多插件。以下是我的调试步骤:
1、        运行OD,打开C:\WINNT\SYSTEM32\LYJM.IME,提示“LYJM.IME是一个动态链接库文件,需要用LOAD.EXE载入”,点“是”,载入LYJM.IME。
2、        点OD菜单栏中的“插件”,选“Ultra String Reference”下的“Find ASCⅡ”,查看参考信息。在Ultra String Reference窗口中查找程序注册出错信息:“ 注册失败!请检查注册号……”,找到后记下其地址。我的机器上是:“10004F8D”。(这个软件安装在不同的机器上,这个地址略有不同。不同机器上的LYJM.IME是不完全相同的,而且码表文件LYJM.MB也都不同,都是加密的缘故。)
3、        退出OD。运行记事本,选择“六元金码”输入法,在该输入法状态栏中点“注册”按钮,弹出注册窗口。再次运行OD,在“文件”菜单下选择“附加”,在弹出的进程窗口中选“NOTEPAD.EXE”,点“附加”。加载后,在OD菜单中选“查看”下的“记录”,在“记录数据”窗口中找“LYJM.IME”的地址,我的机器上是“00890000”。注意,这个地址是动态的,是指这次调试时LYJM.IME的内存地址,下次应该就换成别的地址了。
4、        现在知道LYJM.IME的动态起始地址是00890000,刚才我们看到LYJM.IME注册出错时的地址是10004F8D,那么我们在内存的00894F8D处设置断点,程序运行到这里时就要显示出错信息了。点OD菜单中的“插件”,选“命令行”下的“命令行”,在“命令行”窗口中输入BP 00894F8D,按回车确认。断点设置好了。点击OD中的运行按钮,再切换到记事本窗口,在六元金码的注册窗口中点“确定”,程序马上被中断在00894F8D处。这时,你在OD的CPU主要窗口中看一下寄存器ESI中的值,其ASCⅡ是“3437047”,这就是正确的注册码。
5、        还有一个问题:以前在WIN98下,我把LYJM.IME的10004F8D处的“mov esi,lyjm.10001cc90”改为“mov esi,esi”,多余字节nop掉(lyjm.10001cc90处存放着出错信息),点击注册时,注册窗口中原来显示错误信息的地方会显示正确的注册码,因为这时的ESI中存放着正确的注册码。但是,在WIN2000下却不行,如果这样修改,在注册窗口中一点击确定,程序就出现异常自动退出,连记事本也自动关闭了。不知道是什么原因,请高手解释一下。谢谢。

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (7)
雪    币: 216
活跃值: (370)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
2
如果你用我的ollyhelper插件,可以直接调试记事本,然后设置break on dll时加入LYJM.IME。加载此输入法,就直接断在它的EP了。
2005-4-6 09:36
0
雪    币: 208
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
最初由 goldenegg 发布
如果你用我的ollyhelper插件,可以直接调试记事本,然后设置break on dll时加入LYJM.IME。加载此输入法,就直接断在它的EP了。
具体怎么操作,请说详细点,我还不太会用OD。谢谢
2005-4-6 12:03
0
雪    币: 212
活跃值: (40)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
4
请问楼主,00894F8D是怎么算得的?
我出错地址为:00874BE9
动态起始地址是:00C10000
那我断在哪儿?
2005-4-6 15:14
0
雪    币: 208
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
最初由 heng9ml 发布
请问楼主,00894F8D是怎么算得的?
我出错地址为:00874BE9
动态起始地址是:00C10000
那我断在哪儿?
我不知道你用的金码是什么版本,我用的是6.0版的,如果你用的是5.0版的话,可能不一样。另外,你说的出错地址是:00874BE9,我不知道是指什么出错地址,我原贴中说的是注册出错的地址,用OD加载LYJM.IME后可在参考字符中查到,反汇编LYJM.IME也可找到。最后,我用的00894F8D这个地址是我将动态调试时LYJM.IME在内存中的段地址00890000加上偏移00004F8D算出来的,动态调试中程序运行到00894F8D时将要显示“注册失败!请检查注册号……”,而在此时,ESI中正好存有正确的注册码,所以,我就在这个地址上设置断点,以便查看正确的注册码。当然,下次调试时,段地址就不一样了,但偏移还是一样的。
    另外,这位兄弟要注意,这个软件安装到不同的机器上,生成的LYJM.IME文件不是完全一样的,因此,反汇编后,相应的地址可能不同。顺便说一下,安装后生成的LYJM.MB也不一样,是否注册的信息保存在这个码表文件中,而且,这个码表文件还存有软件序列号,这与机器硬件有关。因此,如果想用LYJM.IME和LYJM.MB文件重新制作安装程序,即使安装成功,软件也无法使用。
2005-4-6 17:37
0
雪    币: 208
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
最初由 jtfzp 发布
具体怎么操作,请说详细点,我还不太会用OD。谢谢
谢谢这位兄弟,我通过尝试,已经会用你的插件来调试了,确实方便不少,谢谢。
    另外,希望有同志说说设置OD断点的技巧,也好让我这样的新手学习学习。OD确实是一款好东西。同时也希望版主能开个专贴,讨论OD的使用方法技巧,积少成多,促进这个工具的使用与普及。
2005-4-6 17:42
0
雪    币: 221
活跃值: (55)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
7
我没有你这个软件,不过这是个常识问题
“mov esi,lyjm.10001cc90”改为“mov esi,esi”,多余字节nop掉(lyjm.10001cc90处存放着出错信息”

问题出在 mov esi,lyjm.10001cc90 处,因为10001cc90是根据动态加载情况由程序自行修改的,所以,你改为mov esi,esi后还是会被加载程序修改回来的。你应该分析一下机器码:

mov esi,lyjm.XXXXXXXX 的机器码是:be XXXXXXXX
mov esi,esi           的机器码是:8b f6
注意那个f6包括后面的数据都会被机器动态改变的,计算机执行到这个地方就有好多种可能的了
但是也不能用跳转,因为跳转会用两个字节
想达到这个目的一是想办法在其他地方跳转
二就是把mov esi,lyjm.XXXXXXXX改成其他的没用的寄存器,例如mov ebx,lyjm.XXXXXXXX,要结合你的上下文了
2005-4-6 18:20
0
雪    币: 208
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
最初由 Binny 发布
我没有你这个软件,不过这是个常识问题
“mov esi,lyjm.10001cc90”改为“mov esi,esi”,多余字节nop掉(lyjm.10001cc90处存放着出错信息”

问题出在 mov esi,lyjm.10001cc90 处,因为10001cc90是根据动态加载情况由程序自行修改的,所以,你改为mov esi,esi后还是会被加载程序修改回来的。你应该分析一下机器码:

........
首先谢谢你的指点,但是,10001cc90不是根据动态加载情况由程序自行修改的,如果你用W32DASM静态反汇编,他就是这个地址。文件中这个地方是出错的字符。用mov esi,lyjm.10001cc90 这句代码是让那些字符显示出来。我改为mov esi,esi后不会被加载程序修改回来,这在调试时已经证明。在WIN98下,我这样改后,程序运行时就能在原来显示注册码错误信息处显示出正确的注册码。相当于变成了一个注册机了。而同样修改后,在WIN2000下调试时,程序走到这时,代码还是mov esi,esi,下面是三个nop,再下面程序还是与原来一样,但是再往下执行几步程序就关闭退出了。我想来想去不明白,为什么在2000下,程序修改后执行不下去了(代码没变),而在98下,程序修改后却能顺利执行下去。如果你感兴趣,我可以把这个东西发给你看看。我的QQ是120365109.再次谢谢你。
2005-4-6 20:39
0
游客
登录 | 注册 方可回帖
返回
//