首页
社区
课程
招聘
[原创]也谈多功能时钟日历的爆破及部分算法分析
发表于: 2005-3-21 12:48 8194

[原创]也谈多功能时钟日历的爆破及部分算法分析

2005-3-21 12:48
8194

【破文标题】:也谈多功能时钟日历的爆破及部分算法分析
【破解目标】:多功能时钟日历2.23
【破解作者】:jney2
【破解日期】:2005年3月18日
【作者声明】:破解,我是菜鸟,更要学习,练习!!!一点心得,大家分享。
【破解平台】:XP+OD+Dede

【简要说明】:看了gestapo8写的文章《爆破多功能时钟日历V2.5》,他的第一次,第一次能达这样的水平,已经相当不错了。特别是他的方法在某些地方值得我们借鉴。刚好,我手头的有2.23版,也不知什么时候下的,觉得他的思路有些复杂,于是我也玩了一下,便有了下文。虽然没有完全找出算法,但大家共同提高吧!

【破解过程】
一、Peid查壳:ASPack 2.12,用Stripper2.07脱之,Peid再查:Borland Delphi 4.0 - 5.0;
二、用Dede反编译,通过查看“程序”、“窗体”两项,可知TFormTest2即为注册窗口,Button1click即为注册按钮,双击可看到如下有用的提示信息:
0054D294   55                     push    ebp
0054D295   8BEC                   mov     ebp, esp

........略........

* Possible String Reference to: 'SOFTWARE\MGC\RL'
|
0054D327   BA1CD45400             mov     edx, $0054D41C
0054D32C   8B45FC                 mov     eax, [ebp-$04]

........略........

* Possible String Reference to: 'NAME'
|
0054D350   BA34D45400             mov     edx, $0054D434
0054D355   8B45FC                 mov     eax, [ebp-$04]

........略........

* Possible String Reference to: 'CODE'
|
0054D379   BA44D45400             mov     edx, $0054D444
0054D37E   8B45FC                 mov     eax, [ebp-$04]

0054D39E   E8C95DEBFF             call    0040316C
0054D3A3   C3                     ret

三、由此可知,用户的注册名和注册码保存在注册表中,至于注册按钮是灰色不可用,大可不必管它,我们伪造一份注册信息注入注册表中(XP系统):

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\MGC\RL]
"NAME"="jney2"
"CODE"="8888888888888888888888"

四、在OD中,搜索:字符串参考,我们再通过字符串'SOFTWARE\MGC\RL'找到程序读取注册表中'NAME'和'CODE'的地方(也可用W32Dasm反汇编再搜索,很容易找到,):
0055F3E1   .  BA 90F55500   MOV EDX,_CCC.0055F590                    ;  ASCII "SOFTWARE\MGC\RL"
0055F3E6   .  8B45 F4       MOV EAX,DWORD PTR SS:[EBP-C]
0055F3E9   .  E8 2AA5F4FF   CALL _CCC.004A9918
0055F3EE   .  BA A8F55500   MOV EDX,_CCC.0055F5A8                    ;  ASCII "NAME"
0055F3F3   .  8B45 F4       MOV EAX,DWORD PTR SS:[EBP-C]
0055F3F6   .  E8 9DA8F4FF   CALL _CCC.004A9C98
0055F3FB   .  84C0          TEST AL,AL
0055F3FD   .  75 07         JNZ SHORT _CCC.0055F406                  //读取用户名成功则继续
0055F3FF   .  E8 A045EAFF   CALL _CCC.004039A4
0055F404   .  EB 77         JMP SHORT _CCC.0055F47D                  //跳走,OVER
0055F406   >  BA B8F55500   MOV EDX,_CCC.0055F5B8                    ;  ASCII "CODE"
0055F40B   .  8B45 F4       MOV EAX,DWORD PTR SS:[EBP-C]
0055F40E   .  E8 85A8F4FF   CALL _CCC.004A9C98
0055F413   .  84C0          TEST AL,AL   
0055F415   .  75 07         JNZ SHORT _CCC.0055F41E                  //读取注册码成功则继续
0055F417   .  E8 8845EAFF   CALL _CCC.004039A4
0055F41C   .  EB 5F         JMP SHORT _CCC.0055F47D                  //跳走,OVER
0055F41E   >  8D4D E0       LEA ECX,DWORD PTR SS:[EBP-20]
0055F421   .  BA A8F55500   MOV EDX,_CCC.0055F5A8                    ;  ASCII "NAME"
0055F426   .  8B45 F4       MOV EAX,DWORD PTR SS:[EBP-C]
0055F429   .  E8 D2A6F4FF   CALL _CCC.004A9B00
0055F42E   .  8B55 E0       MOV EDX,DWORD PTR SS:[EBP-20]
0055F431   .  A1 6CC25600   MOV EAX,DWORD PTR DS:[56C26C]          //将用户名指针保存在56C26C处
0055F436   .  E8 694AEAFF   CALL _CCC.00403EA4
0055F43B   .  8D4D DC       LEA ECX,DWORD PTR SS:[EBP-24]
0055F43E   .  BA B8F55500   MOV EDX,_CCC.0055F5B8                    ;  ASCII "CODE"
0055F443   .  8B45 F4       MOV EAX,DWORD PTR SS:[EBP-C]
0055F446   .  E8 B5A6F4FF   CALL _CCC.004A9B00
0055F44B   .  8B55 DC       MOV EDX,DWORD PTR SS:[EBP-24]
0055F44E   .  A1 9CBE5600   MOV EAX,DWORD PTR DS:[56BE9C]           //将注册码指针保存在56BE9C处
0055F453   .  E8 4C4AEAFF   CALL _CCC.00403EA4
0055F458   .  33C0          XOR EAX,EAX
0055F45A   .  5A            POP EDX
0055F45B   .  59            POP ECX
0055F45C   .  59            POP ECX

