算法比較簡單,算法也比較經典。
原作者的註冊算法好像有點問題,因爲0-9數字間的任意兩個數相加不會等於6D。
還是帖出來。
00450062 55 push ebp
00450063 68 8D014500 push KeyGenMe.0045018D
00450068 64:FF30 push dword ptr fs:[eax]
0045006B 64:8920 mov dword ptr fs:[eax],esp
0045006E 8D55 F8 lea edx,dword ptr ss:[ebp-8]
00450071 8B45 FC mov eax,dword ptr ss:[ebp-4]
00450074 8B80 00030000 mov eax,dword ptr ds:[eax+300]
0045007A E8 D9F2FDFF call KeyGenMe.0042F358 ; 讀取用戶名
0045007F 8B45 F8 mov eax,dword ptr ss:[ebp-8]
00450082 E8 4940FBFF call KeyGenMe.004040D0 ; 讀取用戶名的長度
00450087 8945 F0 mov dword ptr ss:[ebp-10],eax
0045008A 837D F0 02 cmp dword ptr ss:[ebp-10],2 ; 如果用戶名的長度小於2,就死了
0045008E 0F8C DE000000 jl KeyGenMe.00450172
00450094 8D55 F4 lea edx,dword ptr ss:[ebp-C]
00450097 8B45 FC mov eax,dword ptr ss:[ebp-4]
0045009A 8B80 08030000 mov eax,dword ptr ds:[eax+308]
004500A0 E8 B3F2FDFF call KeyGenMe.0042F358 ; 讀取輸入的註冊碼
004500A5 8B45 F4 mov eax,dword ptr ss:[ebp-C] ; 存放eax中
004500A8 E8 2340FBFF call KeyGenMe.004040D0 ; 讀取假註冊碼的長度
004500AD 8945 EC mov dword ptr ss:[ebp-14],eax
004500B0 837D EC 0A cmp dword ptr ss:[ebp-14],0A ; 如果註冊碼的長度不等於10,死
004500B4 0F85 B8000000 jnz KeyGenMe.00450172 ; 跳轉
004500BA 8B45 EC mov eax,dword ptr ss:[ebp-14]
004500BD 85C0 test eax,eax ; 判斷eax是否爲空
004500BF 7E 34 jle short KeyGenMe.004500F5 ; 大於則跳
004500C1 8945 E4 mov dword ptr ss:[ebp-1C],eax
004500C4 C745 E8 01000000 mov dword ptr ss:[ebp-18],1 ; 賦值1
004500CB 8B45 F4 mov eax,dword ptr ss:[ebp-C] ; 假註冊碼
004500CE 8B55 E8 mov edx,dword ptr ss:[ebp-18]
004500D1 807C10 FF 30 cmp byte ptr ds:[eax+edx-1],30 ; 如果小於30H,就死
004500D6 0F82 96000000 jb KeyGenMe.00450172
004500DC 8B45 F4 mov eax,dword ptr ss:[ebp-C]
004500DF 8B55 E8 mov edx,dword ptr ss:[ebp-18]
004500E2 807C10 FF 39 cmp byte ptr ds:[eax+edx-1],39 ; 如果大於39H,死
004500E7 0F87 85000000 ja KeyGenMe.00450172
004500ED FF45 E8 inc dword ptr ss:[ebp-18] ; 賦值+1
004500F0 FF4D E4 dec dword ptr ss:[ebp-1C] ; 自減
004500F3 ^ 75 D6 jnz short KeyGenMe.004500CB ; 循環判斷註冊碼是否爲0-9之間
004500F5 8B45 F4 mov eax,dword ptr ss:[ebp-C] ; 讀取假註冊碼
004500F8 0FB600 movzx eax,byte ptr ds:[eax] ; 讀取假註冊碼的第1位
004500FB 8B55 F4 mov edx,dword ptr ss:[ebp-C] ; 讀取假註冊碼
004500FE 0FB652 05 movzx edx,byte ptr ds:[edx+5] ; 讀假註冊碼的第6位
00450102 03C2 add eax,edx ; eax=eax+edx
00450104 83F8 6D cmp eax,6D ; 如果eax不等於6D則跳(m),數字加數字不可能等於6D
00450107 75 69 jnz short KeyGenMe.00450172
00450109 8B45 F4 mov eax,dword ptr ss:[ebp-C] ; 讀取假註冊碼
0045010C 0FB640 01 movzx eax,byte ptr ds:[eax+1] ; 讀取假註冊碼的第2位
00450110 8B55 F4 mov edx,dword ptr ss:[ebp-C] ; 讀取假註冊碼
00450113 0FB652 06 movzx edx,byte ptr ds:[edx+6] ; 讀取假註冊碼的第7位
00450117 03C2 add eax,edx ; eax=eax+edx
00450119 83F8 67 cmp eax,67 ; 如果eax不等於67H,死
0045011C 75 54 jnz short KeyGenMe.00450172
0045011E 8B45 F4 mov eax,dword ptr ss:[ebp-C] ; 讀取假註冊碼
00450121 0FB640 02 movzx eax,byte ptr ds:[eax+2] ; 假註冊碼的第3位
00450125 8B55 F4 mov edx,dword ptr ss:[ebp-C] ; 假註冊碼
00450128 0FB652 07 movzx edx,byte ptr ds:[edx+7] ; 假註冊碼的第8位
0045012C 03C2 add eax,edx ; eax=eax+edx
0045012E 83F8 69 cmp eax,69 ; 如果eax不等於69H,死
00450131 75 3F jnz short KeyGenMe.00450172
00450133 8B45 F4 mov eax,dword ptr ss:[ebp-C] ; 讀取假註冊碼
00450136 0FB640 03 movzx eax,byte ptr ds:[eax+3] ; 讀取假註冊碼的第4位
0045013A 8B55 F4 mov edx,dword ptr ss:[ebp-C] ; 讀取假註冊碼
0045013D 0FB652 08 movzx edx,byte ptr ds:[edx+8] ; 讀取假註冊碼的第9位
00450141 03C2 add eax,edx ; eax=eax+edx
00450143 83F8 70 cmp eax,70 ; 如果eax不等於70H,死
00450146 75 2A jnz short KeyGenMe.00450172
00450148 8B45 F4 mov eax,dword ptr ss:[ebp-C] ; 讀取假註冊碼
0045014B 0FB640 04 movzx eax,byte ptr ds:[eax+4] ; 讀註冊碼的第5位
0045014F 8B55 F4 mov edx,dword ptr ss:[ebp-C] ; 讀取假註冊碼
00450152 0FB652 09 movzx edx,byte ptr ds:[edx+9] ; 讀取假註冊碼的第10位
00450156 F7EA imul edx ; eax=eax*edx
00450158 3D 8C0A0000 cmp eax,0A8C ; 如果eax不等於0A8CH,死
0045015D 75 13 jnz short KeyGenMe.00450172 ; 跳轉的地方
0045015F 6A 40 push 40 ; 註冊成功的地方
00450161 68 98014500 push KeyGenMe.00450198 ; ASCII "Congratulations"
00450166 68 A8014500 push KeyGenMe.004501A8 ; ASCII "Good job,man!"
0045016B 6A 00 push 0
0045016D E8 2E63FBFF call <jmp.&user32.MessageBoxA> ; 消息提示框
00450172 33C0 xor eax,eax ; eax清零
00450174 5A pop edx
00450175 59 pop ecx
00450176 59 pop ecx
00450177 64:8910 mov dword ptr fs:[eax],edx
算法還不錯,卻有點問題。唯一的是爆破。
就分析到這。