飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 3816|回复: 5

[求助] “易用会员管理”算法分析讨论

[复制链接]
  • TA的每日心情
    慵懒
    2017-5-2 11:05
  • 签到天数: 8 天

    [LV.3]偶尔看看II

    发表于 2008-9-10 05:45:54 | 显示全部楼层 |阅读模式
    【破文标题】“易用会员管理”算法分析讨论
    破解工具】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”是如何计算出来不清楚,

    希望有看懂的朋友解释一下。
    PYG19周年生日快乐!
  • TA的每日心情
    慵懒
    2017-5-2 11:05
  • 签到天数: 8 天

    [LV.3]偶尔看看II

     楼主| 发表于 2008-9-10 05:47:27 | 显示全部楼层
    晕,贴发出来格式都变了~
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2024-11-26 22:00
  • 签到天数: 5 天

    [LV.2]偶尔看看I

    发表于 2008-9-10 13:25:06 | 显示全部楼层
    呵呵,现在不是改名叫里诺了吗?
    PYG19周年生日快乐!
  • TA的每日心情
    慵懒
    2017-5-2 11:05
  • 签到天数: 8 天

    [LV.3]偶尔看看II

     楼主| 发表于 2008-9-13 01:57:01 | 显示全部楼层
    教程中的《里诺》软件和这个软件的算法是一样的,但是也没有分析用户名低于四位时的填充数是如何算出来的,所以发贴问一下大家。
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2024-5-1 14:44
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2008-9-13 21:43:54 | 显示全部楼层
    原帖由 wmzy428 于 2008-9-13 01:57 发表
    教程中的《里诺》软件和这个软件的算法是一样的,但是也没有分析用户名低于四位时的填充数是如何算出来的,所以发贴问一下大家。


    记得好像是根据位数算出来填充的,其实是固定数值C840
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2008-9-23 08:10:45 | 显示全部楼层
    学习了,新手多谢你们把经验拿出来分享。
    PYG19周年生日快乐!
    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

    快速回复 返回顶部 返回列表