五、程序只是把用户名和注册码从注册表中读出,简单地变换一下保存起来,并没有急于判断注册码的真假。不管怎么样,程序总是要判断真假的对吧,那好我们在数据转存中对56C26C和56BE9C下DWORD硬件访问断点(下次运行时,断点还在)。F9,运行。

六、经过一次异常后,程序断在00550AAF:
00550A93   .  C705 C4ED5600>MOV DWORD PTR DS:[56EDC4],7
00550A9D   .  C705 C0ED5600>MOV DWORD PTR DS:[56EDC0],7
00550AA7   .  8B15 9CBE5600 MOV EDX,DWORD PTR DS:[56BE9C]            ;  _CCC.0056D920
00550AAD   .  8B12          MOV EDX,DWORD PTR DS:[EDX]
00550AAF   .  A1 6CC25600   MOV EAX,DWORD PTR DS:[56C26C]            //断在这里,寄存器 EDX 00F0DEF0 ASCII "8888888888888888888888"
00550AB4   .  8B00          MOV EAX,DWORD PTR DS:[EAX]
00550AB6   .  E8 EDB5F5FF   CALL _CCC.004AC0A8                      //关键CALL,F7跟进
00550ABB   .  8B45 FC       MOV EAX,DWORD PTR SS:[EBP-4]
00550ABE   .  E8 D9DCFFFF   CALL _CCC.0054E79C
00550AC3   .  8B45 FC       MOV EAX,DWORD PTR SS:[EBP-4]
00550AC6   .  E8 91DAFFFF   CALL _CCC.0054E55C
00550ACB   .  33C0          XOR EAX,EAX

七:下面通过OD的动态调试可得到:

