【破文标题】Registry Easy 4.6算法分析
【破文作者】tianxj
【作者邮箱】tianxj_2007@126.com
【作者主页】WwW.ChiNaPYG.CoM
【破解工具】PEiD,OD
【破解平台】Windows XP
【软件名称】Registry Easy 4.6
【软件大小】2470KB
【软件类别】国外软件/系统辅助
【软件授权】共享版
【软件语言】英文
【更新时间】2008-7-18
【原版下载】华军软件园
【保护方式】注册码
【软件简介】Registry Easy是一款系统辅助软件,让您的计算机保持清洁和改善计算机的性能。让您的计算机使用起来更快捷 
【破解声明】我是一只小菜鸟,偶得一点心得,愿与大家分享:)
 初学破解与编程,只是感兴趣,没有其它目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------
【破解内容】
--------------------------------------------------------------
**************************************************************
一、运行程序,进行注册,输入错误的注册信息进行检测,有提示信息
"Invalid serial number! Please try again..."
**************************************************************
二、用PEiD对RE.exe查壳,为 Borland Delphi 6.0 - 7.0
**************************************************************
三、运行OD,打开RE.exe,右键超级字串参考查找ASCII.
来到关键之处

代码:
004D4DF4  /$  55            PUSH EBP
004D4DF5  |.  8BEC          MOV EBP,ESP
004D4DF7  |.  B9 0A000000   MOV ECX,0A
004D4DFC  |>  6A 00         /PUSH 0
004D4DFE  |.  6A 00         |PUSH 0
004D4E00  |.  49            |DEC ECX
004D4E01  |.^ 75 F9         \JNZ SHORT RE.004D4DFC
004D4E03  |.  53            PUSH EBX
004D4E04  |.  56            PUSH ESI
004D4E05  |.  8BD8          MOV EBX,EAX
004D4E07  |.  33C0          XOR EAX,EAX
004D4E09  |.  55            PUSH EBP
004D4E0A  |.  68 5C504D00   PUSH RE.004D505C
004D4E0F  |.  64:FF30       PUSH DWORD PTR FS:[EAX]
004D4E12  |.  64:8920       MOV DWORD PTR FS:[EAX],ESP
004D4E15  |.  8D55 E8       LEA EDX,DWORD PTR SS:[EBP-18]
004D4E18  |.  8B83 10030000 MOV EAX,DWORD PTR DS:[EBX+310]
004D4E1E  |.  E8 91C8F9FF   CALL RE.004716B4
004D4E23  |.  8B45 E8       MOV EAX,DWORD PTR SS:[EBP-18]            ;  //试练码
004D4E26  |.  8D55 EC       LEA EDX,DWORD PTR SS:[EBP-14]
004D4E29  |.  E8 FE42F3FF   CALL RE.0040912C
004D4E2E  |.  8B45 EC       MOV EAX,DWORD PTR SS:[EBP-14]            ;  //试练码
004D4E31  |.  8D55 FC       LEA EDX,DWORD PTR SS:[EBP-4]
004D4E34  |.  E8 DF40F3FF   CALL RE.00408F18
004D4E39  |.  A0 6C504D00   MOV AL,BYTE PTR DS:[4D506C]
004D4E3E  |.  50            PUSH EAX
004D4E3F  |.  8D45 E4       LEA EAX,DWORD PTR SS:[EBP-1C]
004D4E42  |.  50            PUSH EAX
004D4E43  |.  33C9          XOR ECX,ECX
004D4E45  |.  BA 78504D00   MOV EDX,RE.004D5078
004D4E4A  |.  8B45 FC       MOV EAX,DWORD PTR SS:[EBP-4]             ;  //试练码
004D4E4D  |.  E8 DE9CF3FF   CALL RE.0040EB30                         ;  //去掉试练码中的"-"
004D4E52  |.  8B55 E4       MOV EDX,DWORD PTR SS:[EBP-1C]            ;  //去掉"-"的试练码
004D4E55  |.  8D45 FC       LEA EAX,DWORD PTR SS:[EBP-4]
004D4E58  |.  E8 DFFCF2FF   CALL RE.00404B3C
004D4E5D  |.  8D45 E0       LEA EAX,DWORD PTR SS:[EBP-20]
004D4E60  |.  50            PUSH EAX
004D4E61  |.  B9 08000000   MOV ECX,8
004D4E66  |.  BA 09000000   MOV EDX,9
004D4E6B  |.  8B45 FC       MOV EAX,DWORD PTR SS:[EBP-4]
004D4E6E  |.  E8 5101F3FF   CALL RE.00404FC4                         ;  //取去掉"-"的试练码的9-16位
004D4E73  |.  8B45 E0       MOV EAX,DWORD PTR SS:[EBP-20]            ;  //去掉"-"的试练码的9-16位
004D4E76  |.  8D55 F8       LEA EDX,DWORD PTR SS:[EBP-8]
004D4E79  |.  E8 5E40F3FF   CALL RE.00408EDC
004D4E7E  |.  8D45 F4       LEA EAX,DWORD PTR SS:[EBP-C]
004D4E81  |.  50            PUSH EAX
004D4E82  |.  B9 01000000   MOV ECX,1
004D4E87  |.  BA 03000000   MOV EDX,3
004D4E8C  |.  8B45 FC       MOV EAX,DWORD PTR SS:[EBP-4]
004D4E8F  |.  E8 3001F3FF   CALL RE.00404FC4
004D4E94  |.  8D45 DC       LEA EAX,DWORD PTR SS:[EBP-24]
004D4E97  |.  50            PUSH EAX
004D4E98  |.  B9 01000000   MOV ECX,1
004D4E9D  |.  BA 01000000   MOV EDX,1
004D4EA2  |.  8B45 FC       MOV EAX,DWORD PTR SS:[EBP-4]             ;  //去掉"-"的试练码
004D4EA5  |.  E8 1A01F3FF   CALL RE.00404FC4
004D4EAA  |.  8B45 DC       MOV EAX,DWORD PTR SS:[EBP-24]
004D4EAD  |.  E8 AA48F3FF   CALL RE.0040975C                         ;  //将试练码第1位送入EAX
004D4EB2  |.  8BF0          MOV ESI,EAX                              ;  //ESI=EAX
004D4EB4  |.  46            INC ESI                                  ;  //ESI=ESI+1
004D4EB5  |.  8D45 F0       LEA EAX,DWORD PTR SS:[EBP-10]
004D4EB8  |.  50            PUSH EAX
004D4EB9  |.  8D55 D8       LEA EDX,DWORD PTR SS:[EBP-28]
004D4EBC  |.  B8 84504D00   MOV EAX,RE.004D5084                      ;  ASCII "Easy Gang"
004D4EC1  |.  E8 EE8FFEFF   CALL RE.004BDEB4                         ;  //取"Easy Gang"的标准MD5值
004D4EC6  |.  8B45 D8       MOV EAX,DWORD PTR SS:[EBP-28]            ;  //"Easy Gang"的标准MD5值
004D4EC9  |.  B9 0A000000   MOV ECX,0A
004D4ECE  |.  8BD6          MOV EDX,ESI
004D4ED0  |.  E8 EF00F3FF   CALL RE.00404FC4                         ;  //取"Easy Gang"的标准MD5值的ESI位后的10位字符
004D4ED5  |.  8D45 D4       LEA EAX,DWORD PTR SS:[EBP-2C]
004D4ED8  |.  50            PUSH EAX
004D4ED9  |.  B9 01000000   MOV ECX,1
004D4EDE  |.  BA 02000000   MOV EDX,2
004D4EE3  |.  8B45 FC       MOV EAX,DWORD PTR SS:[EBP-4]             ;  //去掉"-"的试练码
004D4EE6  |.  E8 D900F3FF   CALL RE.00404FC4
004D4EEB  |.  8B45 D4       MOV EAX,DWORD PTR SS:[EBP-2C]
004D4EEE  |.  E8 6948F3FF   CALL RE.0040975C                         ;  //将试练码第2位送入EAX
004D4EF3  |.  8BF0          MOV ESI,EAX                              ;  //ESI=EAX
004D4EF5  |.  46            INC ESI                                  ;  //ESI=ESI+1
004D4EF6  |.  8D45 FC       LEA EAX,DWORD PTR SS:[EBP-4]
004D4EF9  |.  50            PUSH EAX
004D4EFA  |.  B9 05000000   MOV ECX,5
004D4EFF  |.  BA 04000000   MOV EDX,4
004D4F04  |.  8B45 FC       MOV EAX,DWORD PTR SS:[EBP-4]             ;  //去掉"-"的试练码
004D4F07  |.  E8 B800F3FF   CALL RE.00404FC4                         ;  //取去掉"-"的试练码的4-8位
004D4F0C  |.  8D55 D0       LEA EDX,DWORD PTR SS:[EBP-30]
004D4F0F  |.  8B45 FC       MOV EAX,DWORD PTR SS:[EBP-4]             ;  //去掉"-"的试练码的4-8位
004D4F12  |.  E8 1542F3FF   CALL RE.0040912C
004D4F17  |.  837D D0 00    CMP DWORD PTR SS:[EBP-30],0
004D4F1B  |.  0F84 DD000000 JE RE.004D4FFE                           ;  //去掉"-"的试练码的4-8位为空则跳
004D4F21  |.  8D55 CC       LEA EDX,DWORD PTR SS:[EBP-34]
004D4F24  |.  8B45 F0       MOV EAX,DWORD PTR SS:[EBP-10]            ;  //取"Easy Gang"的标准MD5值的ESI位后的10位字符
004D4F27  |.  E8 0042F3FF   CALL RE.0040912C
004D4F2C  |.  837D CC 00    CMP DWORD PTR SS:[EBP-34],0
004D4F30  |.  0F84 C8000000 JE RE.004D4FFE                           ;  //取"Easy Gang"的标准MD5值的ESI位后的10位字符
004D4F36  |.  8D55 C8       LEA EDX,DWORD PTR SS:[EBP-38]
004D4F39  |.  8B45 F8       MOV EAX,DWORD PTR SS:[EBP-8]             ;  //去掉"-"的试练码的9-16位
004D4F3C  |.  E8 EB41F3FF   CALL RE.0040912C
004D4F41  |.  837D C8 00    CMP DWORD PTR SS:[EBP-38],0
004D4F45  |.  0F84 B3000000 JE RE.004D4FFE                           ;  //去掉"-"的试练码的9-16位为空则跳
004D4F4B  |.  8D55 C4       LEA EDX,DWORD PTR SS:[EBP-3C]
004D4F4E  |.  8B45 F4       MOV EAX,DWORD PTR SS:[EBP-C]
004D4F51  |.  E8 D641F3FF   CALL RE.0040912C
004D4F56  |.  837D C4 00    CMP DWORD PTR SS:[EBP-3C],0
004D4F5A  |.  0F84 9E000000 JE RE.004D4FFE
004D4F60  |.  8D45 C0       LEA EAX,DWORD PTR SS:[EBP-40]
004D4F63  |.  50            PUSH EAX
004D4F64  |.  FF75 F8       PUSH DWORD PTR SS:[EBP-8]                ;  //去掉"-"的试练码的9-16位
004D4F67  |.  FF75 F0       PUSH DWORD PTR SS:[EBP-10]               ;  //取"Easy Gang"的标准MD5值的ESI位后的10位字符
004D4F6A  |.  FF75 F4       PUSH DWORD PTR SS:[EBP-C]                ;  //试练码的第4位
004D4F6D  |.  8D45 B8       LEA EAX,DWORD PTR SS:[EBP-48]
004D4F70  |.  BA 03000000   MOV EDX,3
004D4F75  |.  E8 AAFEF2FF   CALL RE.00404E24                         ;  //去掉"-"的试练码的9-16位与"Easy Gang"的标准MD5值的

