灵格斯Lingoes词典2012过期问题的解决

新年到了,新的一年当然有新的打算和目标,我的其中一个目标就是把英语再学好点儿,毕竟最新的资料都是用英文写的,“工欲善其事必先利其器”——学英文,好的词典必不可少!平时经常用词典软件就是灵格斯了,因为使用起来相对方便,更重要的是可以自己配置不错的辞典比如:牛津高阶、柯林斯等等,这个是最吸引我的地方!然而当2012到来的时候,我的灵格斯词典却不用了了,软件提示过期了!

同时点击了升级,软件却提示已经是最新的了,真是无奈啊!

开OllyDBG自己动手修正一下算了,首先Ctrl+N查看一下各个相关模块的名称窗口[PS:名称窗口用户列出在某个模块中全部符号名称(标签[labels])。这些名称包括输出函数(方便其他模块调用的公用符号)、引入函数(调用其他模块的函数符号名)、用户自定义标签以及从调试休息或目标文件中提取的标签],自己尝试看有没有类似MessageBox这样的API调用,不过根据弹出的过期窗口的样式更像是一个Dialog,OK,先试试这个MessageBoxW,F9运行一下,果然没有断下来,然后可以判断弹出的应该就是一个对话框了,试着找找关于Dialog创建的一些API,另外明显地那个弹出的过期的对话框是一个模态的对话框,同时通过载入的MFC动态链接库为Unicode版本可以初步判断出API为宽字符版本,那么API的范围就可以缩小到:CreateDialogXXXW,在Lingoes的范围内没有发现相关函数(由于我机器上没有MFC42u.lib这个库文件所以无法解析出具体对于MFC函数的名称因此找不到),那么应该是被MFC模块间接调用了,我们直接去看MFCDLL的名字窗口里面调用的函数,OK,找到了CreateDialogIndirectParamW,



直接在这个上面F2下一个断点。重新载入Lingoes后,F9,直接断到这个地方了,直接看相关的调用堆栈即可,为了较为精准地定位到关键代码处,我们可以直接F9下去直到出现过去对话框为止,然后去观察调用堆栈,查看一下最近的返回到Lingoes模块的地方在哪儿


找到地方后,注意做点儿静态分析,看看那儿有分支不会调入这个过期函数的,找到判断后下断即可。接下来Ctrl+F2重新载入程序,直接F9到我们刚刚下的断点处(PS:记得把原来下的CreateDialogIndirectParamW断点去掉)。F7进函数分析,由于最后是判断返回值AL是否为0,直接找到修改AL相关的地方。



,利用汇编把setg al,改成mov al, 0同时记得用nop补全指令,当然也可以在此函数外面改JE\JNE呵呵。这样就把问题解决了,灵格斯又可以正常使用了!HOHO。另外为了多学点儿东西,这里对于时间过期的判断处,我们可以详细分析一下程序是如何判断过期的,通过图6很容易知道通过time函数获取当前的时间,确切地说是当前时间离1970年1月1日,0时0分0秒的秒数,同时与之相比的是过期日期距离特定时间的秒数。那么这里就有个问题了,过期时间是从哪儿来的呢?!这个留到下次分析:),解决了过期问题就可以先想办法提高英文水平了呵呵:D



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值