004AC0A8   $  55            PUSH EBP
004AC0A9   .  8BEC          MOV EBP,ESP
004AC0AB   .  B9 0C000000   MOV ECX,0C
004AC0B0   >  6A 00         PUSH 0
004AC0B2   .  6A 00         PUSH 0
004AC0B4   .  49            DEC ECX
004AC0B5   .^ 75 F9         JNZ SHORT _CCC.004AC0B0
004AC0B7   .  53            PUSH EBX
004AC0B8   .  56            PUSH ESI
004AC0B9   .  57            PUSH EDI
004AC0BA   .  8955 F8       MOV DWORD PTR SS:[EBP-8],EDX
004AC0BD   .  8945 FC       MOV DWORD PTR SS:[EBP-4],EAX
004AC0C0   .  8B45 FC       MOV EAX,DWORD PTR SS:[EBP-4]
004AC0C3   .  E8 CC81F5FF   CALL _CCC.00404294
004AC0C8   .  8B45 F8       MOV EAX,DWORD PTR SS:[EBP-8]
004AC0CB   .  E8 C481F5FF   CALL _CCC.00404294
004AC0D0   .  33C0          XOR EAX,EAX
004AC0D2   .  55            PUSH EBP
004AC0D3   .  68 52C44A00   PUSH _CCC.004AC452
004AC0D8   .  64:FF30       PUSH DWORD PTR FS:[EAX]
004AC0DB   .  64:8920       MOV DWORD PTR FS:[EAX],ESP
004AC0DE   .  C745 F4 D4070>MOV DWORD PTR SS:[EBP-C],7D4
004AC0E5   .  8D45 F0       LEA EAX,DWORD PTR SS:[EBP-10]
004AC0E8   .  BA 6CC44A00   MOV EDX,_CCC.004AC46C                    ;  ASCII "        "
004AC0ED   .  E8 F67DF5FF   CALL _CCC.00403EE8
004AC0F2   .  837D FC 00    CMP DWORD PTR SS:[EBP-4],0               //判断用户名是否为空
004AC0F6   .  0F84 26030000 JE _CCC.004AC422                         //跳走则OVER
004AC0FC   .  8B45 FC       MOV EAX,DWORD PTR SS:[EBP-4]
004AC0FF   .  E8 DC7FF5FF   CALL _CCC.004040E0                       //取用户名长度
004AC104   .  83F8 08       CMP EAX,8
004AC107   .  7D 3B         JGE SHORT _CCC.004AC144                  //大于等于8则跳走
004AC109   .  8D45 D4       LEA EAX,DWORD PTR SS:[EBP-2C]
004AC10C   .  50            PUSH EAX
004AC10D   .  8B45 FC       MOV EAX,DWORD PTR SS:[EBP-4]
004AC110   .  E8 CB7FF5FF   CALL _CCC.004040E0
004AC115   .  B9 08000000   MOV ECX,8
004AC11A   .  2BC8          SUB ECX,EAX
004AC11C   .  BA 01000000   MOV EDX,1
004AC121   .  8B45 F0       MOV EAX,DWORD PTR SS:[EBP-10]
004AC124   .  E8 BF81F5FF   CALL _CCC.004042E8
004AC129   .  8B45 D4       MOV EAX,DWORD PTR SS:[EBP-2C]
004AC12C   .  50            PUSH EAX
004AC12D   .  8D55 D0       LEA EDX,DWORD PTR SS:[EBP-30]
004AC130   .  8B45 FC       MOV EAX,DWORD PTR SS:[EBP-4]
004AC133   .  E8 C8DAF5FF   CALL _CCC.00409C00
004AC138   .  8B55 D0       MOV EDX,DWORD PTR SS:[EBP-30]
004AC13B   .  8D45 FC       LEA EAX,DWORD PTR SS:[EBP-4]
004AC13E   .  59            POP ECX
004AC13F   .  E8 E87FF5FF   CALL _CCC.0040412C                      //用户名长度小于8,则在用户名后面补空格到8位
004AC144   >  8D45 CC       LEA EAX,DWORD PTR SS:[EBP-34]           //都来这里
004AC147   .  50            PUSH EAX
004AC148   .  B9 01000000   MOV ECX,1
004AC14D   .  BA 01000000   MOV EDX,1
004AC152   .  8B45 FC       MOV EAX,DWORD PTR SS:[EBP-4]
004AC155   .  E8 8E81F5FF   CALL _CCC.004042E8
004AC15A   .  8B45 CC       MOV EAX,DWORD PTR SS:[EBP-34]
004AC15D   .  E8 76F9FFFF   CALL _CCC.004ABAD8
004AC162   .  8BF0          MOV ESI,EAX
004AC164   .  81E6 FF000000 AND ESI,0FF                             //保存用户名第1位(16进制,只取后7位)
004AC16A   .  8D45 C8       LEA EAX,DWORD PTR SS:[EBP-38]
004AC16D   .  50            PUSH EAX
004AC16E   .  B9 01000000   MOV ECX,1
004AC173   .  BA 02000000   MOV EDX,2
004AC178   .  8B45 FC       MOV EAX,DWORD PTR SS:[EBP-4]
004AC17B   .  E8 6881F5FF   CALL _CCC.004042E8
004AC180   .  8B45 C8       MOV EAX,DWORD PTR SS:[EBP-38]
004AC183   .  E8 50F9FFFF   CALL _CCC.004ABAD8
004AC188   .  8BF8          MOV EDI,EAX
004AC18A   .  81E7 FF000000 AND EDI,0FF                             //保存用户名第2位(16进制,只取后7位)
004AC190   .  8D45 C4       LEA EAX,DWORD PTR SS:[EBP-3C]
004AC193   .  50            PUSH EAX
004AC194   .  B9 01000000   MOV ECX,1
004AC199   .  BA 03000000   MOV EDX,3
004AC19E   .  8B45 FC       MOV EAX,DWORD PTR SS:[EBP-4]
004AC1A1   .  E8 4281F5FF   CALL _CCC.004042E8
004AC1A6   .  8B45 C4       MOV EAX,DWORD PTR SS:[EBP-3C]
004AC1A9   .  E8 2AF9FFFF   CALL _CCC.004ABAD8
004AC1AE   .  25 FF000000   AND EAX,0FF
004AC1B3   .  8945 EC       MOV DWORD PTR SS:[EBP-14],EAX           //保存用户名第3位(16进制,只取后7位)
004AC1B6   .  8D45 C0       LEA EAX,DWORD PTR SS:[EBP-40]
004AC1B9   .  50            PUSH EAX
004AC1BA   .  B9 01000000   MOV ECX,1
004AC1BF   .  BA 04000000   MOV EDX,4
004AC1C4   .  8B45 FC       MOV EAX,DWORD PTR SS:[EBP-4]
004AC1C7   .  E8 1C81F5FF   CALL _CCC.004042E8
004AC1CC   .  8B45 C0       MOV EAX,DWORD PTR SS:[EBP-40]
004AC1CF   .  E8 04F9FFFF   CALL _CCC.004ABAD8
004AC1D4   .  25 FF000000   AND EAX,0FF
004AC1D9   .  8945 E8       MOV DWORD PTR SS:[EBP-18],EAX          //保存用户名第4位(16进制,只取后7位)
004AC1DC   .  8D45 BC       LEA EAX,DWORD PTR SS:[EBP-44]
004AC1DF   .  50            PUSH EAX
004AC1E0   .  B9 01000000   MOV ECX,1
004AC1E5   .  BA 05000000   MOV EDX,5
004AC1EA   .  8B45 FC       MOV EAX,DWORD PTR SS:[EBP-4]
004AC1ED   .  E8 F680F5FF   CALL _CCC.004042E8
004AC1F2   .  8B45 BC       MOV EAX,DWORD PTR SS:[EBP-44]
004AC1F5   .  E8 DEF8FFFF   CALL _CCC.004ABAD8
004AC1FA   .  25 FF000000   AND EAX,0FF
004AC1FF   .  8945 E4       MOV DWORD PTR SS:[EBP-1C],EAX           //保存用户名第5位(16进制,只取后7位)
004AC202   .  8D45 B8       LEA EAX,DWORD PTR SS:[EBP-48]
004AC205   .  50            PUSH EAX
004AC206   .  B9 01000000   MOV ECX,1
004AC20B   .  BA 06000000   MOV EDX,6
004AC210   .  8B45 FC       MOV EAX,DWORD PTR SS:[EBP-4]
004AC213   .  E8 D080F5FF   CALL _CCC.004042E8
004AC218   .  8B45 B8       MOV EAX,DWORD PTR SS:[EBP-48]
004AC21B   .  E8 B8F8FFFF   CALL _CCC.004ABAD8
004AC220   .  25 FF000000   AND EAX,0FF
004AC225   .  8945 E0       MOV DWORD PTR SS:[EBP-20],EAX           //保存用户名第6位(16进制,只取后7位)
004AC228   .  8D45 B4       LEA EAX,DWORD PTR SS:[EBP-4C]
004AC22B   .  50            PUSH EAX
004AC22C   .  B9 01000000   MOV ECX,1
004AC231   .  BA 07000000   MOV EDX,7
004AC236   .  8B45 FC       MOV EAX,DWORD PTR SS:[EBP-4]
004AC239   .  E8 AA80F5FF   CALL _CCC.004042E8
004AC23E   .  8B45 B4       MOV EAX,DWORD PTR SS:[EBP-4C]
004AC241   .  E8 92F8FFFF   CALL _CCC.004ABAD8
004AC246   .  25 FF000000   AND EAX,0FF
004AC24B   .  8945 DC       MOV DWORD PTR SS:[EBP-24],EAX           //保存用户名第7位(16进制,只取后7位)
004AC24E   .  8D45 B0       LEA EAX,DWORD PTR SS:[EBP-50]
004AC251   .  50            PUSH EAX
004AC252   .  B9 01000000   MOV ECX,1
004AC257   .  BA 08000000   MOV EDX,8
004AC25C   .  8B45 FC       MOV EAX,DWORD PTR SS:[EBP-4]
004AC25F   .  E8 8480F5FF   CALL _CCC.004042E8
004AC264   .  8B45 B0       MOV EAX,DWORD PTR SS:[EBP-50]
004AC267   .  E8 6CF8FFFF   CALL _CCC.004ABAD8
004AC26C   .  25 FF000000   AND EAX,0FF
004AC271   .  8945 D8       MOV DWORD PTR SS:[EBP-28],EAX           //保存用户名第8位(16进制,只取后7位)
004AC274   .  33C0          XOR EAX,EAX
004AC276   .  55            PUSH EBP
004AC277   .  68 BCC24A00   PUSH _CCC.004AC2BC
004AC27C   .  64:FF30       PUSH DWORD PTR FS:[EAX]
004AC27F   .  64:8920       MOV DWORD PTR FS:[EAX],ESP
004AC282   .  8D45 A8       LEA EAX,DWORD PTR SS:[EBP-58]
004AC285   .  50            PUSH EAX
004AC286   .  B9 08000000   MOV ECX,8
004AC28B   .  BA 07000000   MOV EDX,7
004AC290   .  8B45 F8       MOV EAX,DWORD PTR SS:[EBP-8]            //取注册码
004AC293   .  E8 5080F5FF   CALL _CCC.004042E8
004AC298   .  8B4D A8       MOV ECX,DWORD PTR SS:[EBP-58]
004AC29B   .  8D45 AC       LEA EAX,DWORD PTR SS:[EBP-54]
004AC29E   .  BA 80C44A00   MOV EDX,_CCC.004AC480
004AC2A3   .  E8 847EF5FF   CALL _CCC.0040412C
004AC2A8   .  8B45 AC       MOV EAX,DWORD PTR SS:[EBP-54]           //从注册码的第7位起取8位字符
004AC2AB   .  E8 C0DCF5FF   CALL _CCC.00409F70                      //将字符转换为16进制  
004AC2B0   .  8BD8          MOV EBX,EAX                             //传给EBX
004AC2B2   .  33C0          XOR EAX,EAX
004AC2B4   .  5A            POP EDX
004AC2B5   .  59            POP ECX
004AC2B6   .  59            POP ECX
004AC2B7   .  64:8910       MOV DWORD PTR FS:[EAX],EDX
004AC2BA   .  EB 14         JMP SHORT _CCC.004AC2D0
004AC2BC   .^ E9 5773F5FF   JMP _CCC.00403618
004AC2C1   .  E8 AE76F5FF   CALL _CCC.00403974
004AC2C6   .  E9 57010000   JMP _CCC.004AC422
004AC2CB   .  E8 A476F5FF   CALL _CCC.00403974
004AC2D0   >  2B5D D8       SUB EBX,DWORD PTR SS:[EBP-28]              //减去用户名第8位
004AC2D3   .  8BC3          MOV EAX,EBX                                //传回EAX
004AC2D5   .  B9 07000000   MOV ECX,7
004AC2DA   .  33D2          XOR EDX,EDX                                //高位清零
004AC2DC   .  F7F1          DIV ECX                                    //除以7
004AC2DE   .  85D2          TEST EDX,EDX                             
004AC2E0      0F85 3C010000 JNZ _CCC.004AC422                          //不能被7整除,OVER
                                                                       //如果要爆破的话,在这里修改直接跳到004AC41A处:JMP 004AC41A。

