- UID
 - 55486
 
 注册时间2008-9-3
阅读权限10
最后登录1970-1-1
周游历练 
  
 
 
 
TA的每日心情  | 慵懒 2017-5-2 11:05 | 
|---|
 
  签到天数: 8 天 [LV.3]偶尔看看II  
 | 
 
【破文标题】“易用会员管理”算法分析讨论 
【破解工具】OD、DEDE、PEID 
【破解声明】http://www.orsoon.com/soft/1555.html 
------------------------------------------------------------------------ 
这段时间在学习算法分析,在硬盘里面找到原来下载的一个软件练习练习。 
(这个软件下载下来的时候就提供了注册码。但我目的不是注册,而是分析。) 
(在分析的时候有一段代码还没读懂,希望高手可以帮忙讲解一下) 
(没读懂的段用*标注了) 
 
【破解过程】 
用PEID检测是无壳Borland Delphi 6.0 - 7.0。 
用DEDE找到注册码计算开始位置005F23B8 
用OD载入断在:005F23B8 
                                             //第一段循环读取用户名的ASCLL码 
 
005F23B8   |.  E8 DF2AE1FF        call Member.00404E9C               ;  载入用户名 
005F23BD   |.  8BF0               mov esi,eax 
005F23BF   |.  85F6               test esi,esi                       ;  测试用户名位数是否 
 
大于零 
005F23C1   |.  7E 26              jle short Member.005F23E9 
005F23C3   |.  BB 01000000        mov ebx,1                          ;  ebx=1, 
005F23C8   |>  8D4D EC            /lea ecx,dword ptr ss:[ebp-14] 
005F23CB   |.  8B45 FC            |mov eax,dword ptr ss:[ebp-4] 
005F23CE   |.  0FB64418 FF        |movzx eax,byte ptr ds:[eax+ebx-1] ;  读取用户名字第N位的 
 
ASCII值 
                                                                        (从左至右读取) 
005F23D3   |.  33D2               |xor edx,edx 
005F23D5   |.  E8 EE7EE1FF        |call Member.0040A2C8 
005F23DA   |.  8B55 EC            |mov edx,dword ptr ss:[ebp-14] 
005F23DD   |.  8D45 F8            |lea eax,dword ptr ss:[ebp-8] 
005F23E0   |.  E8 BF2AE1FF        |call Member.00404EA4 
005F23E5   |.  43                 |inc ebx 
005F23E6   |.  4E                 |dec esi 
005F23E7   |.^ 75 DF              \jnz short Member.005F23C8 
005F23E9   |>  8B45 F8            mov eax,dword ptr ss:[ebp-8]       ;  eax为用户名的ASCII 
 
码值 
005F23EC   |.  E8 AB2AE1FF        call Member.00404E9C 
005F23F1   |.  8BF0               mov esi,eax 
005F23F3   |.  85F6               test esi,esi 
005F23F5   |.  7E 2C              jle short Member.005F2423 
 
                                        //第二段循环反向读取ASCLL码低位 
 
005F23F7   |.  BB 01000000        mov ebx,1 
005F23FC   |>  8B45 F8            /mov eax,dword ptr ss:[ebp-8] 
005F23FF   |.  E8 982AE1FF        |call Member.00404E9C 
005F2404   |.  2BC3               |sub eax,ebx 
005F2406   |.  8B55 F8            |mov edx,dword ptr ss:[ebp-8]      ;  由低位向高位读取用 
 
户名的ASCII码 
005F2409   |.  8A1402             |mov dl,byte ptr ds:[edx+eax]      ;  取值的低位 
005F240C   |.  8D45 E8            |lea eax,dword ptr ss:[ebp-18] 
005F240F   |.  E8 B029E1FF        |call Member.00404DC4 
005F2414   |.  8B55 E8            |mov edx,dword ptr ss:[ebp-18] 
005F2417   |.  8D45 F4            |lea eax,dword ptr ss:[ebp-C] 
005F241A   |.  E8 852AE1FF        |call Member.00404EA4 
005F241F   |.  43                 |inc ebx 
005F2420   |.  4E                 |dec esi 
005F2421   |.^ 75 D9              \jnz short Member.005F23FC 
005F2423   |>  8D45 F8            lea eax,dword ptr ss:[ebp-8]       ;  eax为换位后的用户名 
 
