smile1110 发表于 2015-3-22 13:04

新手对有道词典分支表的一次尝试

本帖最后由 smile1110 于 2015-3-22 13:11 编辑

有道辞典在我本本里呆了好几年光景,偶尔按捺不住(邮箱里英文邮件,主要是花花公子这期又到了),却经常提示登录过期,尤其是这月频繁改密码(网易通行证绑的梦幻西游帐号),重复五六七八次以后实在无法忍受每次都手动登录,于是乎决定把操水果刀把有道OOXX掉。
OD打开一看,有俩三处分支表结构(分支跳转表),这种结构还是非常少见的,大抵是笔者新手的缘故,仅仅在n久前的魔兽改键和几个dnf外挂上结果几次,now我们来共同学习一下 ,首先是 jmp dword prt+内存单元地址(段间转移),他的功能是:从内存单元地址处开始存放着两个字,高地址处的字是转移的目的段地址,低地址处是转移的目的偏移地址。eg:cs=所指向的内在单元地址+2,而IP=内存单元地址。还有那个"ds:"这里是显式利用段寄存器,就是指定那个段地址。这是分支表结构(分支跳转表)的开头。然后我们再共同在反汇编窗口下看下这种结尾
001DF24B   .C3            retn
001DF24C   .4BF11D00      dd YodaoDic.001DF14B
001DF250   .78F11D00      dd YodaoDic.001DF178
001DF254   .AFF11D00      dd YodaoDic.001DF1AF
001DF258   .DCF11D00      dd YodaoDic.001DF1DC
001DF25C   .ECF11D00      dd YodaoDic.001DF1EC
001DF260   .27F21D00      dd YodaoDic.001DF227

基本上看到这个开头(许多网络验证也有这头),往下面稍微翻翻就可以看到这种跳转结尾。笔者读书很少(基本上不用脑子解决问题,我的水果刀哪去了!),因此习惯性的把看不懂的分支表具象为为一个大坝水闸,而分支表的结尾就是几个指示水位,而其中一个水位恰好是我们所想要的。真正处理分支表的方法是修改 判断跳前面的eax寄存器的值,当然作为习惯水果刀的笔者,自然选择第二种简单粗暴的方法强行jmp到合适的“水位”,似乎我感觉到楼下诸位大神的隐跃不满,咦,我的水果刀哪去了~
我去!!!这谁仍过来的西瓜皮,还有鸡蛋,我...错了,好吧,我决定把正式的解决方法发出来,如何转移表方法实现多分支结构,保证转移表中每条jmp指令长度相同?这是一个非常严肃的话题。由于段内直接转移指令jmp的机器代码长度可能是2个字节或者是3个字节,取决于转移目标与jmp指令之间的距离。若是短转移,则jmp指令的机器代码是2个字节;若是近转移,则机器代码是3个字节,因此,为了保证jmp指令的长度统一为3个字节,该程序在转移表的后面安排了一条伪指令org$+80h (意思是 将程序存放于当前地址向后偏移80H字节的地方),这篇文章还是楼主水果刀说了算(此时正在找我的水果刀)因此还是选择了“水闸”这种摆不上台面的捷径(对于笔者这些折腾半天才算出百位加法的人来说,乘法实在是太难了,再加上时间就是点卡...咦,哪来的矿泉水瓶!你们又赢了)
有道辞典有自校检区域,起码笔者发现了一处call和文件不完整检验,并且发现每次打开内存地址都不一样,许多关键跳断点只要下立刻崩溃。于是乎od(动态调试),这把杀猪刀到了笔者手里,也只能沦落到ida(6.4-6.6版本江湖传闻是屠龙宝刀)水果刀来用了(od除了登录对话框和取词频繁以外,剩下都是静态调试的)
载入以后,我们看下字符串。

一    中文搜索引擎, 条目 1740
地址=00D8F151
反汇编=push YodaoDic.010B0250
文本字符串=正在检查更新...



OOXX更新是阉割版最显著的特征之一,比较短且比较显眼(字符串最上面或者最下面),于是乎江湖英侠初入江湖先从这里翻墙入室,劫富济贫,当然你必须又把水果刀,笔者为了配合这次行动几个小时前刚更新有道辞典6.3.66.1117最新版本ps:用木棒的那个上月已经被人弄死啦。



0137F144      FF2485 4CF237>jmp dword ptr ds:       ;段间转移Switch...Case这就是分支表开头,也就是水坝最关键的那个水闸
0137F17E|.68 64026A01   push YodaoDic.016A0264                   ;没有可用更新
0137f144 这个地址处,咱们选择果断的强行jmp到“合适水位”,即没有可用更新(咱们目标水位)处就可以了



总结 地址处0137F144 。 数据数值 FF2485 4CF237 修改为 68 64026A01   
0037F17E|.68 64026A00   push YodaoDic.006A0264                   ;没有可用更新
会常简单,tiger~
二   1ocr取词频繁
继续继续。突然看到这里有堆财宝
中文搜索引擎, 条目 1401
地址=0136D3B1
反汇编=push YodaoDic.0169DE7C
文本字符串=您的取词操作过于频繁,请稍后再试。