004AC2E6   .  895D A0       MOV DWORD PTR SS:[EBP-60],EBX
004AC2E9   .  33C0          XOR EAX,EAX
004AC2EB   .  8945 A4       MOV DWORD PTR SS:[EBP-5C],EAX
004AC2EE   .  DF6D A0       FILD QWORD PTR SS:[EBP-60]
004AC2F1   .  D835 84C44A00 FDIV DWORD PTR DS:[4AC484]
004AC2F7   .  E8 F468F5FF   CALL _CCC.00402BF0
004AC2FC   .  8BD8          MOV EBX,EAX                                 //余数传给EBX
004AC2FE   .  2B5D DC       SUB EBX,DWORD PTR SS:[EBP-24]               //减去用户名第7位            
004AC301   .  8BC3          MOV EAX,EBX
004AC303   .  B9 07000000   MOV ECX,7
004AC308   .  33D2          XOR EDX,EDX
004AC30A   .  F7F1          DIV ECX
004AC30C   .  85D2          TEST EDX,EDX
004AC30E   .  0F85 0E010000 JNZ _CCC.004AC422                           //不能被7整除,OVER
004AC314   .  895D A0       MOV DWORD PTR SS:[EBP-60],EBX
004AC317   .  33C0          XOR EAX,EAX
004AC319   .  8945 A4       MOV DWORD PTR SS:[EBP-5C],EAX
004AC31C   .  DF6D A0       FILD QWORD PTR SS:[EBP-60]
004AC31F   .  D835 84C44A00 FDIV DWORD PTR DS:[4AC484]
004AC325   .  E8 C668F5FF   CALL _CCC.00402BF0
004AC32A   .  8BD8          MOV EBX,EAX                                 //余数传给EBX
004AC32C   .  2B5D E0       SUB EBX,DWORD PTR SS:[EBP-20]               //减去用户名第6位
004AC32F   .  8BC3          MOV EAX,EBX
004AC331   .  B9 07000000   MOV ECX,7
004AC336   .  33D2          XOR EDX,EDX
004AC338   .  F7F1          DIV ECX
004AC33A   .  85D2          TEST EDX,EDX
004AC33C   .  0F85 E0000000 JNZ _CCC.004AC422                          //不能被7整除,OVER
004AC342   .  895D A0       MOV DWORD PTR SS:[EBP-60],EBX
004AC345   .  33C0          XOR EAX,EAX
004AC347   .  8945 A4       MOV DWORD PTR SS:[EBP-5C],EAX
004AC34A   .  DF6D A0       FILD QWORD PTR SS:[EBP-60]
004AC34D   .  D835 84C44A00 FDIV DWORD PTR DS:[4AC484]
004AC353   .  E8 9868F5FF   CALL _CCC.00402BF0
004AC358   .  8BD8          MOV EBX,EAX                                //余数传给EBX
004AC35A   .  2B5D E4       SUB EBX,DWORD PTR SS:[EBP-1C]              //减去用户名第5位
004AC35D   .  8BC3          MOV EAX,EBX
004AC35F   .  B9 07000000   MOV ECX,7
004AC364   .  33D2          XOR EDX,EDX
004AC366   .  F7F1          DIV ECX
004AC368   .  85D2          TEST EDX,EDX
004AC36A   .  0F85 B2000000 JNZ _CCC.004AC422                          //不能被7整除,OVER
004AC370   .  895D A0       MOV DWORD PTR SS:[EBP-60],EBX
004AC373   .  33C0          XOR EAX,EAX
004AC375   .  8945 A4       MOV DWORD PTR SS:[EBP-5C],EAX
004AC378   .  DF6D A0       FILD QWORD PTR SS:[EBP-60]
004AC37B   .  D835 84C44A00 FDIV DWORD PTR DS:[4AC484]
004AC381   .  E8 6A68F5FF   CALL _CCC.00402BF0
004AC386   .  8BD8          MOV EBX,EAX                               //余数传给EBX
004AC388   .  2B5D E8       SUB EBX,DWORD PTR SS:[EBP-18]             //减去用户名第4位
004AC38B   .  8BC3          MOV EAX,EBX
004AC38D   .  B9 07000000   MOV ECX,7
004AC392   .  33D2          XOR EDX,EDX
004AC394   .  F7F1          DIV ECX
004AC396   .  85D2          TEST EDX,EDX
004AC398   .  0F85 84000000 JNZ _CCC.004AC422                           //不能被7整除,OVER
004AC39E   .  895D A0       MOV DWORD PTR SS:[EBP-60],EBX
004AC3A1   .  33C0          XOR EAX,EAX
004AC3A3   .  8945 A4       MOV DWORD PTR SS:[EBP-5C],EAX
004AC3A6   .  DF6D A0       FILD QWORD PTR SS:[EBP-60]
004AC3A9   .  D835 84C44A00 FDIV DWORD PTR DS:[4AC484]
004AC3AF   .  E8 3C68F5FF   CALL _CCC.00402BF0
004AC3B4   .  8BD8          MOV EBX,EAX                                   //余数传给EBX
004AC3B6   .  2B5D EC       SUB EBX,DWORD PTR SS:[EBP-14]                //减去用户名第3位
004AC3B9   .  8BC3          MOV EAX,EBX
004AC3BB   .  B9 07000000   MOV ECX,7
004AC3C0   .  33D2          XOR EDX,EDX
004AC3C2   .  F7F1          DIV ECX
004AC3C4   .  85D2          TEST EDX,EDX
004AC3C6   .  75 5A         JNZ SHORT _CCC.004AC422                    //不能被7整除,OVER
004AC3C8   .  895D A0       MOV DWORD PTR SS:[EBP-60],EBX
004AC3CB   .  33C0          XOR EAX,EAX
004AC3CD   .  8945 A4       MOV DWORD PTR SS:[EBP-5C],EAX
004AC3D0   .  DF6D A0       FILD QWORD PTR SS:[EBP-60]
004AC3D3   .  D835 84C44A00 FDIV DWORD PTR DS:[4AC484]
004AC3D9   .  E8 1268F5FF   CALL _CCC.00402BF0
004AC3DE   .  8BD8          MOV EBX,EAX                                 //余数传给EBX
004AC3E0   .  2BDF          SUB EBX,EDI                                //减去用户名第2位
004AC3E2   .  8BC3          MOV EAX,EBX
004AC3E4   .  B9 07000000   MOV ECX,7
004AC3E9   .  33D2          XOR EDX,EDX
004AC3EB   .  F7F1          DIV ECX
004AC3ED   .  85D2          TEST EDX,EDX
004AC3EF   .  75 31         JNZ SHORT _CCC.004AC422                     //不能被7整除,OVER
004AC3F1   .  895D A0       MOV DWORD PTR SS:[EBP-60],EBX
004AC3F4   .  33C0          XOR EAX,EAX
004AC3F6   .  8945 A4       MOV DWORD PTR SS:[EBP-5C],EAX
004AC3F9   .  DF6D A0       FILD QWORD PTR SS:[EBP-60]
004AC3FC   .  D835 84C44A00 FDIV DWORD PTR DS:[4AC484]
004AC402   .  E8 E967F5FF   CALL _CCC.00402BF0
004AC407   .  8BD8          MOV EBX,EAX                                 //余数传给EBX
004AC409   .  2BDE          SUB EBX,ESI                                 //减去用户名第1位
004AC40B   .  8BC3          MOV EAX,EBX
004AC40D   .  B9 07000000   MOV ECX,7
004AC412   .  33D2          XOR EDX,EDX
004AC414   .  F7F1          DIV ECX
004AC416   .  85D2          TEST EDX,EDX
004AC418   .  75 08         JNZ SHORT _CCC.004AC422                     //不能被7整除,OVER
004AC41A   .  A1 58C35600   MOV EAX,DWORD PTR DS:[56C358]
004AC41F   .  C600 01       MOV BYTE PTR DS:[EAX],1                     //置注册标志位为1
004AC422   >  33C0          XOR EAX,EAX
004AC424   .  5A            POP EDX
004AC425   .  59            POP ECX
004AC426   .  59            POP ECX
004AC427   .  64:8910       MOV DWORD PTR FS:[EAX],EDX
004AC42A   .  68 59C44A00   PUSH _CCC.004AC459
004AC42F   >  8D45 A8       LEA EAX,DWORD PTR SS:[EBP-58]
004AC432   .  BA 0C000000   MOV EDX,0C
004AC437   .  E8 387AF5FF   CALL _CCC.00403E74
004AC43C   .  8D45 F0       LEA EAX,DWORD PTR SS:[EBP-10]
004AC43F   .  E8 0C7AF5FF   CALL _CCC.00403E50
004AC444   .  8D45 F8       LEA EAX,DWORD PTR SS:[EBP-8]
004AC447   .  BA 02000000   MOV EDX,2
004AC44C   .  E8 237AF5FF   CALL _CCC.00403E74
004AC451   .  C3            RETN
004AC452   .^ E9 7574F5FF   JMP _CCC.004038CC
004AC457   .^ EB D6         JMP SHORT _CCC.004AC42F
004AC459   .  8B45 F4       MOV EAX,DWORD PTR SS:[EBP-C]
004AC45C   .  5F            POP EDI
004AC45D   .  5E            POP ESI
004AC45E   .  5B            POP EBX
004AC45F   .  8BE5          MOV ESP,EBP
004AC461   .  5D            POP EBP
004AC462   .  C3            RETN