ASCII码值 
 
                                        //ASCII码分段 
005F2426   |.  50                 push eax 
005F2427   |.  B9 04000000        mov ecx,4 
005F242C   |.  BA 01000000        mov edx,1 
005F2431   |.  8B45 F4            mov eax,dword ptr ss:[ebp-C] 
005F2434   |.  E8 C32CE1FF        call Member.004050FC                
005F2439   |.  8D45 F4            lea eax,dword ptr ss:[ebp-C]       ;  eax为换位后ASCII码 
 
前四位 
005F243C   |.  50                 push eax 
005F243D   |.  B9 04000000        mov ecx,4 
005F2442   |.  BA 05000000        mov edx,5 
005F2447   |.  8B45 F4            mov eax,dword ptr ss:[ebp-C] 
005F244A   |.  E8 AD2CE1FF        call Member.004050FC                
005F244F   |.  8B45 F8            mov eax,dword ptr ss:[ebp-8]       ;  eax为换位后ASCII码 
 
的 5-8 位 
005F2452   |.  E8 452AE1FF        call Member.00404E9C 
005F2457   |.  83F8 04            cmp eax,4                          ;  eax是否为4(数位) 
005F245A   |.  7D 2F              jge short Member.005F248B 
005F245C   |.  8B45 F8            mov eax,dword ptr ss:[ebp-8] 
005F245F   |.  E8 382AE1FF        call Member.00404E9C 
005F2464   |.  8BD8               mov ebx,eax 
005F2466   |.  83FB 03            cmp ebx,3 
005F2469   |.  7F 20              jg short Member.005F248B 
 
005F246B   |>  8D4D E4            /lea ecx,dword ptr ss:[ebp-1C]        *如果数位不够则补充 
 
数值 
005F246E   |.  8BC3               |mov eax,ebx                                * 
005F2470   |.  C1E0 02            |shl eax,2                                * 
005F2473   |.  33D2               |xor edx,edx                                * 
005F2475   |.  E8 4E7EE1FF        |call Member.0040A2C8                        * 
005F247A   |.  8B55 E4            |mov edx,dword ptr ss:[ebp-1C]        * 
005F247D   |.  8D45 F8            |lea eax,dword ptr ss:[ebp-8]                * 
005F2480   |.  E8 1F2AE1FF        |call Member.00404EA4                        * 
005F2485   |.  43                 |inc ebx                                * 
005F2486   |.  83FB 04            |cmp ebx,4                                * 
005F2489   |.^ 75 E0              \jnz short Member.005F246B                * 
 
005F248B   |>  8B45 F4            mov eax,dword ptr ss:[ebp-C] 
005F248E   |.  E8 092AE1FF        call Member.00404E9C 
 
005F2493   |.  83F8 04            cmp eax,4                          // eax是否为4(数位) 
005F2496   |.  7D 2F              jge short Member.005F24C7 
005F2498   |.  8B45 F4            mov eax,dword ptr ss:[ebp-C] 
005F249B   |.  E8 FC29E1FF        call Member.00404E9C 
005F24A0   |.  8BD8               mov ebx,eax 
005F24A2   |.  83FB 03            cmp ebx,3 
005F24A5   |.  7F 20              jg short Member.005F24C7 
 
005F24A7   |>  8D4D E0            /lea ecx,dword ptr ss:[ebp-20]        *数位不够则补充数值 
005F24AA   |.  8BC3               |mov eax,ebx                                *和上一段一样,我没 
 
看懂 
005F24AC   |.  C1E0 02            |shl eax,2                                * 
005F24AF   |.  33D2               |xor edx,edx                                * 
005F24B1   |.  E8 127EE1FF        |call Member.0040A2C8                        * 
005F24B6   |.  8B55 E0            |mov edx,dword ptr ss:[ebp-20]        * 
005F24B9   |.  8D45 F4            |lea eax,dword ptr ss:[ebp-C]                * 
005F24BC   |.  E8 E329E1FF        |call Member.00404EA4                        * 
005F24C1   |.  43                 |inc ebx                                * 
005F24C2   |.  83FB 04            |cmp ebx,4                                * 
005F24C5   |.^ 75 E0              \jnz short Member.005F24A7                * 
005F24C7   |>  8D45 F0            lea eax,dword ptr ss:[ebp-10]         * 
 
 
                                             //固定值 ASCII "mem45erpe"分段 