0136D388|. /74 0B         je XYodaoDic.0136D395                  ;此处若是不等就回在0136d393处jmp到取词频繁
地址0136d388处,让他jmp跳,就可以绕过 “您的取词操作过于频繁,请稍后再试”这句话了,对于初试江湖小豪侠来讲,凡是限制用户体验,没错姑且叫做用户不良体验,掏出水果刀,果断说不。
总结地址0136D388 处。数据 74 0B 修改为 EB 0B
2 还有一处取词频繁 不上图了 直接jmp
第二处,搜索下一处
中文搜索引擎, 条目 1999
地址=013AB803
反汇编=push YodaoDic.0169DE7C
文本字符串=您的取词操作过于频繁,请稍后再试。
013AB7FB|. /75 1D         jnz XYodaoDic.013AB81A
013AB7FB   /EB 1D         jmp XYodaoDic.013AB81A
Bingo,那谁家那小谁~,你收拾完财宝,怎么把刀扔了! -.- 666
总结 地址 013AB7FB 数据 75 1D修改为 EB 1D
三   和谐登录对话框。
这是最最关键的一步,也就是笔者初衷。当然这里是载入od以后,f9运行一下,就弹出来一个会常不和谐的对话框,会常不和谐,意味着死的很早。诸位可以control+f2重新载入一下,f9运行,就直挺挺的停在这里了。其实这里也有字符串,就是下面,也可以通过刚才那种踩点方式操刀下手。
中文搜索引擎, 条目 3824
地址=00E4979E
反汇编=push YodaoDic.010C28B4
文本字符串=登录已过期,请重新登录!



01439791|. /74 5A         je XYodaoDic.014397ED
01439791   /EB 5A         jmp XYodaoDic.014397ED





地址 01439791 处 ,je改为 jmp就可以绕过 “登录已过期” 请重新登录的提示了
总结 地址 01439791 处 数据 74 5A 修改为 EB 5A

接下来又是一处分支表判断,笔者毅然选择水果刀。
1最先判断的是ja //若大于则跳,这是判断这个登录程序是否有错误,自校检区块分明是对江湖儿女的不信任,对于这种为富不仁,守财奴,我们要毅然决然的...为了正义,咦,这户人家的女儿似乎挺漂亮的呀
01439D0E|. /0F87 67010000 ja YodaoDic.01439E7B
若是大于就会跳到 下面的
01439E7B|> \6A 0B         push 0xB                                 ;Default case of switch 01439D0B
01439E7D|.68 E4296B01   push YodaoDic.016B29E4                   ;登录失败,发生未知错误   





地址 01439D0E ja 修改 为jmp
01439D0E   /0F87 67010000 ja YodaoDic.01439E7B
01439D0E   /E9 68010000   jmp YodaoDic.01439E7B
总结 地址 01439D0E处 数据 0F87 67010000 修改为E9 68010000 (若是编写内存补丁,用90补齐长度这种武功细节5两银子一火车,什么,你要出书卖,少侠你很有前途,下月重生的肯定就是你了)
2判断登录的几种状态 还是可以理解为jmp dword ptr ds水坝闸门,下面的那个分支表为各种水位
01439D14|.FF249D A09E43>jmp dword ptr ds:



我们直接让它跳到咱们目标水位(登录成功),也就是 “登录成功” 这里就可以了
01439D1B|> \68 D0286B01   push YodaoDic.016B28D0                   ;登录成功; Case 0 of switch 01439D0B
地址 01439D14 处 jmp 01439E7B 修改为 jmp 01439D1B
01439D14|.FF249D A09E43>jmp dword ptr ds:
01439D14   /EB 05         jmp XYodaoDic.01439D1B
总结 地址 01439D14 处 数据 FF249D A09E43 修改为 EB 05
笔者这篇文章说的这么细,起码能忽悠五两银子
四    判断帐号密码正确与否,就是口令,天王盖地虎~ 什么对不上来,拖出去砍了

中文搜索引擎, 条目 3588
地址=01439D9B
反汇编=push YodaoDic.016B2924
文本字符串=用户名或密码错误,请重新输入
咱们踹开门(这里的踹字跟贾岛,鸟宿池边树,僧踹月下门 的情致尽显不谋而合,异曲同工之秒)一看



0143A0C8|. /75 58         jnz XYodaoDic.0143A122                   ;这句话是跳到登录对话框,这里下断立刻程序崩溃,不信你试试
几个小时前截图的时候,刚以为这里是保存以前曾经存在过的帐号呢,一下断点立刻崩溃,后来看某期刊的时候灵机一动,应该是要接下来跳到登录对话框一个“引导跳”(好吧,我又造了一个很v587的术语)
比较帐号密码是否为空 ,别问我为啥,程序本身备注写着呢!!!
0143A0D2|. /75 2D         jnz XYodaoDic.0143A101(帐号)
0143A10A|. /75 16          jnz XYodaoDic.0143A122(密码)
修改为
0143A0D2   /EB 2D         jmp XYodaoDic.0143A101
0143A10A   /EB 16         jmp XYodaoDic.0143A122
总结 地址 0143A0D2处 数据 75 2D 修改为 EB 2D
   地址 0143A10A处 数据 75 16 修改为 EB 16
