【文章标题】: 一个BCG的CrackMe注册分析
【文章作者】: CuteSnail
【作者QQ号】: 121567771
【作者声明】: 只是感兴趣的自娱自乐,没有其他目的。失误之处还要敬请诸位大侠赐教!
-------------------------------------------------------------------------------
【详细过程】
使用OD载入该程序后运行它,然后输入假的注册名: 11111(因为程序提示了:注册名必须在4个字符以上) 和 注册码: 12345, 然后下断点:
GetWindowTextA 后再按确定按钮,这时程序就被断下了,然后按Alt+F9键返回到程序处,向下看,来到了这里:
00401085 . 6A 66 push 66 ; /ControlID = 66 (102.)
00401087 . 53 push ebx ; |hWnd
00401088 . E8 159C0000 call <jmp.&USER32.GetDlgItem> ; \GetDlgItem
0040108D . 6A 64 push 64 ; /Count = 64 (100.)
0040108F . 8D95 48FFFFFF lea edx, dword ptr [ebp-B8] ; |
00401095 . 52 push edx ; |Buffer
00401096 . 50 push eax ; |hWnd
00401097 . E8 129C0000 call <jmp.&USER32.GetWindowTextA> ; \得到注册名; 最初就被断在了这里!!!
0040109C . 6A 68 push 68 ; /ControlID = 68 (104.)
0040109E . 53 push ebx ; |hWnd
0040109F . E8 FE9B0000 call <jmp.&USER32.GetDlgItem> ; \GetDlgItem
004010A4 . 6A 64 push 64 ; /Count = 64 (100.)
004010A6 . 8D8D E4FEFFFF lea ecx, dword ptr [ebp-11C] ; |
004010AC . 51 push ecx ; |Buffer
004010AD . 50 push eax ; |hWnd
004010AE . E8 FB9B0000 call <jmp.&USER32.GetWindowTextA> ; \得到注册码
004010B3 . 6A 67 push 67 ; /ControlID = 67 (103.)
004010B5 . 53 push ebx ; |hWnd
004010B6 . E8 E79B0000 call <jmp.&USER32.GetDlgItem> ; \GetDlgItem
004010BB . 8BF0 mov esi, eax
004010BD . 8D85 48FFFFFF lea eax, dword ptr [ebp-B8] ; 注册名
004010C3 . 50 push eax
004010C4 . E8 67050000 call BCG.00401630 ; 得到注册名长度
004010C9 . 59 pop ecx
004010CA . 8945 D8 mov dword ptr [ebp-28], eax
004010CD . 8D95 E4FEFFFF lea edx, dword ptr [ebp-11C] ; 注册码
004010D3 . 52 push edx
004010D4 . E8 57050000 call BCG.00401630 ; 得到注册码长度
004010D9 . 59 pop ecx
004010DA . 68 EAB04000 push BCG.0040B0EA
004010DF . E8 4C050000 call BCG.00401630
004010E4 . 59 pop ecx
004010E5 . 68 0EB14000 push BCG.0040B10E
004010EA . E8 41050000 call BCG.00401630
004010EF . 59 pop ecx
004010F0 . 837D D8 03 cmp dword ptr [ebp-28], 3 ; 注册名长度 与3 比较
004010F4 . 7E 7B jle short BCG.00401171 ; 小于等于,跳走
004010F6 . 33C9 xor ecx, ecx ; ecx 置 0
004010F8 . 33D2 xor edx, edx ; edx 置 0
004010FA . 33DB xor ebx, ebx ; ebx 置 0
004010FC . 33C0 xor eax, eax ; eax 置 0
004010FE . 837D D8 32 cmp dword ptr [ebp-28], 32 ; 注册名长度 与50 比较
00401102 . 7D 69 jge short BCG.0040116D ; 大于等于,跳走
00401104 > 0FBE840D 48FFFFFF movsx eax, byte ptr [ebp+ecx-B8] ; 依次取注册名的ASCII码值 送 eax 中
0040110C . 41 inc ecx ; ecx依次加1
0040110D . 33C1 xor eax, ecx ; eax 与 ecx 异或
0040110F . 03D8 add ebx, eax ; ebx 与 eax 相加
00401111 . 3B4D D8 cmp ecx, dword ptr [ebp-28] ; 比较是否结束循环
00401114 .^ 75 EE jnz short BCG.00401104 ; 不等,继续循环
00401116 . 69C0 56030000 imul eax, eax, 356 ; eax 乘以 854
0040111C . C1E3 08 shl ebx, 8 ; ebx 左移 8 位
0040111F . C1E8 08 shr eax, 8 ; eax 右移 8 位
00401122 . 90 nop
00401123 . 90 nop
00401124 . 03C3 add eax, ebx ; eax 与 ebx 相加
00401126 . 8945 C8 mov dword ptr [ebp-38], eax ; 最终结果 送 [ebp-38]处
00401129 . FF75 C8 push dword ptr [ebp-38] ; /压入[ebp-38]处的数值
0040112C . 68 38B44000 push BCG.0040B438 ; |Arg2 = 0040B438 ASCII "%lX"
00401131 . 8D8D 80FEFFFF lea ecx, dword ptr [ebp-180] ; |
00401137 . 51 push ecx ; |Arg1
00401138 . E8 873D0000 call BCG.00404EC4 ; \16进制数值转换为字符串
0040113D . 83C4 0C add esp, 0C
00401140 . 8D85 80FEFFFF lea eax, dword ptr [ebp-180] ; 字符串 到 eax
00401146 . 50 push eax ; /压入这个结果
00401147 . 8D95 E4FEFFFF lea edx, dword ptr [ebp-11C] ; |注册码
0040114D . 52 push edx ; |再压入注册码
0040114E . E8 339C0000 call <jmp.&KERNEL32.lstrcmpA> ; \比较 输入的注册码 与 转换为字符串的运算结果
00401153 . 85C0 test eax, eax ; 相等,则eax返回0,成功
00401155 . 75 0D jnz short BCG.00401164 ; 不为0,则跳走
00401157 . 68 3CB44000 push BCG.0040B43C ; /Text = ""B8,"锩讶",BB,"成?,A6,",加入BCG后",B8,"
枧",AC,"?,A6," ^_^"
0040115C . 56 push esi ; |hWnd
0040115D . E8 289B0000 call <jmp.&USER32.SetWindowTextA> ; \SetWindowTextA
00401162 . EB 18 jmp short BCG.0040117C
00401164 > 68 90B44000 push BCG.0040B490
上面的运算就是: 按照注册名的长度依次取注册名的ASCII码值与 依次增加1的ecx 作异或运算,然后结果和ebx相加,得到循环后结果再乘
以854后,将eax中的结果右移8位,再将ebx的结果左移8位,然后将这两个数值相加,得到最终结果,并将其按16进制数的格式转换为字符串,再读
入注册码,与这个字符串比较,相等,就注册成功了,那么当我的注册名是: 11111 时,我的正确注册码就是: FEAD 了, 哈哈 ^_^
成功的注册信息:
注册名: 11111
注册码: FEAD
-----------------------------------------------------------------------------------
【版权声明】: 本文由 CuteSnail 原创, 转载请注明作者并保持文章的完整性, 谢谢! 再见!!
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!