- UID
- 1132
注册时间2005-4-20
阅读权限40
最后登录1970-1-1
独步武林
TA的每日心情 | 无聊 2020-4-10 17:02 |
---|
签到天数: 5 天 [LV.2]偶尔看看I
|
【原创】一个早期BCG的crackme 简单算法分析
日期:2005年8月17日 破解人:冷血书生[OCN][CZG][PCG][CCU]
———————————————————————————————————————————
【软件名称】:Crackme 软件版本:
【软件大小】: 193 KB
【下载地址】:本地下载
【软件简介】:
【软件限制】:
【破解声明】:初学Crack,只是感兴趣,没有其它目的。失误之处敬请诸位大侠赐教!
【破解工具】:PEID,OD
———————————————————————————————————————————
【破解过程】:
查壳,检测到Borland C++!我喜欢!马上OD载入!找到错误提示,在00401000下断:
00401000 55 push ebp ; 下断
00401001 8BEC mov ebp,esp
00401003 81C4 2CFBFFFF add esp,-4D4
00401009 53 push ebx
0040100A 56 push esi
0040100B 57 push edi
0040100C 8B5D 08 mov ebx,dword ptr ss:[ebp+8]
0040100F BE 4AB14000 mov esi,crackme.0040B14A ; ASCII "iNNeR's
CrACKiNG GrOUp)"
00401014 8DBD F0FCFFFF lea edi,dword ptr ss:[ebp-310]
0040101A B9 4B000000 mov ecx,4B
0040101F F3:A5 rep movs dword ptr es:[edi],dword ptr ds:[esi]
00401021 BE 76B24000 mov esi,crackme.0040B276
00401026 8DBD C4FBFFFF lea edi,dword ptr ss:[ebp-43C]
0040102C B9 4B000000 mov ecx,4B
00401031 F3:A5 rep movs dword ptr es:[edi],dword ptr ds:[esi]
00401033 BE A2B34000 mov esi,crackme.0040B3A2
00401038 8DBD 90FBFFFF lea edi,dword ptr ss:[ebp-470]
0040103E B9 0C000000 mov ecx,0C
00401043 F3:A5 rep movs dword ptr es:[edi],dword ptr ds:[esi]
00401045 66:A5 movs word ptr es:[edi],word ptr ds:[esi]
00401047 BE D4B34000 mov esi,crackme.0040B3D4
0040104C 8DBD 2CFBFFFF lea edi,dword ptr ss:[ebp-4D4]
00401052 B9 19000000 mov ecx,19
00401057 F3:A5 rep movs dword ptr es:[edi],dword ptr ds:[esi]
00401059 33C0 xor eax,eax ; EAX清0
0040105B 8945 C8 mov dword ptr ss:[ebp-38],eax
0040105E 33D2 xor edx,edx ; EDX清0
00401060 8955 C4 mov dword ptr ss:[ebp-3C],edx
00401063 33C9 xor ecx,ecx ; ECX清0
00401065 894D C0 mov dword ptr ss:[ebp-40],ecx
00401068 C745 BC CE05F4>mov dword ptr ss:[ebp-44],3EF405CE
0040106F 33C0 xor eax,eax ; EAX清0
00401071 8945 B8 mov dword ptr ss:[ebp-48],eax
00401074 C745 B4 00007A>mov dword ptr ss:[ebp-4C],447A0000
0040107B 33D2 xor edx,edx
0040107D 8955 B0 mov dword ptr ss:[ebp-50],edx
00401080 33C9 xor ecx,ecx
00401082 894D AC mov dword ptr ss:[ebp-54],ecx
00401085 6A 66 push 66
00401087 53 push ebx
00401088 E8 159C0000 call <jmp.&USER32.GetDlgItem>
0040108D 6A 64 push 64
0040108F 8D95 48FFFFFF lea edx,dword ptr ss:[ebp-B8]
00401095 52 push edx
00401096 50 push eax
00401097 E8 129C0000 call <jmp.&USER32.GetWindowTextA>
0040109C 6A 68 push 68
0040109E 53 push ebx
0040109F E8 FE9B0000 call <jmp.&USER32.GetDlgItem>
004010A4 6A 64 push 64
004010A6 8D8D E4FEFFFF lea ecx,dword ptr ss:[ebp-11C]
004010AC 51 push ecx
004010AD 50 push eax
004010AE E8 FB9B0000 call <jmp.&USER32.GetWindowTextA>
004010B3 6A 67 push 67
004010B5 53 push ebx
004010B6 E8 E79B0000 call <jmp.&USER32.GetDlgItem>
004010BB 8BF0 mov esi,eax
004010BD 8D85 48FFFFFF lea eax,dword ptr ss:[ebp-B8]
004010C3 50 push eax ; 用户名入栈
004010C4 E8 67050000 call crackme.00401630
004010C9 59 pop ecx
004010CA 8945 D8 mov dword ptr ss:[ebp-28],eax
004010CD 8D95 E4FEFFFF lea edx,dword ptr ss:[ebp-11C]
004010D3 52 push edx ; 假码入栈
004010D4 E8 57050000 call crackme.00401630
004010D9 59 pop ecx
004010DA 68 EAB04000 push crackme.0040B0EA
004010DF E8 4C050000 call crackme.00401630
004010E4 59 pop ecx
004010E5 68 0EB14000 push crackme.0040B10E
004010EA E8 41050000 call crackme.00401630
004010EF 59 pop ecx
004010F0 837D D8 03 cmp dword ptr ss:[ebp-28],3 ; 用户名长度与3比
较
004010F4 7E 7B jle short crackme.00401171 ; 小于或等于3就跳
004010F6 33C9 xor ecx,ecx
004010F8 33D2 xor edx,edx
004010FA 33DB xor ebx,ebx ; EBX=00320406
004010FC 33C0 xor eax,eax ; EAX清0
004010FE 837D D8 32 cmp dword ptr ss:[ebp-28],32 ; 用户名长度与32
比较
00401102 7D 69 jge short crackme.0040116D ; 大于就跳
00401104 0FBE840D 48FFF>movsx eax,byte ptr ss:[ebp+ecx-B8] ; 依次取用户名
ASCII值并送EAX
0040110C 41 inc ecx ; ECX=ECX+1
0040110D 33C1 xor eax,ecx ; EAX与ECX异或
0040110F 03D8 add ebx,eax ; EBX=EBX+EAX
00401111 3B4D D8 cmp ecx,dword ptr ss:[ebp-28] ; ECX与00000007比
较
00401114 ^ 75 EE jnz short crackme.00401104 ; 循环计算
00401116 69C0 56030000 imul eax,eax,356 ; EAX=EAX*356
0040111C C1E3 08 shl ebx,8 ; EBX乘以2的8次方
0040111F C1E8 08 shr eax,8 ; EAX除以2的8次方
00401122 90 nop
00401123 90 nop
00401124 03C3 add eax,ebx ; EAX=EAX+EBX
00401126 8945 C8 mov dword ptr ss:[ebp-38],eax
00401129 FF75 C8 push dword ptr ss:[ebp-38]
0040112C 68 38B44000 push crackme.0040B438 ; ASCII "%lX"
00401131 8D8D 80FEFFFF lea ecx,dword ptr ss:[ebp-180]
00401137 51 push ecx
00401138 E8 873D0000 call crackme.00404EC4
0040113D 83C4 0C add esp,0C
00401140 8D85 80FEFFFF lea eax,dword ptr ss:[ebp-180]
00401146 50 push eax
00401147 8D95 E4FEFFFF lea edx,dword ptr ss:[ebp-11C]
0040114D 52 push edx
0040114E E8 339C0000 call <jmp.&KERNEL32.lstrcmpA>
00401153 85C0 test eax,eax
00401155 75 0D jnz short crackme.00401164
【算法总结】
(1)用户名长度在3---50之间,小于3或者大于50就会出错啦!
(2)用户名第一位ASCII值 XOR 1 +0 =SN1
用户名第二位ASCII值 XOR 2 +SN1 =SN2
……
用户名最后一位ASCII值 XOR 用户名总长度 +SN(上面一个SN)= A
(3) 用户名最后一位ASCII值 XOR 用户名总长度 * 356= B
(4)A乘以2的8次方 = C
(5)B除以2的8次方 = D
(6) C + D =注册码
用户名:lengxue
注册码:2F746
———————————————————————————————————————————
【Crack_总结】:
初学算法,不足之处,还请各位大侠指点!
[ Last edited by 冷血书生 on 2005-8-19 at 11:15 AM ] |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?加入我们
x
|