<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';
 name[1] = ':';
 name[2] = '//';
 name[3] = 'c';
 name[4] = 0 ;
 HANDLE handle = (HANDLE)OpenFile(name,&ofs,OF_WRITE);
 SetFilePointer(handle,0,0,FILE_END);
 char buf[0x10];
 DWORD byte;
 WriteFile(handle,buf,0x10,&byte,0);
 FlushFileBuffers(handle);
 CloseHandle(handle);

然后在vc.net中直接看汇编代码

sub         esp,0A8h
mov         al,63h
mov         byte ptr [esp+8],al
mov         byte ptr [esp+0B],al
push        1   
lea         eax,[esp+24]
push        eax 
lea         ecx,[esp+10]
push        ecx 
mov         byte ptr [esp+15],3A
mov         byte ptr [esp+16],5C
mov         byte ptr [esp+18],0
call        dword ptr [__imp__OpenFile@12 (405010h)]
//004e3238
push        2   
push        0   
mov         esi,eax
push        0   
push        esi 
call        dword ptr [__imp__SetFilePointer@16 (40500Ch)]
//004e32c0
push        0   
lea         edx,[esp+8]
push        edx 
push        400 //写入字节数
lea         eax,[esp+1Ch] //写入地址
push        eax 
push        esi 
call        dword ptr [__imp__WriteFile@20 (405008h)]
//004e32b8
push        esi 
call        dword ptr [__imp__FlushFileBuffers@4 (405004h)]
//004e32bc
push        esi 
call        dword ptr [__imp__CloseHandle@4 (405000h)]
//004e32ac
add         esp,0A8

(以上代码略有修改)这段代码最开始sub esp,0A8h ,用0A8h的空间来保存
 OFSTRUCT ofs;
 char name[8];
之类的变量,最后add esp,0A8还原

显然,为了避免麻烦,还要在前面
push esi
push edx
push ecx
push eax
在后面
pop eax
pop ecx
pop edx
pop esi

然后就是找个地方把我们的代码放起来了~,翻啊翻,翻到最后4e20e9的地方,找了一大片空地,好了,就是这儿了

在Recite.406e3b地方,把原来的mov ecx,dword ptr [esp + 450]改为
jmp 4e20e9
nop
nop
两个nop是为了填空

然后在4e20e9的地方写原来的那个mov,接着写自己的代码,就是上面的汇编代码
其中的函数调用OpenFile,SetFilePointer等要替换成相应的地址
如何找到地址?无非就是在'函数'->import出来了地方double click几下,然后copy一下了咯
比如 SetFilePointer就是
call [004e32c0]
而且其中FileWrite的buf地址要改一下,
lea eax, dword ptr [esp+0000010C]
最后要jmp回原地,继续执行

好了搞定了,每次在书籍管理中切换词库之前,先del c:/c,然后建一个空的文件名叫c,切换完后c就被写完了,除了所有的正常内容外,后面会多一点内容,删掉就可以了(因为我们每次都是写的400,没有检查返回)
c就是相应的词库,然后可以干吗呢?好像新东方背单词II词库也不比网上流传的词库好多少......

提取新东方背单词II的词库相关推荐

  1. 新东方背单词II注册机

    新东方背单词II注册机 序列号: VAGQ-UPTFQBOF 破解文件:新东方背单词破解 程序安装好之后,先运行程序,要求输入序列号(如上),然后把破解文件放到安装目录下运行就可以了. 转载于:htt ...

  2. 用Python读取轻轻松松背单词的GDS词库文件

    <轻轻松松背单词>是一个广泛使用的背单词软件,有丰富的词库资源.读取轻轻松松背单词GDS词库文件,可以在此基础上开发背单词类软件. #--------------------------- ...

  3. [分享]新东方背单词III-ISO(大小:570M ,高速下载)

    软件简介 说明:软件共收录16大类108本词汇书籍,累计单词十六万多个,在背单词II的基础上增添了60多本书籍.8万多词条.词汇涵盖面极其广泛,从中小学.大学.研究生到新东方出国考试(GRE.GMAT ...

  4. 新东方背单词5 下载

    新东方背单词5 下载 地址: http://www.xachlxx.cn/download/%C8%ED%BC%FE/%D0%C2%B6%AB%B7%BD%B1%B3%B5%A5%B4%CA5.rar ...

  5. 新东方背单词3.4下载

    新东方背单词3.4下载 绿色版 http://fzqk.com/software/catalog95/5064.html

  6. 《轻轻松松背单词II》扩展:拖动、切换窗口,成绩显示,增量显示

    转自这个帖,原来的链接无效了,更新一下: http://pgy.hotbbs.cn/script/forum/view.asp?article_id=13916249&board_id=96& ...

  7. 轻轻松松背单词II 词库转换器(源代码)

    原理很简单,看看就懂:) Imports System.IO Imports System.Text Module BDCWordConverterModule BDCWordConverter    ...

  8. Python背单词记单词小程序,可自定义词库,支持多种记忆模式,根据词义拼写、选择单词,根据词意选择单词

    Python背单词记单词小程序,可自定义词库,支持多种记忆模式,根据词义拼写.选择单词,根据词意选择单词,可乱序抽查,可对错题进行反复抽查 完整程序源代码下载:Python背单词记单词小程序 词库生成 ...

  9. 自编记单词小程序项目(自定义词库,多功能)C/C++语言实现

    一款方便实用又简洁的记单词小程序,自定义单词库,多功能协助记忆!!! github地址:https://github.com/Knock-man/Memorizing-words-program 如今 ...

最新文章

  1. kill session-KILL_SESSION()
  2. 小白安装eclipse插件—testNG
  3. 聊一聊Elasticsearch和MySQL的常用操作
  4. Python3判断是否为回文数
  5. cv1159 最大全0子矩阵(极大子矩阵)
  6. 浮动元素横排居中显示及浏览器兼容性处理
  7. CentOS7通过yum安装Openresty
  8. 黑马程序员-ios入门初体验及个人体会
  9. Misra-Gries 算法
  10. 【精读】Transformer模型深度解读
  11. 几何分布的期望和方差公式推导_算法数学基础-统计学最基础之均值、方差、协方差、矩...
  12. ElasticJob定时任务学习总结
  13. 威斯康星大学硕士计算机科学,威斯康星大学麦迪逊分校计算机科学
  14. FVCOM离线拉格朗日配置
  15. 韩国中产的今天!76岁的快递员,70岁的站街女......
  16. 德尔玛递交注册:半年营收15亿 小米与欧派是股东
  17. python抓取股票竞价数据_【整理】用Python+beautifulsoup抓取股票数据
  18. window.name 跨域实现原理及实例
  19. php中json字符串值,如何使用PHP从JSON中提取数据?
  20. dell 1u服务器型号,戴尔_PowerEdge R240_1U机架式服务器_小型企业服务器选购 | Dell 中国大陆...

热门文章

  1. java应届生实习期满,转正的感想
  2. java 字符串枚举类使用
  3. echarts折线图有两条虚线
  4. 【Thingsboard】源码分析:OTA 更新
  5. Python入门必备知识
  6. 说说今天刷Nvidia TX2踩的坑
  7. 主题:2008年毕业生晒工资(北大?)
  8. 一文搞懂lookup、vlookup、hlookup函数与index、match函数的使用
  9. 超参数优化 贝叶斯优化框架_10个超参数优化框架
  10. datawhale pandas 打卡10 时序数据