整理一下,该部分算法为:
1、取用户名8位,不足用空格补齐。
2、其ASCII码值取低7位。
3、设用户名1-8位分别为NAME1-NAME8,注册码第7-14位=((((((((n×7)+NAME1)×7+NAME2)×7+NAME3)×7+NAME4)×7+NAME5)×7+NAME6)×7+NAME7)×7+NAME8
n取0和1应该没问题,只要最后得出的结果不超过8位就行。
4、我的用户名:jney2345,算出来的结果为:061822B2,注册表为:
Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\MGC\RL]
"NAME"="jney2345"
"CODE"="123456061822B2"

这只是算法的一部分,通过该部分即可去掉NAG对话框、菜单中的注册项、关于和桌面上的未注册字样。但日历中的未注册字样和通讯录功能不可用,其算法验证与下面的CALL _CCC.004AC488有关,功力有限,搞不定。用PEID的插件查加密算法,有四五种之多,算了放弃吧,只看那位高手再出手了。
我的解决办法是通过修改资源菜单可恢复其通讯录功能。但程序本身有些菜单项是没有功能的。

0055F857  |> \8B15 9CBE5600 MOV EDX,DWORD PTR DS:[56BE9C]            ;  _CCC.0056D920
0055F85D  |.  8B12          MOV EDX,DWORD PTR DS:[EDX]
0055F85F  |.  A1 6CC25600   MOV EAX,DWORD PTR DS:[56C26C]
0055F864  |.  8B00          MOV EAX,DWORD PTR DS:[EAX]
0055F866  |.  E8 1DCCF4FF   CALL _CCC.004AC488                        //另一部分算法CALL???
0055F86B  |.  48            DEC EAX
0055F86C  |.  75 08         JNZ SHORT _CCC.0055F876
0055F86E  |.  A1 78C25600   MOV EAX,DWORD PTR DS:[56C278]
0055F873  |.  C600 01       MOV BYTE PTR DS:[EAX],1
0055F876  |>  8D55 B4       LEA EDX,DWORD PTR SS:[EBP-4C]
0055F879  |.  B8 C0F95500   MOV EAX,_CCC.0055F9C0                    ;  ASCII "2852314454075600CE2E435312522D36232944210D31445407CF"
0055F87E  |.  E8 B9C5F4FF   CALL _CCC.004ABE3C
0055F883  |.  8B55 B4       MOV EDX,DWORD PTR SS:[EBP-4C]
0055F886  |.  A1 28C25600   MOV EAX,DWORD PTR DS:[56C228]
0055F88B  |.  8B00          MOV EAX,DWORD PTR DS:[EAX]
0055F88D  |.  8B80 DC020000 MOV EAX,DWORD PTR DS:[EAX+2DC]
0055F893  |.  E8 A874EDFF   CALL _CCC.00436D40
0055F898  |.  A1 78C25600   MOV EAX,DWORD PTR DS:[56C278]
0055F89D  |.  8038 00       CMP BYTE PTR DS:[EAX],0
0055F8A0  |.  74 32         JE SHORT _CCC.0055F8D4
0055F8A2  |.  8D55 B0       LEA EDX,DWORD PTR SS:[EBP-50]
0055F8A5  |.  B8 00FA5500   MOV EAX,_CCC.0055FA00                    ;  ASCII "314454075E1EDC"
0055F8AA  |.  E8 8DC5F4FF   CALL _CCC.004ABE3C

