我来简单分析一下冷雨飘心大哥的crackme。给没能破出来的朋友指点一下。 (4千字)
[冷雨飘心大哥crackme的注册机都出来了,我来简单分析一下。
给没能破出来的朋友提醒一下:
* Referenced to: user32.sengMessageA,ord:0210h
******** call 00401d04
******** or eax,eax
******** je 00401389
....
.... mov al,10 \
.... add al,1D /al==2D
....
******** repnz scasb -- 搜是否有‘-’
******** jne 0040129c -- 没有跳,所以注册码中要有‘-’。
******** mov eax,dword ptr [004031BB]
******** xor eax,4743435F --eax中为注册码倒置的前四位和
GCC_“比较”,填_CCG-123456789
******** jne 004012A4
******** lea esi, dword ptr [004031BB]
******** add esi, 00000005 --除去注册码前5位移入esi
******** call call 0040172F --F8进入
******** xor eax,FFFFFFF
******** je 004012A4
来到:
0040172F push esi
....
....
******** mov ecx,00000007 --循环7次
....
....
******** cmp al,30 \
******** jb 0040174c |
******** cmp al,46 |是否在0-F,否则死
******** ja 0040174c /
******** cmp al,40 \
******** ja 00401750 /A-F跳
******** cmp al,3A \
******** jb 00401750 /0-9跳
* Referenced by a (U)nconditional or (C)onditional Jump at
Address:
00401750 cmp al,41 \
******** jb 00401756 /0-9跳
******** sub al,07
* Referenced by a (U)nconditional or (C)onditional Jump at
Address:
00401756 sub al,30
******** and al,0F
******** and bl,al
******** shl ebx,04
******** loop 0040173B --将注册码6-12位移入ebx
....
******** cmp al,31 \比较第13位
******** jb 00401772 |
******** cmp al,46 |
******** ja 00401772 |是否在1-F,否则死
******** cmp al,40 |
******** ja 00401776 |A-F跳
******** cmp al,3A |
******** jb 00401776 / 0-9跳
* Referenced by a (U)nconditional or (C)onditional Jump at
Address:
00401776 cmp al,41 --0-9跳
******** jb 0040177C
0040177A sub al,07
* Referenced by a (U)nconditional or (C)onditional Jump at
Address:
0040177C sub al,07
******** and al,0F
******** and bl,al
******** mov eax,ebx
******** jmp 0040178B --跳过00401786
* Referenced by a (U)nconditional or (C)onditional Jump at
Address:
00401786 mov eax,FFFFFFFF
跳出call,接下来来到:
******** lea esi, dword ptr [004031BB]
******** add esi, 0000000E --除去注册码前14位移入esi
******** call call 0040172F --跟前面的call一样。
重填注册码_CCG-123456789ABCDEF12
******** xor eax,FFFFFFF
******** je 004012A4
....
******** mov eax,dword ptr [004030E3] --12345678
******** mov edx,dword ptr [004030E7] --ABCDEF12
******** call 00401636 --关键的call。
由于本人太懒,不想循环的算,
所以还是写个算法比较干脆,
幸好伪大哥写了,大家参考一下吧。
******** mov eax,dword ptr [004030EB] --算出的前四位
******** mov eax,dword ptr [004030EF] --后几位
******** xor eax,dword ptr [004030DB] --注册名算出的注册
码前四位‘比较’
******** jne 004012A4
******** xor eax,dword ptr [004030DF]
******** jne 004012A4 后几位比较
******** jmp 004012BD --不要以为成功了^__^
* Referenced by a (U)nconditional or (C)onditional Jump at
Address:
....
******** mov al, byte ptr [esi+04]
******** sub al,0D
******** cmp al,20 --第五位是否为‘-’
******** jne 004012A4
******** mov al, byte ptr [esi+0D]
******** cmp al,2D --第14位是否为‘-’
******** jne 004012A4
******** jmp 004012AC success!!
接下来可以欣赏美丽的画面了。(真的好看!!)
整理一下注册码的格式为:_CCG-XXXXXXXX-XXXXXXXX
