飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 9289|回复: 12

[原创] 菜鸟也学密码学--CRC32

[复制链接]

该用户从未签到

发表于 2006-11-22 21:08:34 | 显示全部楼层 |阅读模式
【文章标题】: 菜鸟也学密码学--CRC32
【文章作者】: 网游难民
【作者主页】: bbs.chinapyg.com
【下载地址】: 自己搜索下载
【作者声明】: 菜鸟初次接触密码学,失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
  004042A8    55              push ebp
  004042A9    8BEC            mov ebp,esp
  004042AB    6A 00           push 0
  004042AD    6A 00           push 0
  004042AF    53              push ebx
  004042B0    56              push esi
  004042B1    33C0            xor eax,eax
  004042B3    55              push ebp
  004042B4    68 D5434000     push crc32cra.004043D5
  004042B9    64:FF30         push dword ptr fs:[eax]
  004042BC    64:8920         mov dword ptr fs:[eax],es>
  004042BF    8D45 FC         lea eax,dword ptr ss:[ebp>
  004042C2    E8 21EBFFFF     call crc32cra.00402DE8
  004042C7    A1 28654000     mov eax,dword ptr ds:[406>
  004042CC    50              push eax
  004042CD    E8 12FAFFFF     call <jmp.&user32.GetWind>
  004042D2    8BF0            mov esi,eax
  004042D4    8BDE            mov ebx,esi
  004042D6    85DB            test ebx,ebx
  004042D8    7E 10           jle short crc32cra.004042>
  004042DA    8D45 FC         lea eax,dword ptr ss:[ebp>
  004042DD    BA EC434000     mov edx,crc32cra.004043EC
  004042E2    E8 F1EBFFFF     call crc32cra.00402ED8
  004042E7    4B              dec ebx
  004042E8  ^ 75 F0           jnz short crc32cra.004042>
  004042EA    6A 32           push 32
  004042EC    8B45 FC         mov eax,dword ptr ss:[ebp>
  004042EF    E8 ACECFFFF     call crc32cra.00402FA0
  004042F4    50              push eax
  004042F5    A1 28654000     mov eax,dword ptr ds:[406>
  004042FA    50              push eax
  004042FB    E8 DCF9FFFF     call <jmp.&user32.GetWind>; 取得注册名位数
  00404300    83FE 05         cmp esi,5
  00404303    0F8C B1000000   jl crc32cra.004043BA      ; 小于5就Game Over
  00404309    8D45 FC         lea eax,dword ptr ss:[ebp>
  0040430C    8B4D FC         mov ecx,dword ptr ss:[ebp>; 注册名
  0040430F    BA F8434000     mov edx,crc32cra.004043F8 ; ASCII "DiKeN"
  00404314    E8 03ECFFFF     call crc32cra.00402F1C    ; DiKeN+注册名,记为字符串A
  00404319    8B45 FC         mov eax,dword ptr ss:[ebp>; 字符串A放入EAX中~~
  0040431C    E8 AFEBFFFF     call crc32cra.00402ED0    ; 字符串A的总长度
  00404321    8BD0            mov edx,eax
  00404323    8D45 FC         lea eax,dword ptr ss:[ebp>
  00404326    E8 C5FAFFFF     call crc32cra.00403DF0    ; 算法CALL,跟进~~
  0040432B    8BF0            mov esi,eax               ; 上面计算出的结果-字符串C,放入ESI中~
  0040432D    8D45 F8         lea eax,dword ptr ss:[ebp>
  00404330    E8 B3EAFFFF     call crc32cra.00402DE8
  00404335    A1 2C654000     mov eax,dword ptr ds:[406>
  0040433A    50              push eax
  0040433B    E8 A4F9FFFF     call <jmp.&user32.GetWind>; 取得注册码的长度
  00404340    8BD8            mov ebx,eax
  00404342    85DB            test ebx,ebx
  00404344    7E 10           jle short crc32cra.004043>; 检测是否填写注册码
  00404346    8D45 F8         lea eax,dword ptr ss:[ebp>
  00404349    BA EC434000     mov edx,crc32cra.004043EC
  0040434E    E8 85EBFFFF     call crc32cra.00402ED8
  00404353    4B              dec ebx
  00404354  ^ 75 F0           jnz short crc32cra.004043>
  00404356    6A 20           push 20
  00404358    8B45 F8         mov eax,dword ptr ss:[ebp>
  0040435B    E8 40ECFFFF     call crc32cra.00402FA0
  00404360    50              push eax
  00404361    A1 2C654000     mov eax,dword ptr ds:[406>
  00404366    50              push eax
  00404367    E8 70F9FFFF     call <jmp.&user32.GetWind>; 取得注册码位数
  0040436C    8D45 F8         lea eax,dword ptr ss:[ebp>
  0040436F    8B4D F8         mov ecx,dword ptr ss:[ebp>; 注册码放在ECX中~
  00404372    BA 08444000     mov edx,crc32cra.00404408
  00404377    E8 A0EBFFFF     call crc32cra.00402F1C
  0040437C    8B45 F8         mov eax,dword ptr ss:[ebp>; 注册码放在EAX中~
  0040437F    E8 A0FEFFFF     call crc32cra.00404224    ; 注册码的十六进制
  00404384    33F0            xor esi,eax               ; 注册码十六进制XOR字符串C
  00404386    85F6            test esi,esi
  00404388    74 19           je short crc32cra.004043A>; ESI等于0就跳,即说注册码的十六进制与字符串a相等就注册成功
  0040438A    6A 00           push 0
  0040438C    68 0C444000     push crc32cra.0040440C
  00404391    68 14444000     push crc32cra.00404414
  00404396    A1 04654000     mov eax,dword ptr ds:[406>
  ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  00403DF0    51              push ecx
  00403DF1    53              push ebx
  00403DF2    56              push esi
  00403DF3    57              push edi
  00403DF4    BF 1A3E4000     mov edi,crc32cra.00403E1A
  00403DF9    8B30            mov esi,dword ptr ds:[eax>; 字符串A放在ESI中~~
  00403DFB    83C8 FF         or eax,FFFFFFFF           ; EAX置FFFFFFFF
  00403DFE    31C9            xor ecx,ecx
  00403E00    3206            xor al,byte ptr ds:[esi]  ; 循环开始~~
  00403E02    50              push eax
  00403E03    25 FF000000     and eax,0FF
  00403E08    8B1C87          mov ebx,dword ptr ds:[edi>
  00403E0B    58              pop eax
  00403E0C    C1E8 08         shr eax,8
  00403E0F    31D8            xor eax,ebx
  00403E11    46              inc esi
  00403E12    4A              dec edx
  00403E13  ^ 75 EB           jnz short crc32cra.00403E>; 关键循环~~
  00403E15    E9 00040000     jmp crc32cra.0040421A     ; 跳到下面~~~
  00403E1A    0000            add byte ptr ds:[eax],al
  下面介绍下上面的循环:
  先把EAX置FFFFFFFF,AL中的两个FF与字符串A的第一位-D的ASCII码(44)XOR运算(结果为BB),运算后EAX中的值记为a1(FFFFFFBB),取得AL(BB)中对应的CRC32密码表中的数(5CB36A04),记为b1,
  a1右移(二进制)8位后(00FFFFFF)和b1(5CB36A04)进行XOR运算,结果记为c1(5C4C95FB)。下面进入第二轮循环。
  取c1的后两位(FB),与字符串A的第二位XOR运算(结果为92),运算后EAX中的值记为a2(5C4C9592),取得AL(92)中对应的CRC32密码表中的数(1E01F268),记为b2,
  a2右移(二进制)8位后(005C4C95)和b2进行XOR运算,结果记为c2,然后进入第三轮循环,
  。。。。。。。。。。。省略。。。。。。。。。。
  一直循环到字符串A全部运算一遍,结果记为字符串B,然后到00403E15处跳到下面~~~
  +++++++++++++++++++++++++++++++++++++++++++++++++++++++
  跳到这里:
  0040421A    83F0 FF         xor eax,FFFFFFFF                  ; 跳到这里,字符串B XOR FFFFFFFF,结果记为字符串C
  0040421D    5F              pop edi                           ; crc32cra.00403E1A
  0040421E    5E              pop esi
  0040421F    5B              pop ebx
  00404220    59              pop ecx
  00404221    C3              retn
  
--------------------------------------------------------------------------------
【经验总结】
  大家用密码学计算器算下,字符串C是不是DiKeN+注册名的CRC32的计算结果????
  即:DiKeN+注册名的CRC32的计算结果的十进制就是注册码:)
  
  能认真看完这篇文章的朋友大概了解了CRC32是怎么计算来的了吧:)
  
--------------------------------------------------------------------------------
【版权声明】: 转载请注明作者并保持文章的完整, 谢谢!

crc32crackme.rar

11.16 KB, 下载次数: 1560, 下载积分: 飘云币 -2 枚

PYG19周年生日快乐!
  • TA的每日心情
    开心
    2022-2-2 22:12
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2006-11-22 21:52:36 | 显示全部楼层
    下下来慢慢学
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2006-11-23 11:56:22 | 显示全部楼层
    学习,收藏!!支持!!!!
    PYG19周年生日快乐!
  • TA的每日心情
    郁闷
    2015-10-8 20:39
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2006-11-23 15:01:21 | 显示全部楼层
    ;P 今天晚上偶 有时间给我上课啊  不上切你JJ
    PYG19周年生日快乐!
  • TA的每日心情
    奋斗
    2024-7-31 22:21
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2006-12-1 10:29:36 | 显示全部楼层
    /:D 看看先~~
    PYG19周年生日快乐!
  • TA的每日心情
    郁闷
    2018-7-2 23:34
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2006-12-1 11:53:07 | 显示全部楼层
    CRc32!!!!!!!!!!!!
    不懂啊!
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2006-12-9 03:31:39 | 显示全部楼层
    我又转到这来学了,哎,这知道都学杂了。
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2006-12-9 20:40:47 | 显示全部楼层
    进来学习一下。。。
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2006-12-10 17:16:10 | 显示全部楼层
    提示: 作者被禁止或删除 内容自动屏蔽
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2006-12-10 18:07:18 | 显示全部楼层
    学习真难,加油啊
    PYG19周年生日快乐!
    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

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