本文完。


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 7
支持
分享
最新回复 (4)
雪    币: 117
活跃值: (20)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
顶了。支持
2005-3-21 15:54
0
雪    币: 427
活跃值: (412)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
建议搞迷你日历,我发现很多人总喜欢捡软柿子
2005-3-21 15:59
0
雪    币: 389
活跃值: (912)
能力值: ( LV9,RANK:770 )
在线值:
发帖
回帖
粉丝
4
void CRounDlg::OnButton1()
{
        // TODO: Add your control notification handler code here
        UpdateData(true);
  
  unsigned int sum=0;
  char tt[8]={0};
  CString t1,err="用户名必须等于8位";
  if(m_name.GetLength()!=8)
  {
          MessageBox(err);
    return;
  }

         m_code.Empty();

  for(int i=0;i<m_name.GetLength();i++)
  {  
          tt[i]=0x7f&m_name.GetAt(i);//取低7位就是和0X7F相与。
      
  }
  
  sum=(((((((0+tt[0])*7+tt[1])*7+tt[2])*7+tt[3])*7+tt[4])*7+tt[5])*7+tt[6])*7+tt[7];
     _itoa( sum, tt, 16 );
         t1+=tt;
         if(t1.GetLength()<8)
         {
                 m_code="12345460";
                 m_code+=t1;
                 m_code.MakeUpper();
         }
         else
         {
                 m_code="123456";
                 m_code+=t1;
                 m_code.MakeUpper();
                 
         }
        //SetDlgItemText(IDC_EDIT2,output);
    //m_code.Format ("%s", sum);

UpdateData(false);
}
2005-3-27 10:33
0
雪    币: 151
活跃值: (66)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
5
问以下,为何要段硬件地址呢?如何看的出来呢?
2005-3-27 10:59
0
游客
登录 | 注册 方可回帖
返回
//