用SOFTICE破解WINZIP的过程

破解步骤:1. 用softice载入windows(通过CTRL+D来检查softice是否已经准备好,按F5退出softice);2. 运行winzip,选择“help”下的“Enter Registration Code...”;3. 在“Name:”中输入:KraneXH(随意),“Registration #:”中输入:12345678(随意);4. 用CTRL+D呼出softice,下万能断点:bpx hmemcpy,按F5返回到winzip;5. 在winzip中选择“OK”,很快程序就被softice拦截下来(因为我们设置了断点bpx hmemcpy,当在winzip中选择“OK”时,winzip会通过hmemcpy这个功能去取我们输入的名字“KraneXH”和注册码“12345678”,softice检测到hmemcpy被调用,于是就中断winzip的运行,停留在winzip中调用hmemcpy的地方);6. 用 bd * 暂停刚才设置的断点 bpx hmemcpy (为什么要暂停断点bpx hmemcpy呢?因为我们的目的是要在winzip取名字和注册码的时候中断它的运行,但是 bpx hmemcpy 这个断点并不是针对winzip才有效的,计算机里运行的程序都可能会随时调用它。由于我们在winzip中刚输入名字和注册码后设置断点 bpx hmemcpy ,此时winzip会马上去取我们输入的名字和注册码,所以我们能确保是中断在winzip程序中,通过 bd * 这个命令暂停断点 bpx hmemcpy ,能够防止解密时被其它不相干的程序中断,影响解密的正常进行);7. 按F12键9次,返回到winzip的领空(因为刚才softice中断在hmemcpy中,这是windows系统区域,不能更改的,winzip仅仅是调用这个功能而已,所以我们必须要返回到winzip程序中才有用),来到下面的地方:......0167:00407F6D CALL [USER32!GetDlgItemTextA]0167:00407F73 PUSH EDI             ←- 程序停留在这里,EDI指向“KraneXH”0167:00407F74 CALL 0043F89A0167:00407F79 PUSH EDI0167:00407F7A CALL 0043F8C30167:00407F7F POP ECX0167:00407F80 MOV ESI, 0048CDA40167:00407F85 POP ECX0167:00407F86 PUSH 0B0167:00407F88 PUSH ESI0167:00407F89 PUSH 00000C810167:00407F8E PUSH EBX0167:00407F8F CALL [USER32!GetDlgItemTextA]0167:00407F95 PUSH ESI             ←- ESI指向“12345678”0167:00407F96 CALL 0043F89A0167:00407F9B PUSH ESI0167:00407F9C CALL 0043F8C30167:00407FA1 CMP BYTE PTR [0048CD78],00   ←- [0048CD78]指向“KraneXH”0167:00407FA8 POP ECX0167:00407FA9 POP ECX0167:00407FAA JZ 004080050167:00407FAC CMP BYTE PTR [0048CDA4],00   ←- [0048CDA4]指向“12345678”0167:00407FB3 JZ 004080050167:00407FB5 CALL 004079050167:00407FBA TEST EAX,EAX0167:00407FC3 JZ 00408005......8. 我们从调用hmemcpy的系统区域中返回到winzip领空时,程序停留在0167:00407F73 PUSH EDI上,看看它上面的那条指令0167:00407F6D CALL [USER32!GetDlgItemTextA],这个CALL就是取我们输入数据的程序,也就是这个CALL让我们用 bpx hmemcpy 将winzip拦截了下来。既然winzip用这个CALL去取输入的东西,那么调用之后肯定会返回结果的,让我们来看看:用 D EDI ,观察softice的数据区,你会看到EDI指向的内存区域的内容是我们输入的名字“KraneXH”;9. 从程序中可看出,下面不远的地方还有一个同样的地方调用USER32!GetDlgItemTextA,既0167:00407F8F CALL [USER32!GetDlgItemTextA]这一行。按F10键多次,走到这个CALL的下一句停下,既程序停在0167:00407F95 PUSH ESI这条指令上,用 D ESI ,同样的我们可以看到ESI指向的内存区域的内容是我们输入的注册码“12345678”。现在winzip已经将我们输入的名字和注册码都取到,让我们来看看它下一步要做什么?10. 继续按F10多次,当程序走到0167:00407FA1 CMP BYTE PTR [0048CD78],00时停下来,这条指令将内存0048CD78中的数据和00比较,然后根据比较结果判断程序走向。用 D 0048CD78,观察softice的数据区,我们可以看到0048CD78中的数据是“KraneXH”,现在我们知道这条指令的作用是判断我们输入的名字是否为空,如果没有输入任何东西,程序将会跳到00408005去;同样的,按F10走到0407FAC CMP BYTE PTR [0048CDA4],00这行停下,然后用 D 0048CDA4,可以看到0048CDA4中的数据是“12345678”。因为我们输入了名字和注册码,所以程序不会跳到 00408005去,程序检查输入的名字和注册码,如果任何一个没有输入(既其值为00),程序都会跳到00408005去,由此我们应该想到00408005很可能就是显示出错的地方,即当程序走到00408005 的时候,表示输入的名字和注册码是错误的;11. 按F10两次来到下面的那个CALL 00407905(因为程序刚才停在0167:00407FAC CMP BYTE PTR [0048CDA4],00上):......0167:00407FB5 CALL 00407905          ←- 程序停留在这里0167:00407FBA TEST EAX,EAX0167:00407FC3 JZ 00408005......程序判断输入的名字和注册码是否为空后调用CALL 00407905,这个CALL将结果返回到EAX中,程序根据EAX值判断走向。从程序可以知道,如果EAX的返回值是0,则程序会跳到00408005,就是刚才我们判断是有问题的地方。那么这个CALL倒底藏着什么猫腻呀?现在还不是很清楚,接着按F10两次来到JZ 00408005停下。现在看看softice中的零(即Z)标志位,其值是零,所以程序将会跳到00408005去,我们姑且按F10跳到00408005去看个究竟:......0167:00408005 CALL 004082A6          ←- 程序停留在这里0167:0040800A PUSH 0000028E0167:0040800F CALL 0043F5ED0167:00408014 PUSH EAX0167:00408015 PUSH EBX0167:00408016 PUSH 3D0167:00408018 CALL 00430025          ←- 出现错误框0167:0040801D ADD ESP,100167:00408020 INC DWORD PTR [00487AF8]0167:00408026 CMP DWORD PTR [00487AF8],03   ←- 判断错误次数是否到了3次?0167:0040802D JNZ 0040812C0167:00408033 PUSH 000167:00408035 PUSH EBX0167:00408036 CALL [USER32!EndDialog]0167:0040803C JMP 0040812C......12. 一直按F10走过0167:00408018 CALL 00430025,这是程序蹦出一个窗口,警告:Incomplete or incorrect information(不完整或不正确的信息),程序走到这里就已经很明朗了:如果程序在前面的时候跳到00408005来,就表示输入的名字和注册码是错误的,所以刚才的那个0167:00407FB5 CALL 00407905一定是比较输入的注册码是否正确的地方,也就是里面肯定有将我们输入的注册码和正确的注册码相比较的地方,所以我们要进入CALL 00430025里去看看。如果继续往CALL 00430025下面的语句看的话,你会看到下面的几句:0167:00408020 INC DWORD PTR [00487AF8]0167:00408026 CMP DWORD PTR [00487AF8],030167:0040802D JNZ 0040812C程序先将内存00487AF8处的值加1(其初始值为0,可以在这条语句前用 D 00487AF8 查看),然后比较是否是3,如果不是就跳到0040812C,如果是则执行后面的0167:00408036 CALL [USER32!EndDialog],其作用就是关闭对话框,也就是我们输入名字和注册码的窗口。由此我们可以看出此处程序的作用是检查错误输入名字、注册码的错误次数是否已经到了3次,如果到了3次,则关闭对话框,不允许再输入;如果少于3次,可有机会再次输入名字和注册码。13. 重复前面的步骤1到11,让程序停在0167:00407FB5 CALL 00407905上,然后按F8进入这个CALL里面去:......0167:004079D5 PUSH EBP0167:004079D6 PUSH EBP,ESP0167:004079D8 SUB ESP,000002080167:004079DE PUSH EBX0167:004079DF PUSH ESI0167:004079E0 XOR ESI,ESI0167:004079E2 CMP BYTE PTR [0048CD78],000167:004079E9 PUSH EDI0167:004079EA JZ 00407A8A......14. 按F10键N次(我也不知道几次,你自己数一数吧^_^),一直来到下面的地方停下:......0167:00407A91 LEA EAX,[EBP-0140]     ←- 程序停留在这里0167:00407A97 PUSH EAX0167:00407A98 PUSH EDI          ←- EDI指向输入的名字“KraneXH”0167:00407A99 CALL 00407B47        ←- 计算注册码0167:00407A9E MOV ESI,0048CDA40167:00407AA3 LEA EAX,[EBP-0140]0167:00407AA9 PUSH ESI          ←- ESI指向输入的注册码“12345678”0167:00407AAA PUSH EAX          ←- EAX指向正确的注册码“5CFC0875”0167:00407AAB CALL 004692D00167:00407AB0 ADD ESP,100167:00407AB3 NEG EAX0167:00407AB5 SBB EAX,EAX0167:00407AB7 INC EAX0167:00407AB8 MOV [00489FDC],EAX0167:00407ABD JNZ 00407B270167:00407ABF LEA EAX,[EBP-0140]0167:00407AC5 PUSH EAX0167:00407AC6 PUSH EDI          ←- EDI指向输入的名字“KraneXH”0167:00407AC7 CALL 00407BE4        ←- 计算注册码0167:00407ACC LEA EAX,[EBP-0140]0167:00407AD2 PUSH ESI          ←- ESI指向输入的注册码“12345678”0167:00407AD3 PUSH EAX          ←- EAX指向正确的注册码“23804216”0167:00407AD4 CALL 004692D00167:00407AD9 ADD ESP,100167:00407ADC NEG EAX0167:00407ADE SBB EAX,EAX0167:00407AE0 INC EAX0167:00407AE1 MOV [00489FDC],EAX0167:00407AE6 JNZ 00407B27......15. 大家一定会问:为什么会在这里停下,而不是其它地方呢?因为我在前面的程序中已经用 D *** 看过了,没有发现什么可疑的呀^_^!  按F10走到0167:00407A99 CALL 00407B47处,用 D EAX 和 D EDI 观察其里面是什么?可以看到EDI指向我们输入的名字“KraneXH”,EAX指向的内存区域没有什么特别的数据;紧接着下面的CALL 00407B47 会对“KraneXH”进行一些处理,具体的 我们还不知道,继续往后走;16. 按F10走到0167:00407AAB CALL 004692D0这一句,然后用 D ESI 和 D EAX 查看内存中的数据,可以看到ESI指向我们输入的注册码“12345678”,而EAX指向另外一串字符“5CFC0875”。不用说,十有八九这就是正确的注册码了,赶紧把它写在纸上吧^_^!继续往下走,我们会在下面的地方紧接着发现另外一个类似程序段,从而得到另外一串码“23804216”;17. 验证注册码:按F5返回winzip,选择注册,输入名字“KraneXH”和注册码“5CFC0875”或“23804216”。然后你看到了什么?注册成功的画面出现,直接确认就搞定了,哈哈哈。。。!18. 现在我们知道CALL 00407B47这条语句的作用是根据我们输入的名字来计算正确的注册码,然后和我们输入的注册码比较,看两者是否相等。处理后事:最后别忘了用CTRL+D呼出softice,然后下命令 BC * 清除所有断点!!!
九库阅读永久破解版,一款超给力的手机小说阅读神器。这里汇聚众多精彩的热门小说资源,各种言情、穿越、玄幻、现代、总裁等类型应有尽有,让你从此看小说更轻松!
2018-03-06
星旅远洋邮轮app下载,拥有更加专业雄厚的远洋邮轮实力,星旅远洋邮轮app为小伙伴们提供高品质一站式邮轮服务,满足更多游客需求,有需要就来下载。
2020-11-18
石油骚动怎么加速?游戏中很多玩家在采集过程绝对很单调和无聊,其实游戏中是可以加速的这样可以快速进行开采,下面我们就来介绍一下石油骚动加速方法一览,希望对各位有所帮助,石油骚动怎么加速 石油骚动加速方法
2016-09-03
写字画画板app是一款专门用来记笔记或者画画的app。可以随意调节画笔大小、颜色,还可以选出手机中的图片进行涂鸦操作。完成后还可以保存到手机里,分享给朋友,非常有趣。
2021-02-18
爱读漫画app是一款手机漫画软件,软件拥有丰富的漫画资源,包含各种分类,并且软件界面简洁无广告,免费阅读,可以让用户随时随地畅享漫画乐趣,喜欢的朋友欢迎前来下载使用。
2018-06-19
贵卓漫画app是一款非常好用的手机漫画阅读器,这款阅读器拥有非常多的漫画资源,支持离线下载阅读,让你随时随地都能看,不伤眼更畅快,欢迎各位感兴趣的朋友们下载使用。
2018-04-11
电话号码对我们的重要性不言而喻,尤其是家人、朋友、同事还有客户的,如果丢失会让自己非常的痛苦和烦躁,小编就经历过,那死的心都有了,而且电话号码一多也难于管理,所以针对这些问题,小编下面就向大家推荐一些不错实用的手机电话本软件,让你再也不担心电话号码的遗失了。
2023-07-08
牛账网app下载安卓版-牛账网app安卓版是一款快速提升会计做账技能的教育平台。牛账网app汇集跟会计有关的各种学习资料和课程。你可以根据自身需求选择牛账网app安卓版相应的课程学习,您可以免费下载安卓手机牛账网。
2022-06-13
天猫手机客户端是一款天猫特别为安卓手机系统研制出的购物客户端。天猫客户端用主题化的运营方式向用户展示商品,专注于商品的情感表达,让用户阅读商品;情景化商品的推荐,让用户与商品靠得更近。不仅希望在用户购物时,通过交易行为获得商品本身;更希望用户在接收商品信息的时候能够获得精神上的享受。
2023-06-21
云南生态农产品平台app下载-云南生态农产品平台app是一款网络购物应用,是个专注于销售云南生态农产品的移动商城。云南生态农产品平台app旨在让用户们足不出户就能买到云南特色产品,您可以免费下载安卓手机云南生态农产品平台。
2017-03-16