加入收藏 | 设为首页 | 会员中心 | 我要投稿 河北网 (https://www.hebeiwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

用SOFTICE破解WINZIP的进程

发布时间:2019-12-04 07:00:07 所属栏目:编程 来源:蓝点
导读:破解步调: 1.用softice载入windows(通过CTRL+D来搜查softice是否已经筹备好,按F5退出softice); 2.运行winzip,选择“help”下的“EnterRegistrationCode...”; 3.在“Name:”中输入:KraneXH(随意),“Registration#:”中输入:12345678(随意);
破解步调:

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 0043F89A
0167:00407F79 PUSH EDI
0167:00407F7A CALL 0043F8C3
0167:00407F7F POP ECX
0167:00407F80 MOV ESI, 0048CDA4
0167:00407F85 POP ECX
0167:00407F86 PUSH 0B
0167:00407F88 PUSH ESI
0167:00407F89 PUSH 00000C81
0167:00407F8E PUSH EBX
0167:00407F8F CALL [USER32!GetDlgItemTextA]
0167:00407F95 PUSH ESI             ←- ESI指向“12345678”
0167:00407F96 CALL 0043F89A
0167:00407F9B PUSH ESI
0167:00407F9C CALL 0043F8C3
0167:00407FA1 CMP BYTE PTR [0048CD78],00   ←- [0048CD78]指向“KraneXH”
0167:00407FA8 POP ECX
0167:00407FA9 POP ECX
0167:00407FAA JZ 00408005
0167:00407FAC CMP BYTE PTR [0048CDA4],00   ←- [0048CDA4]指向“12345678”
0167:00407FB3 JZ 00408005
0167:00407FB5 CALL 00407905
0167:00407FBA TEST EAX,EAX
0167: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,EAX
0167: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 0000028E
0167:0040800F CALL 0043F5ED
0167:00408014 PUSH EAX
0167:00408015 PUSH EBX
0167:00408016 PUSH 3D
0167:00408018 CALL 00430025          ←- 呈现错误框
0167:0040801D ADD ESP,10
0167:00408020 INC DWORD PTR [00487AF8]
0167:00408026 CMP DWORD PTR [00487AF8],03   ←- 判定错误次数是否到了3次?
0167:0040802D JNZ 0040812C
0167:00408033 PUSH 00
0167:00408035 PUSH EBX
0167: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],03
0167: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 EBP
0167:004079D6 PUSH EBP,ESP
0167:004079D8 SUB ESP,00000208
0167:004079DE PUSH EBX
0167:004079DF PUSH ESI
0167:004079E0 XOR ESI,ESI
0167:004079E2 CMP BYTE PTR [0048CD78],00
0167:004079E9 PUSH EDI
0167:004079EA JZ 00407A8A
......

14. 按F10键N次(我也不知道屡次,你本身数一数吧^_^),一向来到下面的处所停下:
......
0167:00407A91 LEA EAX,[EBP-0140]     ←- 措施逗留在这里
0167:00407A97 PUSH EAX
0167:00407A98 PUSH EDI          ←- EDI指向输入的名字“KraneXH”
0167:00407A99 CALL 00407B47        ←- 计较注册码
0167:00407A9E MOV ESI,0048CDA4
0167:00407AA3 LEA EAX,[EBP-0140]
0167:00407AA9 PUSH ESI          ←- ESI指向输入的注册码“12345678”
0167:00407AAA PUSH EAX          ←- EAX指向正确的注册码“5CFC0875”
0167:00407AAB CALL 004692D0
0167:00407AB0 ADD ESP,10
0167:00407AB3 NEG EAX
0167:00407AB5 SBB EAX,EAX
0167:00407AB7 INC EAX
0167:00407AB8 MOV [00489FDC],EAX
0167:00407ABD JNZ 00407B27
0167:00407ABF LEA EAX,[EBP-0140]
0167:00407AC5 PUSH EAX
0167: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 004692D0
0167:00407AD9 ADD ESP,10
0167:00407ADC NEG EAX
0167:00407ADE SBB EAX,EAX
0167:00407AE0 INC EAX
0167:00407AE1 MOV [00489FDC],EAX
0167: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 * 破除全部断点!!!

(编辑:河北网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读