|
提取新东方背单词II的词库(1)
<2003/3/20> 背单词背的无聊,前几天跑xdict的词库,跑了一些就删了,今天来提取"新东方背单词II"的词库。网上的词库很多了,很久以前在一个palm的论坛上,一个高人说要弄一个朗文的背单词词库,期待了很久,还是没出来,估计是工作太忙了...... 工具如下 win32dasm,vc.net 其实一切破解的过程就是浪费时间的过程~~,然后就是观察,猜测,当然人聪明,花的时候也少:-) 用win32dasm打开Recite.exe,新东方背单词II就这一个文件,连dll都没有,真是...... 打开之后,跳转到书籍管理~~ 这词库无论如何都要ReadFile吧,就在ReadFile的地方设了几个断点,具体点就是在dasm'函数'->import出来的地方找到ReadFile, (KERNEL32.ReadFile),然后double click几下,用F2设几个断点,然后跟踪了一下,发现在 书籍管理中切换书籍的时候,有很多地方被循环调用,最常见的就是40be3b处一系列代码 其中有一个函数调用最关键 call Recite.00407610 这个函数调用之后,堆栈里面出现0x400长的一段数据 如下 <Name>研究生入学英语考试词汇<Version>2.00.000 <0><w>a<p>[e, ei, 4]<c>art. 一(个);任何一个;每,每一 <1><w>an<p>[4n, 1n]<c>art. 一(个);任何一个;每,每一 <2><w>abandon<p>[4'b1nd4n]<c>v. 放弃;抛弃 <ee>He abandoned his wife and child and ran away. <ee>In his early days Mr. Lu Xun abandoned medicine for literature. <s>forsake, desert, relinquish <3><w>abide<p>[4'baid]<c>v.(by)坚持,遵守 <4><w>ability<p>[4'biliti]<c>n. 能力,智能;才能,才干 <5><w>able<p>['eib4l]<c>a. 有能力的,能干的,显示出才华的 这显然就是词库了,<ee>句子<w>表单词<p>音标.... 想想就知道这个软件每次都是把所有单词读入内存,好了,让我们看看00407610处的函数的参数 lea ecx,dWord ptr [esp+2C] mov esi,eax push ecx lea edx,dword ptr [esp+40] push esi push edx 看看再想想就知道esp+40是第一个参数,是个buf地址,esi当时是0x400,应该就是buf长,剩下的一个如果没弄错,应该是操作对象。函数调用如果没记错,应该是__cdecl,从右向左入栈,被调者自己清栈. 好了,剩下的就是在这个地方,加入自己代码,打开一个文件,在后面写入0x400长,然后flushbuf,close掉 自己写汇编是不是很麻烦?不用啊,我们的.net出场了 OFSTRUCT ofs; char name[8];//为了方便‘看’,定义为8 name[0] = 'c';
|