【破文标题】:也谈多功能时钟日历的爆破及部分算法分析
【破解目标】:多功能时钟日历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期)