005F24CA   |.  BA 54255F00        mov edx,Member.005F2554            ;  ASCII "mem45erpe" 
005F24CF   |.  E8 A027E1FF        call Member.00404C74 
005F24D4   |.  8D45 DC            lea eax,dword ptr ss:[ebp-24] 
005F24D7   |.  50                 push eax 
005F24D8   |.  B9 04000000        mov ecx,4 
005F24DD   |.  BA 01000000        mov edx,1 
005F24E2   |.  8B45 F0            mov eax,dword ptr ss:[ebp-10] 
005F24E5   |.  E8 122CE1FF        call Member.004050FC 
005F24EA   |.  FF75 DC            push dword ptr ss:[ebp-24]         ;  mem4 
005F24ED   |.  68 68255F00        push Member.005F2568 
005F24F2   |.  FF75 F8            push dword ptr ss:[ebp-8]          ;  用户名转换后的ASCLL 
 
码前四位值 
005F24F5   |.  8D45 D8            lea eax,dword ptr ss:[ebp-28] 
005F24F8   |.  50                 push eax 
005F24F9   |.  B9 05000000        mov ecx,5 
005F24FE   |.  BA 05000000        mov edx,5 
005F2503   |.  8B45 F0            mov eax,dword ptr ss:[ebp-10] 
005F2506   |.  E8 F12BE1FF        call Member.004050FC 
005F250B   |.  FF75 D8            push dword ptr ss:[ebp-28]         ;  5erpe 
005F250E   |.  68 68255F00        push Member.005F2568 
005F2513   |.  FF75 F4            push dword ptr ss:[ebp-C]          ;  用户名转换后的ASCLL 
 
码 5-8 位值 
005F2516   |.  8BC7               mov eax,edi 
005F2518   |.  BA 06000000        mov edx,6 
005F251D   |.  E8 3A2AE1FF        call Member.00404F5C 
005F2522   |.  33C0               xor eax,eax 
005F2524   |.  5A                 pop edx 
005F2525   |.  59                 pop ecx 
005F2526   |.  59                 pop ecx 
005F2527   |.  64:8910            mov dword ptr fs:[eax],edx 
005F252A   |.  68 44255F00        push Member.005F2544 
005F252F   |>  8D45 D8            lea eax,dword ptr ss:[ebp-28] 
005F2532   |.  BA 0A000000        mov edx,0A 
005F2537   |.  E8 C426E1FF        call Member.00404C00 
005F253C   \.  C3                 retn 
005F253D    .^ E9 3A1FE1FF        jmp Member.0040447C 
005F2542    .^ EB EB              jmp short Member.005F252F 
 
 
 
005F2884   |.  E8 F3FAFFFF        call Member.005F237C 
005F2889   |.  8B55 F8            mov edx,dword ptr ss:[ebp-8]       ;  注册码(可在此下断 
 
做内存注册机) 
005F288C   |.  58                 pop eax 
005F288D   |.  E8 5627E1FF        call Member.00404FE8 
005F2892   |.  75 3A              jnz short Member.005F28CE          ;  跳向错误窗口 
 
 
 
------------------------------------------------------------------------ 
此软件的注册方式: 
1、读取用户名并以ASCLL码形式储存; 
2、将储存的值排列顺序从右至左交换; 
3、将换好的值取两段出来备用,一段为前四位,二段为第 5-8 位。 
  (如为数不够时需要补全,缺两位用“8C”补全,缺四位用“048C”补全) 
4、将固定值“mem45erpe”分段成“mem4”“5erpe”两段。 
5、组合注册码:“mem4”-“前四位”“5erpe”-“第 5-8位”。 
 
注册码: 
Y 
mem4-978C5erpe-048C 
 
caiy 
mem4-97965erpe-1636 
 
由于代码有一段没有读懂,所以对于用户名低于四位时的填充数“8C”“04”是如何计算出来不清楚, 
 
希望有看懂的朋友解释一下。 |   
 
 
 
 |