网游难民 发表于 2006-11-22 21:08:34

菜鸟也学密码学--CRC32

【文章标题】: 菜鸟也学密码学--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:
004042BC    64:8920         mov dword ptr fs:,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:; 循环开始~~
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:,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是怎么计算来的了吧:)

--------------------------------------------------------------------------------
【版权声明】: 转载请注明作者并保持文章的完整, 谢谢!

杜杜哎哟 发表于 2006-11-22 21:52:36

下下来慢慢学

ZHOU2X 发表于 2006-11-23 11:56:22

学习,收藏!!支持!!!!

地久天长 发表于 2006-11-23 15:01:21

;P 今天晚上偶 有时间给我上课啊不上切你JJ

ychiou 发表于 2006-12-1 10:29:36

/:D 看看先~~

hangyubin 发表于 2006-12-1 11:53:07

CRc32!!!!!!!!!!!!
不懂啊!

wyh1983 发表于 2006-12-9 03:31:39

我又转到这来学了,哎,这知道都学杂了。

满江红 发表于 2006-12-9 20:40:47

进来学习一下。。。

jibo 发表于 2006-12-10 17:16:10

ks5678909 发表于 2006-12-10 18:07:18

学习真难,加油啊
页: [1] 2
查看完整版本: 菜鸟也学密码学--CRC32