五 其他比较关键的字符串地方

少侠,肯定奇怪为啥刚才就有个登录验证了,其实是这样子的...时间不够编个原因。
其实这里是我故意放出来的,这里似乎也该动刀。等你搜下字符串就会发现这里,这解释不对,行,容我找找三米长的水果刀。

中文搜索引擎, 条目 3696
地址=01440EDA
反汇编=push YodaoDic.016B3890
文本字符串=是否自动登录
中文搜索引擎, 条目 3957
地址=00E50FD7
反汇编=push YodaoDic.010C38A8
文本字符串=新浪微博登录
少侠感觉有猫腻可以进入动刀,其实这里包括下面,不需要动,除此四处之外还有俩去处关键字也感觉是验证。
还有下面这两处
01440E93   /75 1C         jnz XYodaoDic.01440EB1
01440E93      90            nop
01440EB9|.^\74 DA         je XYodaoDic.01440E95
01440EB9    ^\EB DA         jmp XYodaoDic.01440E95

还有

这两处不仅仅是下断出错问题,是怎么看都怎么像一个循环判断结构,若是静态,你可以直接这样子修改,修改错了,不会产生任何后果,当修改的是程序必要进行地方时,等你右键全部复制保存的时候,提示无法保存下来,我觉得大多数情况下都是被少侠nop掉了,这时候从错误地方返回到c 反汇编窗口把你错误的地方右键还原就可以了。你现在就可以右键试试保存了,基本上我初衷就是和谐掉那个登录对话框。到这里本文已经完事了。
六 等我做到这里的时候,突然发现,有道最下面条形广告,竟然还有广告,笔者每次都是识图或者画句翻译,基本不到软件界面上来,对广告也没多大仇恨。若是你继续搜索字符串可以找到如下这些
中文搜索引擎, 条目 2351
地址=00DD5931
反汇编=push YodaoDic.010B628C
文本字符串=xue.youdao.com
(当然就是即刻动刀
013C5868|. /0F85 A8000000 jnz YodaoDic.013C5916
013C5868      90            nop
地址 013C5868数据 0F85 A8000000 修改为 90
013C5875|. /0F85 01010000 jnz YodaoDic.013C597C
013C5875      90            nop
地址 013C5875 数据 0F85 01010000 修改为 90
013C58BB|. /7F 0A         jg XYodaoDic.013C58C7
013C58BB      90            nop
013C58C9|. /74 31         je XYodaoDic.013C58FC
013C58C9   /EB 31         jmp XYodaoDic.013C58FC
3这里是 判断手动是否关闭
013C5914|. /74 66         je XYodaoDic.013C597C
013C5914   /EB 66         jmp XYodaoDic.013C597C   这一块没有任何效果)
(中文搜索引擎, 条目 4076
地址=01244FD1
反汇编=push YodaoDic.014A5CB0
文本字符串=关闭广告
00BF4FB8|. /74 3A         je XYodaoDic.00BF4FF4   这里是手动关闭下面那个广告的那个叉号 ,往上找了几页也没有发现,不用动没意义)







这些地方和谐掉以后你会惊奇的发现还是去不了广告,什么学有道 什么沪江网校(笔者上学那会学校辅助教程就是樱花和沪江的,比较熟悉)还有什么30天学口语 美国网校 等等,一大些广告网址。你若是搜索字符串网址那边会发现另外几个网不是广告。至于跳到这几个push地址的那三call跟随进去发现也不大像。
这要到resultui子文件夹下动刀了。笔者和谐了xsl和图片两处仅仅去掉xue,youdao.com 去网上找了6.1-6.3之间的一些绿色破解版,下载下来发现,我试图比对一下那些xsl,结果那些破解版同样也没和谐掉这里,具体怎么情况笔者功力有限就看诸位大侠的了。
最后附带上已经和谐掉登录对话框的主程序YodaoDict.exe 这一个文件 ,云盘地址:   http://pan.baidu.com/s/1hq6DtcC   ,若是有杀软的话,双击运行以后等一下,有个注入提示对话框,然后允许以后,重新退出打开就可以了。

最近对AvxYunPlay一个云播软件研究小有所成,已经可以每天循环领取软件1金币了,并且是超级会员,等我研究出如何破解aplayer和mplayer次数限制以后,就于诸公分享一下心得


1033685204 发表于 2015-4-10 19:45

dlzc 发表于 2015-4-11 14:11

这个一定要顶起来的。但是图不全。是不是网络的问题了。

zhaotianrun 发表于 2018-2-24 11:59

smile1110,很好的新手学习工具!
页: [1]
查看完整版本: 新手对有道词典分支表的一次尝试