习题八 echap518.exe 算法分析
至学习CRACKER以来唯一找出其算法的一个Crackme,兴奋之余,发上来请个位看看有什么错误之处,有错误之处请各位大侠指正...
Crackme下载地址:http://dcse.sina8.net/echap518.exe
用OD载入,查找字符参考,找到One of the Details you entered was wrong向上,来到
004014F5 |. E8 AA030000 call <jmp.&MFC42.#3876>
004014FA |. 8945 EC mov dword ptr ss:[ebp-14],eax
004014FD |. 837D EC 05 cmp dword ptr ss:[ebp-14],5
00401501 |. 7F 05 jg short echap518.00401508 ; 看name是否大于5位
00401503 |. E9 BB000000 jmp echap518.004015C3 ; 小于则直接出错
00401508 |> 8B4D E0 mov ecx,dword ptr ss:[ebp-20]
0040150B |. 83C1 60 add ecx,60
0040150E |. E8 91030000 call <jmp.&MFC42.#3876>
00401513 |. 8945 E8 mov dword ptr ss:[ebp-18],eax
00401516 |. 837D E8 05 cmp dword ptr ss:[ebp-18],5 ; 看Serial是否大于5位
0040151A |. 7F 05 jg short echap518.00401521 ; 小于则直接出错
0040151C |. E9 A2000000 jmp echap518.004015C3
00401521 |> 8B45 E0 mov eax,dword ptr ss:[ebp-20]
00401524 |. 05 E0000000 add eax,0E0
00401529 |. 50 push eax
0040152A |. 8B4D E0 mov ecx,dword ptr ss:[ebp-20]
0040152D |. 81C1 A00000>add ecx,0A0
00401533 |. E8 66030000 call <jmp.&MFC42.#3874> ; ?这几个还不知道什么用
00401538 |. 8B4D E0 mov ecx,dword ptr ss:[ebp-20]
0040153B |. 81C1 E40000>add ecx,0E4
00401541 |. 51 push ecx
00401542 |. 8B4D E0 mov ecx,dword ptr ss:[ebp-20]
00401545 |. 83C1 60 add ecx,60
00401548 |. E8 51030000 call <jmp.&MFC42.#3874> ; ?这几个还不知道什么用
0040154D |. 8B55 E0 mov edx,dword ptr ss:[ebp-20]
00401550 |. 81C2 E00000>add edx,0E0
00401556 |. 52 push edx
00401557 |. 8D4D E4 lea ecx,dword ptr ss:[ebp-1C]
0040155A |. E8 39030000 call <jmp.&MFC42.#858> ; ?这几个还不知道什么用
0040155F |. 8B45 E0 mov eax,dword ptr ss:[ebp-20]
00401562 |. 05 E4000000 add eax,0E4
00401567 |. 50 push eax
00401568 |. 8D4D F0 lea ecx,dword ptr ss:[ebp-10]
0040156B |. E8 28030000 call <jmp.&MFC42.#858>
00401570 |. 33C0 xor eax,eax ; 计算开始
00401572 |. 33DB xor ebx,ebx
00401574 |. 33C9 xor ecx,ecx
00401576 |. B9 01000000 mov ecx,1 ; cl的值
0040157B |. 33D2 xor edx,edx
0040157D |. 8B45 E4 mov eax,dword ptr ss:[ebp-1C] ; name放入EAX
00401580 |> 8A18 /mov bl,byte ptr ds:[eax] ; 取一位name
00401582 |. 32D9 |xor bl,cl ; 跟cl xor 运算
00401584 |. 8818 |mov byte ptr ds:[eax],bl ; 算出的name放回EAX
00401586 |. 41 |inc ecx ; ecx指针加1
00401587 |. 40 |inc eax ; eax指针加1
00401588 |. 8038 00 |cmp byte ptr ds:[eax],0 ; 比较是否到name的最后一位
0040158B |.^ 75 F3 \jnz short echap518.00401580 ; 没到最后一位,跳回继续XOR运算
0040158D |. 33C0 xor eax,eax
0040158F |. 33DB xor ebx,ebx
00401591 |. 33C9 xor ecx,ecx
00401593 |. B9 0A000000 mov ecx,0A ; cl的值
00401598 |. 33D2 xor edx,edx
0040159A |. 8B45 F0 mov eax,dword ptr ss:[ebp-10] ; 取Serial放入EAX
0040159D |> 8A18 /mov bl,byte ptr ds:[eax] ; 取一位Serial
0040159F |. 32D9 |xor bl,cl ; 跟cl xor 运算
004015A1 |. 8818 |mov byte ptr ds:[eax],bl ; 算出的Serial放回EAX
004015A3 |. 41 |inc ecx ; ecx指针加1
004015A4 |. 40 |inc eax ; eax指针加1
004015A5 |. 8038 00 |cmp byte ptr ds:[eax],0 ; 比较是否到Serial的最后一位
004015A8 |.^ 75 F3 \jnz short echap518.0040159D ; 没到最后一位,跳回继续XOR运算
004015AA |. 8B45 E4 mov eax,dword ptr ss:[ebp-1C] ; 计算后的name
004015AD |. 8B55 F0 mov edx,dword ptr ss:[ebp-10] ; 计算后的Serial
004015B0 |> 33C9 /xor ecx,ecx
004015B2 |. 8A18 |mov bl,byte ptr ds:[eax] ; 取计算后的name的一位
004015B4 |. 8A0A |mov cl,byte ptr ds:[edx] ; 取计算后的Serial的一位
004015B6 |. 3AD9 |cmp bl,cl ; 比较
004015B8 |. 75 09 |jnz short echap518.004015C3 ; 不等则出错
004015BA |. 40 |inc eax ; eax指针加1
004015BB |. 42 |inc edx ; edx指针加1
004015BC |. 8038 00 |cmp byte ptr ds:[eax],0 ; 比较是否到最后一位
004015BF |.^ 75 EF \jnz short echap518.004015B0 ; 继续比较
004015C1 |. EB 16 jmp short echap518.004015D9 ; 跳到注册成功
004015C3 |> 6A 00 push 0
004015C5 |. 68 6C304000 push echap518.0040306C ; ASCII "ERROR"
004015CA |. 68 40304000 push echap518.00403040 ; ASCII "One of the Details you entered was wrong"
004015CF |. 8B4D E0 mov ecx,dword ptr ss:[ebp-20]
004015D2 |. E8 BB020000 call <jmp.&MFC42.#4224>
004015D7 |. EB 14 jmp short echap518.004015ED
004015D9 |> 6A 00 push 0
004015DB |. 68 34304000 push echap518.00403034 ; ASCII "YOU DID IT"
004015E0 |. 68 20304000 push echap518.00403020 ; ASCII "Well done,Cracker"
004015E5 |. 8B4D E0 mov ecx,dword ptr ss:[ebp-20]
假设name为:abcdef
Serial为:ghijkl
把
a xor 1 跟 g xor A 比较
b xor 2 跟 h xor B 比较
c xor 3 跟 i xor C 比较
d xor 4 跟 j xor D 比较
e xor 5 跟 k xor E 比较
f xor 6 跟 l xor F 比较
g=A xor 1 xor a
h=B xor 2 xor b
i=C xor 3 xor c
j=D xor 4 xor d
k=E xor 5 xor e
l=F xor 6 xor f
可以算出:
name:cracker
Serial:h{nj`le
唉,俺不会写注册机,有错误之处请各位大侠指正...
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课