2-11位、试练码的第4位相连
004D4F7A  |.  8B45 B8       MOV EAX,DWORD PTR SS:[EBP-48]            ;  //相连字符串
004D4F7D  |.  8D55 BC       LEA EDX,DWORD PTR SS:[EBP-44]
004D4F80  |.  E8 2F8FFEFF   CALL RE.004BDEB4                         ;  //取相连字符串的标准MD5值
004D4F85  |.  8B45 BC       MOV EAX,DWORD PTR SS:[EBP-44]            ;  //相连字符串的标准MD5值
004D4F88  |.  B9 05000000   MOV ECX,5
004D4F8D  |.  8BD6          MOV EDX,ESI
004D4F8F  |.  E8 3000F3FF   CALL RE.00404FC4                         ;  //取相连字符串的标准MD5值的ESI位后的5位字符
004D4F94  |.  8B55 C0       MOV EDX,DWORD PTR SS:[EBP-40]            ;  //相连字符串的标准MD5值的ESI位后的5位字符
004D4F97  |.  8B45 FC       MOV EAX,DWORD PTR SS:[EBP-4]             ;  //去掉"-"的试练码的4-8位
004D4F9A  |.  E8 11FFF2FF   CALL RE.00404EB0                         ;  //关键比较
004D4F9F  |.  75 35         JNZ SHORT RE.004D4FD6                    ;  //关键跳转
004D4FA1  |.  8D55 B0       LEA EDX,DWORD PTR SS:[EBP-50]
004D4FA4  |.  8B83 10030000 MOV EAX,DWORD PTR DS:[EBX+310]
004D4FAA  |.  E8 05C7F9FF   CALL RE.004716B4
004D4FAF  |.  8B45 B0       MOV EAX,DWORD PTR SS:[EBP-50]
004D4FB2  |.  8D55 B4       LEA EDX,DWORD PTR SS:[EBP-4C]
004D4FB5  |.  E8 7241F3FF   CALL RE.0040912C
004D4FBA  |.  8B4D B4       MOV ECX,DWORD PTR SS:[EBP-4C]
004D4FBD  |.  33D2          XOR EDX,EDX
004D4FBF  |.  8BC3          MOV EAX,EBX
004D4FC1  |.  E8 06010000   CALL RE.004D50CC
004D4FC6  |.  8BC3          MOV EAX,EBX
004D4FC8  |.  E8 E7010000   CALL RE.004D51B4
004D4FCD  |.  8BC3          MOV EAX,EBX
004D4FCF  |.  E8 B09AFBFF   CALL RE.0048EA84
004D4FD4  |.  EB 4E         JMP SHORT RE.004D5024
004D4FD6  |>  6A 30         PUSH 30
004D4FD8  |.  B9 90504D00   MOV ECX,RE.004D5090                      ;  ASCII "Registry Easy"
004D4FDD  |.  BA A0504D00   MOV EDX,RE.004D50A0                      ;  ASCII "Invalid serial number! Please try again..."
004D4FE2  |.  A1 1C655800   MOV EAX,DWORD PTR DS:[58651C]
004D4FE7  |.  8B00          MOV EAX,DWORD PTR DS:[EAX]
004D4FE9  |.  E8 F6D3FBFF   CALL RE.004923E4
004D4FEE  |.  8B83 10030000 MOV EAX,DWORD PTR DS:[EBX+310]
004D4FF4  |.  8B10          MOV EDX,DWORD PTR DS:[EAX]
004D4FF6  |.  FF92 C4000000 CALL DWORD PTR DS:[EDX+C4]
004D4FFC  |.  EB 26         JMP SHORT RE.004D5024
004D4FFE  |>  6A 30         PUSH 30
004D5000  |.  B9 90504D00   MOV ECX,RE.004D5090                      ;  ASCII "Registry Easy"
004D5005  |.  BA A0504D00   MOV EDX,RE.004D50A0                      ;  ASCII "Invalid serial number! Please try again..."
004D500A  |.  A1 1C655800   MOV EAX,DWORD PTR DS:[58651C]
004D500F  |.  8B00          MOV EAX,DWORD PTR DS:[EAX]
004D5011  |.  E8 CED3FBFF   CALL RE.004923E4
004D5016  |.  8B83 10030000 MOV EAX,DWORD PTR DS:[EBX+310]
004D501C  |.  8B10          MOV EDX,DWORD PTR DS:[EAX]
004D501E  |.  FF92 C4000000 CALL DWORD PTR DS:[EDX+C4]
004D5024  |>  33C0          XOR EAX,EAX
004D5026  |.  5A            POP EDX
004D5027  |.  59            POP ECX
004D5028  |.  59            POP ECX
004D5029  |.  64:8910       MOV DWORD PTR FS:[EAX],EDX
004D502C  |.  68 63504D00   PUSH RE.004D5063
004D5031  |>  8D45 B0       LEA EAX,DWORD PTR SS:[EBP-50]
004D5034  |.  E8 6BFAF2FF   CALL RE.00404AA4
004D5039  |.  8D45 B4       LEA EAX,DWORD PTR SS:[EBP-4C]
004D503C  |.  BA 0D000000   MOV EDX,0D
004D5041  |.  E8 82FAF2FF   CALL RE.00404AC8
004D5046  |.  8D45 E8       LEA EAX,DWORD PTR SS:[EBP-18]
004D5049  |.  E8 56FAF2FF   CALL RE.00404AA4
004D504E  |.  8D45 EC       LEA EAX,DWORD PTR SS:[EBP-14]
004D5051  |.  BA 05000000   MOV EDX,5
004D5056  |.  E8 6DFAF2FF   CALL RE.00404AC8
004D505B  \.  C3            RETN
004D505C   .^ E9 A3F3F2FF   JMP RE.00404404
004D5061   .^ EB CE         JMP SHORT RE.004D5031
004D5063   .  5E            POP ESI
004D5064   .  5B            POP EBX
004D5065   .  8BE5          MOV ESP,EBP
004D5067   .  5D            POP EBP
004D5068   .  C3            RETN
**************************************************************  
【破解总结】
--------------------------------------------------------------
【算法总结】
注册码形式为XXXX-XXXX-XXXX-XXXX,取注册码的第3组第4组与"Easy Gang"的标准MD5值中的的10个字符、注册码的第1组第3位相连字符串的MD5值的5个字符,与注册码的第1组第4位和注册码的第2组相连字符串比较,若相等则注册成功
--------------------------------------------------------------
【算法注册机】
〖VB代码〗
Private Sub Command1_Click()
   a1 = Int(Rnd() * 10)
   a2 = Int(Rnd() * 10)
   a3 = Int(Rnd() * 10)
   a9 = Int(Rnd() * 10)
   a10 = Int(Rnd() * 10)
   a11 = Int(Rnd() * 10)
   a12 = Int(Rnd() * 10)
   a13 = Int(Rnd() * 10)
   a14 = Int(Rnd() * 10)
   a15 = Int(Rnd() * 10)
   a16 = Int(Rnd() * 10)
   b3 = a9 & a10 & a11 & a12
   b4 = a13 & a14 & a15 & a16
   c1 = LCase(MD5("Easy Gang"))    'MD5模块
   c2 = Mid(c1, a1 + 1, 10)
   c3 = LCase(MD5(b3 & b4 & c2 & a3))
   c4 = Mid(c3, a2 + 1, 5)
   b2 = Mid(c4, 2, 4)
   a4 = Left(c4, 1)
   b1 = a1 & a2 & a3 & a4
   Text1.Text = b1 & "-" & b2 & "-" & b3 & "-" & b4
End Sub
--------------------------------------------------------------
【注册信息】
一组可用注册码:1119-c78f-3333-4444
保存在[HKEY_CURRENT_USER\Software\RegistryEasy]
--------------------------------------------------------------
感谢飘云老大、猫老大、Nisy老大以及很多前辈们的学习教程以及所有帮助过我的论坛兄弟姐妹们!谢谢
--------------------------------------------------------------
【版权声明】破文是学习的手记,兴趣是成功的源泉;本破文纯属技术交流, 转载请注明作者并保持文章的完整, 谢谢!