首页
社区
课程
招聘
嘿嘿,我的小CrackMe又和大家见面了。
发表于: 2005-9-24 12:00 8721

嘿嘿,我的小CrackMe又和大家见面了。

2005-9-24 12:00
8721

嘿嘿,我的小CrackMe又和大家见面了。这次这个CrackMe在算法没有上次的那么变态了(N多运算),以简单为主(“基本上(可不是完全上)”也可以说是明码比较),而且这个CrackMe也不在算法(发现大家都比较喜欢爆破,不喜欢算注册码) ,而在于防爆破,隐藏正确的跳转指令,喜欢爆破的可以试试。
程序名称:CrackMe
版  本:No 0.4版
作  者:zhanshen
程序语言:Delphi 6.0
算  法:比较简单
难  度:中等
要  求:找出自己的注册码,也可以爆破,能写注册机更好^_^

附件:crackme.rar
修正了一下附件,原来的CrackMe的界面字体在XP下显示不正常,在XP系统会看不到字,看不到字的请下载这第二个地址
附件:crackme.rar


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 7
支持
分享
最新回复 (16)
雪    币: 296
活跃值: (250)
能力值: ( LV9,RANK:210 )
在线值:
发帖
回帖
粉丝
2
2005-9-24 17:22
0
雪    币: 2384
活跃值: (766)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
3
Winter-Night兄出手很快呀。

