【破文作者】网游难民
【作者主页】http://bbs.126sohu.com
【破解工具】PEiD,OD
【破解平台】Windows XP
【软件名称】Easy Karaoke Player Easy Karaoke Player 3.0.177
【软件大小】511KB
【原版下载】http://www.onlinedown.net/soft/46535.htm
【保护方式】注册码,重启验证
【软件简介】 Eeasy Karaoke Player可以播放卡拉ok或录制卡拉ok歌曲到wav?。它可以利用其内建的强大的多媒体播放器来播放所有的多媒体格式档案。如MP3, MIDI, KAR, WAV, WMA, AC3, OGG, MPA, MP2, AU, AIF, SND,等等。并且支持下列影像格式 VCD, MPEG, AVI, WMV, ASF, OGM, DIVX, DAT, SVCD
【破解声明】我是一只小菜鸟,偶得一点心得,愿与大家分享:)
--------------------------------------------------------------------------------
【详细过程】
一、用PEID查壳为Microsoft Visual C++ 7.0
+++++++++++++++++++++++++++++++++++++++++++
二、运行软件,输入试练码,点确定弹出对话框"Registration failed!",退出软件
再用OD截入脱壳后的程序,右键超级字串查找,找到"Registration failed!",双击进入程序代码段,往上查找。
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
00410CC0 . 83EC 0C SUB ESP,0C------这里下断
00410CC3 . 55 PUSH EBP
00410CC4 . 56 PUSH ESI
00410CC5 . 57 PUSH EDI
00410CC6 . BF 01000000 MOV EDI,1
00410CCB . 57 PUSH EDI
00410CCC . 8BF1 MOV ESI,ECX
00410CCE . E8 F4CA0100 CALL karaoke.0042D7C7
00410CD3 . 8B46 70 MOV EAX,DWORD PTR DS:[ESI+70] ; 用户名地址
00410CD6 . 8B68 F4 MOV EBP,DWORD PTR DS:[EAX-C] ; 用户名位数
00410CD9 . 83FD 02 CMP EBP,2 ; 判断用户名是否大于两位
00410CDC . 7D 15 JGE SHORT karaoke.00410CF3 ; 大于就跳
00410CDE . 6A 00 PUSH 0
00410CE0 . 6A 00 PUSH 0
00410CE2 . 68 C4194400 PUSH karaoke.004419C4 ; please input correct user name!
00410CE7 . E8 E72C0200 CALL karaoke.004339D3
00410CEC . 5F POP EDI
00410CED . 5E POP ESI
00410CEE . 5D POP EBP
00410CEF . 83C4 0C ADD ESP,0C
00410CF2 . C3 RETN
00410CF3 > 8B4E 74 MOV ECX,DWORD PTR DS:[ESI+74] ; 试练码地址
00410CF6 . 8379 F4 08 CMP DWORD PTR DS:[ECX-C],8 ; 试练码是否大于8位
00410CFA . 7D 15 JGE SHORT karaoke.00410D11 ; 大于就跳
00410CFC . 6A 00 PUSH 0
00410CFE . 6A 00 PUSH 0
00410D00 . 68 9C194400 PUSH karaoke.0044199C ; please input correct registration code!
00410D05 . E8 C92C0200 CALL karaoke.004339D3
00410D0A . 5F POP EDI
00410D0B . 5E POP ESI
00410D0C . 5D POP EBP
00410D0D . 83C4 0C ADD ESP,0C
00410D10 . C3 RETN
00410D11 > 8B46 70 MOV EAX,DWORD PTR DS:[ESI+70] ; 用户名地址
00410D14 . 8B48 F4 MOV ECX,DWORD PTR DS:[EAX-C] ; 用户名位数
00410D17 . 85C9 TEST ECX,ECX
00410D19 . 7D 0A JGE SHORT karaoke.00410D25
00410D1B . 68 57000780 PUSH 80070057
00410D20 . E8 EB07FFFF CALL karaoke.00401510
00410D25 > 8A10 MOV DL,BYTE PTR DS:[EAX] ; 用户名第一位ascii送dl
00410D27 . 8B46 70 MOV EAX,DWORD PTR DS:[ESI+70]
00410D2A . 3978 F4 CMP DWORD PTR DS:[EAX-C],EDI
00410D2D . 7D 0A JGE SHORT karaoke.00410D39
00410D2F . 68 57000780 PUSH 80070057
00410D34 . E8 D707FFFF CALL karaoke.00401510
00410D39 > 8A40 01 MOV AL,BYTE PTR DS:[EAX+1] ; 取用户名第2位
00410D3C . 884424 0E MOV BYTE PTR SS:[ESP+E],AL ; 用户名第2位ascii放到ss:[esp+E]
00410D40 . 8B46 70 MOV EAX,DWORD PTR DS:[ESI+70] ; 用户名地址
00410D43 . 8B48 F4 MOV ECX,DWORD PTR DS:[EAX-C] ; 用户名位数
00410D46 . 85C9 TEST ECX,ECX
00410D48 . 7D 0A JGE SHORT karaoke.00410D54
00410D4A . 68 57000780 PUSH 80070057
00410D4F . E8 BC07FFFF CALL karaoke.00401510
00410D54 > 8B4E 70 MOV ECX,DWORD PTR DS:[ESI+70] ; 用户名地址
00410D57 . 53 PUSH EBX
00410D58 . 8A18 MOV BL,BYTE PTR DS:[EAX] ; 用户名第1位ascii送bl,见410d25
00410D5A . 3979 F4 CMP DWORD PTR DS:[ECX-C],EDI
00410D5D . 7D 0A JGE SHORT karaoke.00410D69
00410D5F . 68 57000780 PUSH 80070057
00410D64 . E8 A707FFFF CALL karaoke.00401510
00410D69 > 0FB6C2 MOVZX EAX,DL ; 用户名第1位ascii送eax,见410d25
00410D6C . 83C8 4B OR EAX,4B ; 用户名第1位ascii码与4bh逻辑或运算,结果放入eax
00410D6F . 99 CDQ ; 把EAX中的字的符号扩展到EDX中去
00410D70 . BF 0A000000 MOV EDI,0A ; 把EDI的值设置为Ah
00410D75 . F7FF IDIV EDI ; 第1位用户名的ascii与4bh逻辑或运算的值除以A,余数放入dl中
00410D77 . 0FB64424 12 MOVZX EAX,BYTE PTR SS:[ESP+12] ; 用户名的第2位ascii码的值送到eax
00410D7C . 83C8 41 OR EAX,41 ; 用户名第2位ascii码与41h逻辑或运算,结果放入eax
00410D7F . 885424 16 MOV BYTE PTR SS:[ESP+16],DL ; 第1位用户名的ascii与4bh逻辑或运算的值除以A的余数放入SS:[ESP+16]中
00410D83 . 99 CDQ ; 把EAX中的字的符号扩展到EDX中去
00410D84 . F7FF IDIV EDI ; 用户名第2位的ascii与41h逻辑或运算的值除以A,余数放入dl中
00410D86 . 0FB6C3 MOVZX EAX,BL ; 用户名第1位ascii送eax,bl被赋值见410d25
00410D89 . 83C8 52 OR EAX,52 ; 用户名第1位ascii码与52h逻辑或运算,结果放入eax
00410D8C . 885424 12 MOV BYTE PTR SS:[ESP+12],DL ; 用户名第2位的ascii与41h逻辑或运算的值除以A的余数放入PTR SS:[ESP+12]中
00410D90 . 99 CDQ ; 把EAX中的字的符号扩展到EDX中去
00410D91 . F7FF IDIV EDI ; 第1位用户名的ascii与52h逻辑或运算的值除以A,余数放入dl中
00410D93 . 0FB641 01 MOVZX EAX,BYTE PTR DS:[ECX+1] ; 用户名第2位ascii送eax
00410D97 . 83C8 4B OR EAX,4B ; 用户名第2位ascii码与4bh逻辑或运算,结果放入eax
00410D9A . 8BCF MOV ECX,EDI ; 把edi的值赋予ecx,即:edi=ecx=Ah
00410D9C . 885424 17 MOV BYTE PTR SS:[ESP+17],DL ; 第1位用户名的ascii与52h逻辑或运算的值除以A的余数放入SS:[ESP+17]中
00410DA0 . 99 CDQ ; 把EAX中的字的符号扩展到EDX中去
00410DA1 . F7F9 IDIV ECX ; eax/ecx,即:用户名第2位的ascii与4bh逻辑或运算的值除以A,余数放入dl中
00410DA3 . 33C0 XOR EAX,EAX ; eax清0
00410DA5 . 33C9 XOR ECX,ECX ; ecx清0
00410DA7 . 85ED TEST EBP,EBP
00410DA9 . 885424 18 MOV BYTE PTR SS:[ESP+18],DL ; 把用户名第2位的ascii与4bh逻辑或运算的值除以A的余数放入SS:[ESP+18]中
00410DAD . 7E 20 JLE SHORT karaoke.00410DCF
00410DAF . 90 NOP
00410DB0 > 85C9 TEST ECX,ECX
00410DB2 . 0F8C D2000000 JL karaoke.00410E8A
00410DB8 . 8B7E 70 MOV EDI,DWORD PTR DS:[ESI+70] ; 用户名地址
00410DBB . 3B4F F4 CMP ECX,DWORD PTR DS:[EDI-C] ; 用户名位数
00410DBE . 0F8F C6000000 JG karaoke.00410E8A
00410DC4 . 0FB6140F MOVZX EDX,BYTE PTR DS:[EDI+ECX]
00410DC8 . 03C2 ADD EAX,EDX
00410DCA . 41 INC ECX
00410DCB . 3BCD CMP ECX,EBP
00410DCD .^ 7C E1 JL SHORT karaoke.00410DB0 ; 一个回旋,把用户名逐个转换成ASCII码然后相加,结果保存到寄存器EAX中
00410DCF > 8B4E 74 MOV ECX,DWORD PTR DS:[ESI+74] ; 试练码地址
00410DD2 . 8B51 F4 MOV EDX,DWORD PTR DS:[ECX-C] ; 试练码位数
00410DD5 . 85D2 TEST EDX,EDX
00410DD7 . 7D 0A JGE SHORT karaoke.00410DE3
00410DD9 . 68 57000780 PUSH 80070057
00410DDE . E8 2D07FFFF CALL karaoke.00401510
00410DE3 > 8A11 MOV DL,BYTE PTR DS:[ECX] ; 试练码第1位的ASCII码放入dl中
00410DE5 . 8B4E 74 MOV ECX,DWORD PTR DS:[ESI+74]
00410DE8 . 8379 F4 01 CMP DWORD PTR DS:[ECX-C],1
00410DEC . 885424 19 MOV BYTE PTR SS:[ESP+19],DL ; 试练码第1位的ASCII码放入SS:[ESP+19]中
00410DF0 . 7D 0A JGE SHORT karaoke.00410DFC
00410DF2 . 68 57000780 PUSH 80070057
00410DF7 . E8 1407FFFF CALL karaoke.00401510
00410DFC > 8A49 01 MOV CL,BYTE PTR DS:[ECX+1] ; 试练码第2位的ASCII码放入cl中
00410DFF . 8B7E 74 MOV EDI,DWORD PTR DS:[ESI+74]
00410E02 . 884C24 13 MOV BYTE PTR SS:[ESP+13],CL ; 试练码第2位的ASCII码放入SS:[ESP+13]中
00410E06 . 837F F4 02 CMP DWORD PTR DS:[EDI-C],2
00410E0A . 7D 0A JGE SHORT karaoke.00410E16
00410E0C . 68 57000780 PUSH 80070057
00410E11 . E8 FA06FFFF CALL karaoke.00401510
00410E16 > 8A4F 02 MOV CL,BYTE PTR DS:[EDI+2] ; 试练码第3位的ASCII码放入cl中
00410E19 . 8B7E 74 MOV EDI,DWORD PTR DS:[ESI+74]
00410E1C . 884C24 14 MOV BYTE PTR SS:[ESP+14],CL ; 试练码第3位的ASCII码放入PTR SS:[ESP+14]中
00410E20 . 837F F4 03 CMP DWORD PTR DS:[EDI-C],3
00410E24 . 7D 0A JGE SHORT karaoke.00410E30
00410E26 . 68 57000780 PUSH 80070057
00410E2B . E8 E006FFFF CALL karaoke.00401510
00410E30 > 8A4F 03 MOV CL,BYTE PTR DS:[EDI+3] ; 试练码第4位的ASCII码放入cl中
00410E33 . 8B7E 74 MOV EDI,DWORD PTR DS:[ESI+74]
00410E36 . 884C24 15 MOV BYTE PTR SS:[ESP+15],CL ; 试练码第4位的ASCII码放入SS:[ESP+15]中
00410E3A . 837F F4 04 CMP DWORD PTR DS:[EDI-C],4
00410E3E . 7D 0A JGE SHORT karaoke.00410E4A
00410E40 . 68 57000780 PUSH 80070057
00410E45 . E8 C606FFFF CALL karaoke.00401510
00410E4A > 8A5F 04 MOV BL,BYTE PTR DS:[EDI+4] ; 试练码第5位的ASCII码放入bl中
00410E4D . 8B7E 74 MOV EDI,DWORD PTR DS:[ESI+74]
00410E50 . 837F F4 05 CMP DWORD PTR DS:[EDI-C],5
00410E54 . 7D 0A JGE SHORT karaoke.00410E60
00410E56 . 68 57000780 PUSH 80070057
00410E5B . E8 B006FFFF CALL karaoke.00401510
00410E60 > 8A4F 05 MOV CL,BYTE PTR DS:[EDI+5] ; 试练码第6位的ASCII码放入cl中
00410E63 . 8B7E 74 MOV EDI,DWORD PTR DS:[ESI+74]
00410E66 . 884C24 1A MOV BYTE PTR SS:[ESP+1A],CL ; 试练码第6位的ASCII码放入SS:[ESP+1A]中
00410E6A . 837F F4 06 CMP DWORD PTR DS:[EDI-C],6
00410E6E . 7D 0A JGE SHORT karaoke.00410E7A
00410E70 . 68 57000780 PUSH 80070057
00410E75 . E8 9606FFFF CALL karaoke.00401510
00410E7A > 8A4F 06 MOV CL,BYTE PTR DS:[EDI+6] ; 试练码第7位的ASCII码放入cl中
00410E7D . 8B7E 74 MOV EDI,DWORD PTR DS:[ESI+74]
00410E80 . 884C24 1B MOV BYTE PTR SS:[ESP+1B],CL ; 试练码第7位的ASCII码放入SS:[ESP+1B]中
00410E84 . 837F F4 07 CMP DWORD PTR DS:[EDI-C],7
00410E88 . 7D 0A JGE SHORT karaoke.00410E94
00410E8A > 68 57000780 PUSH 80070057
00410E8F . E8 7C06FFFF CALL karaoke.00401510
00410E94 > 8A4F 07 MOV CL,BYTE PTR DS:[EDI+7] ; 试练码第8位的ASCII码放入cl中
00410E97 . 0FB67C24 16 MOVZX EDI,BYTE PTR SS:[ESP+16] ; 把第1位用户名的ascii与4bh逻辑或运算的值除以A的余数放入edi(410d7f)
00410E9C . 0FB6D2 MOVZX EDX,DL ; 试练码第1位的ASCII码放入edx中(410de3)
00410E9F . 83EA 30 SUB EDX,30 ; 试练码第1位的ASCII码减去30,即变为第1位试练码放入edx
00410EA2 . 3BFA CMP EDI,EDX ; 比较上面两个值
00410EA4 75 48 JNZ SHORT karaoke.00410EEE ; 不等则跳向下面的比较
00410EA6 . 0FB65424 13 MOVZX EDX,BYTE PTR SS:[ESP+13] ; 试练码第2位的ASCII码放入edx中
00410EAB . 0FB67C24 12 MOVZX EDI,BYTE PTR SS:[ESP+12] ; 用户名第2位的ascii与41h逻辑或运算的值除以A的余数放入edi中
00410EB0 . 83EA 30 SUB EDX,30 ; 试练码第2位的ASCII码减去30,即变为第2位试练码放入edx
00410EB3 . 3BFA CMP EDI,EDX ; 比较上面两个值
00410EB5 . 75 37 JNZ SHORT karaoke.00410EEE ; 不等则跳向下面的比较
00410EB7 . 0FB65424 14 MOVZX EDX,BYTE PTR SS:[ESP+14] ; 试练码第3位的ASCII码放入edx中
00410EBC . 0FB67C24 17 MOVZX EDI,BYTE PTR SS:[ESP+17] ; 第1位用户名的ascii与52h逻辑或运算的值除以A的余数放入edi中
00410EC1 . 83EA 30 SUB EDX,30 ; 试练码第3位的ASCII码减去30,即变为第3位试练码放入edx
00410EC4 . 3BFA CMP EDI,EDX ; 比较上面两个值
00410EC6 . 75 26 JNZ SHORT karaoke.00410EEE ; 不等则跳向下面的比较
00410EC8 . 0FB65424 15 MOVZX EDX,BYTE PTR SS:[ESP+15] ; 试练码第4位的ASCII码放入edx中
00410ECD . 0FB67C24 18 MOVZX EDI,BYTE PTR SS:[ESP+18] ; 把用户名第2位的ascii与4bh逻辑或运算的值除以A的余数放入edi中
00410ED2 . 83EA 30 SUB EDX,30 ; 试练码第4位的ASCII码减去30,即变为第4位试练码放入edx
00410ED5 . 3BFA CMP EDI,EDX ; 比较上面两个值
00410ED7 . 75 15 JNZ SHORT karaoke.00410EEE ; 不等则跳向下面的比较
00410ED9 . 99 CDQ ; 把EAX中的字的符号扩展到EDX中去
00410EDA . BF 0A000000 MOV EDI,0A ; 给edi赋值Ah
00410EDF . F7FF IDIV EDI ; eax(用户名各位ascii累加值)除以A,把余数放入dl
00410EE1 . 0FB6C2 MOVZX EAX,DL ; 用户名各位ascii累加值除以A的余数放入eax
00410EE4 . 0FB6D3 MOVZX EDX,BL ; 试练码第5位的ASCII码放入edx中
00410EE7 . 83EA 30 SUB EDX,30 ; 试练码第5位的ASCII码减去30,即变为第5位试练码放入edx
00410EEA . 3BC2 CMP EAX,EDX ; 比较上面两个值
00410EEC 74 39 JE SHORT karaoke.00410F27 ; 不等则继续下面比较,相等则跳向成功-----关键跳
00410EEE > 8A4424 19 MOV AL,BYTE PTR SS:[ESP+19] ; 试练码第1位的ASCII码放入al中
00410EF2 . B2 36 MOV DL,36 ; 给dl赋值36
00410EF4 . 3AC2 CMP AL,DL ; 比较上面两个值
00410EF6 0F85 81000000 JNZ karaoke.00410F7D ; 不相等则跳向注册失败处
00410EFC . B0 33 MOV AL,33 ; 给al赋值33
00410EFE . 384424 13 CMP BYTE PTR SS:[ESP+13],AL ; 试练码第2位的ASCII码和33比较
00410F02 75 79 JNZ SHORT karaoke.00410F7D ; 不相等则跳向注册失败处
00410F04 . 384424 14 CMP BYTE PTR SS:[ESP+14],AL ; 试练码第3位的ASCII码和33比较
00410F08 75 73 JNZ SHORT karaoke.00410F7D ; 不相等则跳向注册失败处
00410F0A . 385424 15 CMP BYTE PTR SS:[ESP+15],DL ; 试练码第4位的ASCII码和36比较
00410F0E 75 6D JNZ SHORT karaoke.00410F7D ; 不相等则跳向注册失败处
00410F10 . 80FB 32 CMP BL,32 ; 试练码第5位的ASCII码和32比较
00410F13 75 68 JNZ SHORT karaoke.00410F7D ; 不相等则跳向注册失败处
00410F15 . 807C24 1A 31 CMP BYTE PTR SS:[ESP+1A],31 ; 试练码第6位的ASCII码和31比较
00410F1A 75 61 JNZ SHORT karaoke.00410F7D ; 不相等则跳向注册失败处
00410F1C . 807C24 1B 34 CMP BYTE PTR SS:[ESP+1B],34 ; 试练码第7位的ASCII码和34比较
00410F21 75 5A JNZ SHORT karaoke.00410F7D ; 不相等则跳向注册失败处
00410F23 . 3ACA CMP CL,DL ; 试练码第8位的ASCII码和36(410ef2)比较
00410F25 75 56 JNZ SHORT karaoke.00410F7D ; 不等则跳向注册失败处,相等则跳向成功-----关键跳
00410F27 > 6A 00 PUSH 0
00410F29 . 6A 00 PUSH 0
00410F2B . 68 80194400 PUSH karaoke.00441980 ; registration has succeeded!
00410F30 . E8 9E2A0200 CALL karaoke.004339D3
00410F35 . 8B7E 70 MOV EDI,DWORD PTR DS:[ESI+70]
00410F38 . E8 14900200 CALL karaoke.00439F51
00410F3D . 8B40 04 MOV EAX,DWORD PTR DS:[EAX+4]
00410F40 . 57 PUSH EDI ; /Arg3
00410F41 . 68 60004400 PUSH karaoke.00440060 ; |username
00410F46 . 68 9CFD4300 PUSH karaoke.0043FD9C ; |option
00410F4B . 8BC8 MOV ECX,EAX ; |
00410F4D . E8 982B0200 CALL karaoke.00433AEA ; \karaoke.00433AEA
00410F52 . 8B7E 74 MOV EDI,DWORD PTR DS:[ESI+74]
00410F55 . E8 F78F0200 CALL karaoke.00439F51
00410F5A . 8B40 04 MOV EAX,DWORD PTR DS:[EAX+4]
00410F5D . 57 PUSH EDI ; /Arg3
00410F5E . 68 4C004400 PUSH karaoke.0044004C ; |registration_code
00410F63 . 68 9CFD4300 PUSH karaoke.0043FD9C ; |option
00410F68 . 8BC8 MOV ECX,EAX ; |
00410F6A . E8 7B2B0200 CALL karaoke.00433AEA ; \karaoke.00433AEA
00410F6F . 5B POP EBX
00410F70 . 5F POP EDI
00410F71 . 8BCE MOV ECX,ESI
00410F73 . 5E POP ESI
00410F74 . 5D POP EBP
00410F75 . 83C4 0C ADD ESP,0C
00410F78 . E9 57B00100 JMP karaoke.0042BFD4
00410F7D > 6A 00 PUSH 0
00410F7F . 6A 00 PUSH 0
00410F81 . 68 68194400 PUSH karaoke.00441968 ; registration failed!
00410F86 . E8 482A0200 CALL karaoke.004339D3
00410F8B . 5B POP EBX
00410F8C . 5F POP EDI
00410F8D . 5E POP ESI
00410F8E . 5D POP EBP
00410F8F . 83C4 0C ADD ESP,0C
00410F92 . C3 RETN
【算法总结】
第1位注册码:用户名第1位的ascii与4bh逻辑或运算的值除以A的余数
第2位注册码:用户名第2位的ascii与41h逻辑或运算的值除以A的余数
第3位注册码:用户名第1位的ascii与52h逻辑或运算的值除以A的余数
第4位注册码:用户名第2位的ascii与4bh逻辑或运算的值除以A的余数
第5位注册码:用户名各位ascii累加值除以A的余数
其它位数字随意填写~~
另外还有一组通用注册码:
前8位:63362146
其它位数字随意填写~~
----------------------------------------------------------------------
【版权声明】: 本文原创于看雪技术论坛 , 转载请注明作者并保持文章的完整, 谢谢!
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!