I honor Winter-Night
2005-9-24 17:30
0
雪    币: 296
活跃值: (250)
能力值: ( LV9,RANK:210 )
在线值:
发帖
回帖
粉丝
4
跳转隐藏的很不错,要不是碰巧下了GetWindowTextA的断点就改不出来了,可以说运气很好
2005-9-24 17:38
0
雪    币: 2384
活跃值: (766)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
5
瞒天过海的计没瞒过你。
2005-9-24 17:47
0
雪    币: 221
活跃值: (137)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
6
楼主,你也太狼心了吧,要搞好多跳呀!找了咱N久才全搞出来!每次改变注册码时都会读取,真烦呀!由此下断得出注册码聘用制。又由字符串得出其它地方的改跳!!!算法粗看了下,也不是太难,没时间去细搞了,已经0:34了。哈哈,明天还得进行考试呢!不过是开卷!说来笑人每年都搞啥四五普法考试,还不是为了搞几个臭钱。
注册码限制:
4088AD
4088C1
4088CB
4088D5
4088DF
408ABD6
注册名限制:
408AEF
408AF8
正确与否跳转:
408CBD
2005-9-25 00:33
0
雪    币: 2384
活跃值: (766)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
7
呵呵,关键的地方基本都给找出来了。
看来还必须将跳转隐藏的更深才行。
2005-9-25 08:28
0
雪    币: 560
活跃值: (359)
能力值: ( LV13,RANK:1370 )
在线值:
发帖
回帖
粉丝
8
00408A84             8B45 FC         mov eax,dword ptr ss:[ebp-4]
00408A87             8B40 58         mov eax,dword ptr ds:[eax+58]
00408A8A             E8 B9D9FFFF     call 第二期作.00406448              ; 取用户名
00408A8F             83BD E0FDFFFF 0>cmp dword ptr ss:[ebp-220],0    ; 用户名是否为0
00408A96             0F84 EE010000   je 第二期作.00408C8A                ; 是就跳到出错提示
00408A9C             83FE 08         cmp esi,8                       ; 与8对比
00408A9F             0F82 E5010000   jb 第二期作.00408C8A                ; 小于8就跳到出错地方
00408AA5             83FE 0F         cmp esi,0F                      ; 与15做对比
00408AA8             0F87 DC010000   ja 第二期作.00408C8A                ; 大于15就跳到出错地方
00408AAE             8D95 DCFDFFFF   lea edx,dword ptr ss:[ebp-224]
00408AB4             8B45 FC         mov eax,dword ptr ss:[ebp-4]
00408AB7             8B40 38         mov eax,dword ptr ds:[eax+38]
00408ABA             E8 89D9FFFF     call 第二期作.00406448              ; 取注册码
00408ABF             83BD DCFDFFFF 0>cmp dword ptr ss:[ebp-224],0    ; 是否为空
00408AC6             0F84 BE010000   je 第二期作.00408C8A                ; 为空就跳到出错位置
00408ACC             8D55 F8         lea edx,dword ptr ss:[ebp-8]
00408ACF             8B45 FC         mov eax,dword ptr ss:[ebp-4]
00408AD2             8B40 58         mov eax,dword ptr ds:[eax+58]
00408AD5             E8 6ED9FFFF     call 第二期作.00406448
00408ADA             8D45 F4         lea eax,dword ptr ss:[ebp-C]
00408ADD             E8 BEA4FFFF     call 第二期作.00402FA0
00408AE2             8B45 F8         mov eax,dword ptr ss:[ebp-8]    ; 用户名放入EAX
00408AE5             E8 12A6FFFF     call 第二期作.004030FC              ; 这个CALL是取用户名长度
00408AEA             8BF8            mov edi,eax                     ; 用户名位数放入EDX
00408AEC             85FF            test edi,edi                    ; 对比EDI的值
00408AEE             76 7C           jbe short 第二期作.00408B6C         ; 小于等于就跳到408B6C处
00408AF0             BB 01000000     mov ebx,1                       ; EBX赋值1
00408AF5             8B45 F8         mov eax,dword ptr ss:[ebp-8]    ; 用户名ASCII码放入EAX,循环开始
00408AF8             0FB67418 FF     movzx esi,byte ptr ds:[eax+ebx->; 逐个取用户名的ASCII十六进制码放入ESI
00408AFD             69C3 369C0300   imul eax,ebx,39C36              ; EAX=EBX*39C36
00408B03             0FAFF0          imul esi,eax                    ; ESI=ESI*EAX
00408B06             8BC6            mov eax,esi                     ; ESI的值放入EAX
00408B08             25 FF000000     and eax,0FF                     ; EAX的值与0FF做AND运算,放入EAX
00408B0D             8BD6            mov edx,esi                     ; ESI的值放入EDX
00408B0F             C1EA 08         shr edx,8                       ; 逻辑右移8位
00408B12             81E2 FF000000   and edx,0FF                     ; 与0FF做AND运算
00408B18             03C2            add eax,edx                     ; EAX=EAX+EDX
00408B1A             8BD6            mov edx,esi                     ; ESI的值放入EDX
00408B1C             C1EA 10         shr edx,10                      ; 右移16位
00408B1F             81E2 FF000000   and edx,0FF                     ; 与0FF做AND运算
00408B25             03C2            add eax,edx                     ; EAX=EAX+EDX
00408B27             8BD6            mov edx,esi                     ; ESI的值送入EDX
00408B29             C1EA 18         shr edx,18                      ; 右移24位
00408B2C             81E2 FF000000   and edx,0FF                     ; 与0FF做AND运算
00408B32             03C2            add eax,edx                     ; EAX=EAX+EDX
00408B34             8BD6            mov edx,esi                     ; ESI的值送入EDX
00408B36             C1EA 20         shr edx,20                      ; 右移32位
00408B39             81E2 FF000000   and edx,0FF                     ; 与0FF做AND运算
00408B3F             03C2            add eax,edx                     ; EAX=EAX+EDX
00408B41             8BF0            mov esi,eax                     ; EAX的值送入ESI
00408B43             8BC6            mov eax,esi                     ; ESI的值送入EAX,晕。。。
00408B45             25 FF000000     and eax,0FF                     ; 与0FF做AND运算
00408B4A             8D8D D8FDFFFF   lea ecx,dword ptr ss:[ebp-228]  ; 结果放在EBP-228中
00408B50             BA 02000000     mov edx,2                       ; EDX赋值为2
00408B55             E8 66BBFFFF     call 第二期作.004046C0
00408B5A             8B95 D8FDFFFF   mov edx,dword ptr ss:[ebp-228]  ; 计算结果放入EDX中
00408B60             8D45 F4         lea eax,dword ptr ss:[ebp-C]
00408B63             E8 9CA5FFFF     call 第二期作.00403104
00408B68             43              inc ebx                         ; EBX=EBX+1,第一位开始逐个取用户名位数
00408B69             4F              dec edi                         ; 用户名位数减1,逐个取
00408B6A           ^ 75 89           jnz short 第二期作.00408AF5         ; 没有取完继续循环
00408B6C             8D55 F0         lea edx,dword ptr ss:[ebp-10]   ; 计算结果放入EDX中
00408B6F             8B45 FC         mov eax,dword ptr ss:[ebp-4]
00408B72             8B40 38         mov eax,dword ptr ds:[eax+38]
00408B75             E8 CED8FFFF     call 第二期作.00406448              ; 取注册码位数
00408B7A             8D45 F0         lea eax,dword ptr ss:[ebp-10]
00408B7D             FF15 78924000   call dword ptr ds:[409278]      ; 第二期作.00408390
00408B83             83F8 04         cmp eax,4                       ; 注册码位数是否大于4
00408B86             0F8C FE000000   jl 第二期作.00408C8A                ; 小于跳到出错地方
00408B8C             8D45 EC         lea eax,dword ptr ss:[ebp-14]
00408B8F             E8 0CA4FFFF     call 第二期作.00402FA0
00408B94             BE 01000000     mov esi,1                       ; ESI赋值1
00408B99             8B45 F0         mov eax,dword ptr ss:[ebp-10]   ; 注册码ASCII码放入EAX
00408B9C             E8 5BA5FFFF     call 第二期作.004030FC              ; 这个CALL是计算注册码长度
00408BA1             8BF8            mov edi,eax                     ; 注册码位数放入EDI
00408BA3             D1FF            sar edi,1                       ; EDI的值算术右移1位
00408BA5             79 03           jns short 第二期作.00408BAA
00408BA7             83D7 00         adc edi,0                       ; 带进位加0
00408BAA             85FF            test edi,edi                    ; 对比EDI
00408BAC             0F86 B0000000   jbe 第二期作.00408C62               ; 小于等于就跳到4086C2处
00408BB2             8D9D E8FDFFFF   lea ebx,dword ptr ss:[ebp-218]
00408BB8             8D85 E8FEFFFF   lea eax,dword ptr ss:[ebp-118]
00408BBE             8945 E8         mov dword ptr ss:[ebp-18],eax
00408BC1             8D85 D0FDFFFF   lea eax,dword ptr ss:[ebp-230]  ; 循环开始
00408BC7             8B55 F0         mov edx,dword ptr ss:[ebp-10]   ; EBP-10中放假注册码ASCII码
00408BCA             8A5432 FF       mov dl,byte ptr ds:[edx+esi-1]  ; 逐个取注册码16进制码放入EDX低位DL
00408BCE             8850 01         mov byte ptr ds:[eax+1],dl      ; 再放入EAX+1地址
00408BD1             C600 01         mov byte ptr ds:[eax],1
00408BD4             8D95 D0FDFFFF   lea edx,dword ptr ss:[ebp-230]
00408BDA             8D85 CCFDFFFF   lea eax,dword ptr ss:[ebp-234]  ; EBP-234中放前两位注册码
00408BE0             E8 FB99FFFF     call 第二期作.004025E0
00408BE5             8D85 C8FDFFFF   lea eax,dword ptr ss:[ebp-238]
00408BEB             8B55 F0         mov edx,dword ptr ss:[ebp-10]   ; EBP-10中是假注册码
00408BEE             8A1432          mov dl,byte ptr ds:[edx+esi]    ; 逐个取注册码下一位放入DL
00408BF1             8850 01         mov byte ptr ds:[eax+1],dl      ; 第二位注册码放入EAX+1地址
00408BF4             C600 01         mov byte ptr ds:[eax],1
00408BF7             8D95 C8FDFFFF   lea edx,dword ptr ss:[ebp-238]
00408BFD             8D85 CCFDFFFF   lea eax,dword ptr ss:[ebp-234]
00408C03             B1 02           mov cl,2
00408C05             E8 A699FFFF     call 第二期作.004025B0
00408C0A             8D95 CCFDFFFF   lea edx,dword ptr ss:[ebp-234]  ; 连续2位注册码放入EDX
00408C10             8D85 D4FDFFFF   lea eax,dword ptr ss:[ebp-22C]
00408C16             E8 D5A4FFFF     call 第二期作.004030F0
00408C1B             8B95 D4FDFFFF   mov edx,dword ptr ss:[ebp-22C]  ; 两位注册码放入EDX
00408C21             8B45 FC         mov eax,dword ptr ss:[ebp-4]
00408C24             E8 9BFCFFFF     call 第二期作.004088C4
00408C29             8803            mov byte ptr ds:[ebx],al        ; AL中放着连续的两位注册码,放EBX地址中
00408C2B             8B45 E8         mov eax,dword ptr ss:[ebp-18]
00408C2E             8A00            mov al,byte ptr ds:[eax]        ; 此处的内存地址的堆栈值
00408C30             3003            xor byte ptr ds:[ebx],al        ; 每取两位注册码与堆栈值做异或运算
00408C32             8D8D C4FDFFFF   lea ecx,dword ptr ss:[ebp-23C]
00408C38             33C0            xor eax,eax                     ; EAX清零
00408C3A             8A03            mov al,byte ptr ds:[ebx]        ; 结果放入EAX
00408C3C             BA 01000000     mov edx,1                       ; 赋值EDX为1
00408C41             E8 7ABAFFFF     call 第二期作.004046C0
00408C46             8B95 C4FDFFFF   mov edx,dword ptr ss:[ebp-23C]  ; 结果放入EDX
00408C4C             8D45 EC         lea eax,dword ptr ss:[ebp-14]
00408C4F             E8 B0A4FFFF     call 第二期作.00403104
00408C54             83C6 02         add esi,2                       ; ESI=DSI+2,两位两位的取
00408C57             FF45 E8         inc dword ptr ss:[ebp-18]
00408C5A             43              inc ebx                         ; EBX=EBX+1
00408C5B             4F              dec edi                         ; EDI=EDI-1,逐个取注册码
00408C5C           ^ 0F85 5FFFFFFF   jnz 第二期作.00408BC1               ; 没有取完就继续循环
00408C62             8B45 F4         mov eax,dword ptr ss:[ebp-C]    ; 用户名计算结果放入EAX
00408C65             8B55 EC         mov edx,dword ptr ss:[ebp-14]   ; 注册码计算结果放入EDX
00408C68             E8 4FA5FFFF     call 第二期作.004031BC              ; 关键算法2
00408C6D             75 08           jnz short 第二期作.00408C77         ; 不等就跳出错
00408C6F             FF15 74924000   call dword ptr ds:[409274]      ; 第二期作.00408564
00408C75             EB 13           jmp short 第二期作.00408C8A
00408C77             6A 00           push 0
00408C79             68 D08C4000     push 第二期作.00408CD0              ; 很抱歉
00408C7E             68 DC8C4000     push 第二期作.00408CDC              ; 注册码出错
00408C83             6A 00           push 0
00408C85             E8 1EACFFFF     call <jmp.&user32.MessageBoxA>  ; 出错提示
00408C8A             33C0            xor eax,eax
00408C8C             5A              pop edx

===============================================
004031BF             89C6            mov esi,eax                     ; EAX的值放入ESI(用户名计算结果)
004031C1             89D7            mov edi,edx                     ; EDX的值放入EDI(注册码计算结果)
004031C3             39D0            cmp eax,edx                     ; 对比EAX和EDX的值
004031C5             0F84 8F000000   je 第二期作.0040325A                ; 相等跳
004031CB             85F6            test esi,esi                    ; ESI是否为0
004031CD             74 68           je short 第二期作.00403237          ; 是0就错
004031CF             85FF            test edi,edi                    ; EDI是否为0
004031D1             74 6B           je short 第二期作.0040323E          ; 为0错
004031D3             8B46 FC         mov eax,dword ptr ds:[esi-4]    ; 用户名计算后的长度值放入EAX
004031D6             8B57 FC         mov edx,dword ptr ds:[edi-4]    ; 注册码计算后的长度值的值放入EDX
004031D9             29D0            sub eax,edx                     ; EAX=EAX-EDX
004031DB             77 02           ja short 第二期作.004031DF          ; 大于就跳
004031DD             01C2            add edx,eax
004031DF             52              push edx
004031E0             C1EA 02         shr edx,2                       ; EDX右移2
004031E3             74 26           je short 第二期作.0040320B          ; 相等就跳
004031E5             8B0E            mov ecx,dword ptr ds:[esi]
004031E7             8B1F            mov ebx,dword ptr ds:[edi]
004031E9             39D9            cmp ecx,ebx
004031EB             75 58           jnz short 第二期作.00403245
004031ED             4A              dec edx
004031EE             74 15           je short 第二期作.00403205
004031F0             8B4E 04         mov ecx,dword ptr ds:[esi+4]
004031F3             8B5F 04         mov ebx,dword ptr ds:[edi+4]
004031F6             39D9            cmp ecx,ebx
004031F8             75 4B           jnz short 第二期作.00403245
004031FA             83C6 08         add esi,8                       ; 用户名计算结果加8放入ESI
004031FD             83C7 08         add edi,8                       ; 注册码计算结果加8放入EDI
00403200             4A              dec edx                         ; EDX=EDX+1
00403201           ^ 75 E2           jnz short 第二期作.004031E5         ; 不等就循环
00403203             EB 06           jmp short 第二期作.0040320B
00403205             83C6 04         add esi,4                       ; ESI=ESI+4
00403208             83C7 04         add edi,4                       ; EDI=EDI+4
0040320B             5A              pop edx
0040320C             83E2 03         and edx,3                       ; EDX与3做AND运算
0040320F             74 22           je short 第二期作.00403233
00403211             8B0E            mov ecx,dword ptr ds:[esi]
00403213             8B1F            mov ebx,dword ptr ds:[edi]
00403215             38D9            cmp cl,bl                       ; 注册码结果第一位与0比较
00403217             75 41           jnz short 第二期作.0040325A         ; 不是0就出错
00403219             4A              dec edx
0040321A             74 17           je short 第二期作.00403233
0040321C             38FD            cmp ch,bh                       ; 第二位与0比较
0040321E             75 3A           jnz short 第二期作.0040325A
00403220             4A              dec edx
00403221             74 10           je short 第二期作.00403233
00403223             81E3 0000FF00   and ebx,0FF0000                 ; 0FF000与EBX做AND运算
00403229             81E1 0000FF00   and ecx,0FF0000                 ; 0FF000与ECX做AND运算
0040322F             39D9            cmp ecx,ebx                     ; 对比两者
00403231             75 27           jnz short 第二期作.0040325A         ; 不等就跳
00403233             01C0            add eax,eax
00403235             EB 23           jmp short 第二期作.0040325A
00403237             8B57 FC         mov edx,dword ptr ds:[edi-4]    ; 36放入EDX
0040323A             29D0            sub eax,edx
0040323C             EB 1C           jmp short 第二期作.0040325A
0040323E             8B46 FC         mov eax,dword ptr ds:[esi-4]
00403241             29D0            sub eax,edx
00403243             EB 15           jmp short 第二期作.0040325A
00403245             5A              pop edx
00403246             38D9            cmp cl,bl                       ; 对比两者计算后的第一个字符串
00403248             75 10           jnz short 第二期作.0040325A         ; 不等就跳错
0040324A             38FD            cmp ch,bh                       ; 对比第二个
0040324C             75 0C           jnz short 第二期作.0040325A         ; 不等就错
0040324E             C1E9 10         shr ecx,10                      ; ECX右移16位
00403251             C1EB 10         shr ebx,10                      ; EDX右移16位
00403254             38D9            cmp cl,bl                       ; 对比第三个字符串
00403256             75 02           jnz short 第二期作.0040325A         ; 不等就错
00403258             38FD            cmp ch,bh                       ; 对比第四个字符串
0040325A             5F              pop edi                         ; EDI的值出堆栈(注册码计算最终结果)
0040325B             5E              pop esi                         ; ESI出栈(用户名计算最终结果)
0040325C             5B              pop ebx
0040325D             C3              retn
0040325E             8BC0            mov eax,eax

总结一下:
用户名ACCII的十六进制码*相应的位置数*39C36=A
[(A AND 0FF)+(A SHR 8 AND 0FF)+(A SHR 10 AND 0FF)+(A SHR 18 AND 0FF)+(A SHR 20 AND 0FF)] AND 0FF=B

逐次取两位注册码与8E 1C AA 38 C6 54 E2 70(004082CE处的内存地址中16进制值,我不知道这个在别的机器会不会变) 做异或运算=C  

B和C的前4位要相等,我不知道还有没有其它的限制,因为单单用户名的算法就让人搞的头晕晕的.....
2005-11-29 12:35
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
又长见识了。谢谢大家
2005-12-2 22:51
0
雪    币: 2256
活跃值: (941)
能力值: (RANK:2210 )
在线值:
发帖
回帖
粉丝
10
收藏拉~好好学习学习~
2005-12-3 20:23
0
雪    币: 2384
活跃值: (766)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
11
8楼的历害呀,注册码算法分析的不错,不过还有一处验效的地方,不去除他还是没办法注册成功的。
2005-12-4 08:14
0
雪    币: 372
活跃值: (31)
能力值: ( LV12,RANK:410 )
在线值:
发帖
回帖
粉丝
12
如何了隐藏跳转指令,请楼主指点。。。
2005-12-10 08:18
0
雪    币: 61
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
等下细看....先回个............
2005-12-10 13:57
0
雪    币: 6337
活跃值: (3786)
能力值: ( LV2,RANK:15 )
在线值:
发帖
回帖
粉丝
14
不行不懂啊..没有头绪..怎么样来分析?
2005-12-10 20:05
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
收藏之,好好学习.
2005-12-13 18:36
0
雪    币: 389
活跃值: (912)
能力值: ( LV9,RANK:770 )
在线值:
发帖
回帖
粉丝
16
DING.
2005-12-22 17:22
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
偶对注册码的算法一窍不通,只是追到关键CALL,其他的分析就不会了,等高手给我讲解.
2005-12-27 15:44
0
游客
登录 | 注册 方可回帖
返回
//