这个KEYGENME 有点简单 但是写注册机有点难度 要求写出随机的注册码
大体流程: 00401000 >/$ 6A 00 push 0x0 ; /Style = MB_OK|MB_APPLMODAL 00401002 |. 68 00304000 push KeygenMe.00403000 ; |Title = "ItSecurity.ma KeygenMe (RESTRICTED PATCHING)" 00401007 |. 68 2D304000 push KeygenMe.0040302D ; |Text = "Itsecurity.ma KeygenME Coded by Souhail Hammou ..." 0040100C |. 6A 00 push 0x0 ; |hOwner = NULL 0040100E |. E8 19020000 call <jmp.&user32.MessageBoxA> ; MessageBoxA 00401013 |. 68 60304000 push KeygenMe.00403060 ; ASCII "Please type your e-mail: " 00401018 |. E8 17020000 call KeygenMe.00401234 0040101D |. 68 C8000000 push 0xC8 00401022 |. 68 60314000 push KeygenMe.00403160 ; ASCII "abcdef@qq.com"这是我输入的 00401027 |. E8 40020000 call KeygenMe.0040126C 0040102C |. 8D05 60314000 lea eax,dword ptr ds:[0x403160] 00401032 |. 33D2 xor edx,edx 00401034 |. 33C9 xor ecx,ecx 00401036 |> 8A18 /mov bl,byte ptr ds:[eax] ; 计算@前有多少位 00401038 |. 80FB 40 |cmp bl,0x40 0040103B |. 74 0C |je XKeygenMe.00401049 0040103D |. 38D3 |cmp bl,dl 0040103F |. 0F84 A6010000 |je KeygenMe.004011EB 00401045 |. 41 |inc ecx 00401046 |. 40 |inc eax 00401047 |.^ EB ED jmp XKeygenMe.00401036 00401049 |> 80F9 03 cmp cl,0x3 0040104C |. 0F8E B9010000 jle KeygenMe.0040120B ; 小于3位就失败 00401052 |. 68 7A304000 push KeygenMe.0040307A ; ASCII "Please Enter a valid serial: " 00401057 |. E8 D8010000 call KeygenMe.00401234 ; 再输入假码 需要23位 0040105C |. 68 C8000000 push 0xC8 00401061 |. 68 84414000 push KeygenMe.00404184 ; ASCII "12345678901234567890123" 00401066 |. E8 01020000 call KeygenMe.0040126C 0040106B |. 68 84414000 push KeygenMe.00404184 ; /String = "12345678901234567890123" 00401070 |. E8 C3020000 call <jmp.&kernel32.lstrlenA> ; lstrlenA 00401075 |. 83F8 17 cmp eax,0x17 ; 不等于23位就失败 00401078 |. 0F85 4D010000 jnz KeygenMe.004011CB 0040107E |. 8D05 84414000 lea eax,dword ptr ds:[0x404184] 00401084 |. 33DB xor ebx,ebx 00401086 |. 8B18 mov ebx,dword ptr ds:[eax] 00401088 |. 81FB 4954532D cmp ebx,0x2D535449 ; 前4位ITS- 0040108E |. 0F85 37010000 jnz KeygenMe.004011CB 00401094 |. 83C0 08 add eax,0x8 00401097 |. 8038 2D cmp byte ptr ds:[eax],0x2D ; 第9位 - 0040109A |. 0F85 2B010000 jnz KeygenMe.004011CB 004010A0 |. 33C9 xor ecx,ecx 004010A2 |. 33D2 xor edx,edx 004010A4 |. B1 03 mov cl,0x3 004010A6 |. B2 05 mov dl,0x5 004010A8 |> 03C2 /add eax,edx ; 14位 19位 004010AA |. FEC9 |dec cl 004010AC |. 8038 2D |cmp byte ptr ds:[eax],0x2D ; - 004010AF |.^ 74 F7 je XKeygenMe.004010A8 004010B1 |. 80F9 00 cmp cl,0x0 004010B4 |. 0F85 11010000 jnz KeygenMe.004011CB 004010BA |. 8D05 84414000 lea eax,dword ptr ds:[0x404184] 004010C0 |. 83C0 04 add eax,0x4 004010C3 |. 8B18 mov ebx,dword ptr ds:[eax] ; 5-8位 004010C5 |. 8D0D A8514000 lea ecx,dword ptr ds:[0x4051A8] 004010CB |. 8919 mov dword ptr ds:[ecx],ebx 004010CD |. 83C0 05 add eax,0x5 004010D0 |. 8B18 mov ebx,dword ptr ds:[eax] ; 10-13位 004010D2 |. 8D0D CC614000 lea ecx,dword ptr ds:[0x4061CC] 004010D8 |. 8919 mov dword ptr ds:[ecx],ebx 004010DA |. 83C0 05 add eax,0x5 004010DD |. 8B18 mov ebx,dword ptr ds:[eax] ; 15-18 004010DF |. 8D0D F0714000 lea ecx,dword ptr ds:[0x4071F0] 004010E5 |. 8919 mov dword ptr ds:[ecx],ebx 004010E7 |. 83C0 05 add eax,0x5 ; 20-23 004010EA |. 8B18 mov ebx,dword ptr ds:[eax] 004010EC |. 8D0D 14824000 lea ecx,dword ptr ds:[0x408214] 004010F2 |. 8919 mov dword ptr ds:[ecx],ebx 004010F4 |. 33C0 xor eax,eax 004010F6 |. 33DB xor ebx,ebx 004010F8 |. 33D2 xor edx,edx 004010FA |. 33C9 xor ecx,ecx 004010FC |. 8D05 A8514000 lea eax,dword ptr ds:[0x4051A8] 00401102 |. 8B00 mov eax,dword ptr ds:[eax] ; EAX 004051A8 ASCII "5678" 00401104 |. 2D 30303030 sub eax,0x30303030 ; -0x30 00401109 |. 8D15 A8514000 lea edx,dword ptr ds:[0x4051A8] 0040110F |. 8902 mov dword ptr ds:[edx],eax 00401111 |. 8A1A mov bl,byte ptr ds:[edx] 00401113 |. 8A4A 01 mov cl,byte ptr ds:[edx+0x1] 00401116 |. 02D9 add bl,cl ; 1 2 相加 00401118 |. 8A4A 02 mov cl,byte ptr ds:[edx+0x2] 0040111B |. 02D9 add bl,cl ; +3位 0040111D |. 8A4A 03 mov cl,byte ptr ds:[edx+0x3] 00401120 |. 02D9 add bl,cl ; 加4位 00401122 |. 80FB 10 cmp bl,0x10 ; 比较 x010 00401125 |. 0F85 A0000000 jnz KeygenMe.004011CB 0040112B |. 8D15 CC614000 lea edx,dword ptr ds:[0x4061CC] 00401131 |. 8A1A mov bl,byte ptr ds:[edx] ; 0123 00401133 |. 80FB 4F cmp bl,0x4F ; 大写O 00401136 |. 0F85 8F000000 jnz KeygenMe.004011CB 0040113C |. 8A4A 01 mov cl,byte ptr ds:[edx+0x1] 0040113F |. 02D9 add bl,cl ; 相加 00401141 |. 8A4A 02 mov cl,byte ptr ds:[edx+0x2] 00401144 |. 02D9 add bl,cl ; 加3位 00401146 |. 8A4A 03 mov cl,byte ptr ds:[edx+0x3] 00401149 |. 2AD9 sub bl,cl ; 减4位 0040114B |. 80FB 8F cmp bl,0x8F ; 比较0x8F 0040114E |. 75 7B jnz XKeygenMe.004011CB 00401150 |. 8D05 F0714000 lea eax,dword ptr ds:[0x4071F0] 00401156 |. 8B00 mov eax,dword ptr ds:[eax] ; 5678 00401158 |. 2D 30303030 sub eax,0x30303030 ; -0x30 0040115D |. 8D15 F0714000 lea edx,dword ptr ds:[0x4071F0] 00401163 |. 8902 mov dword ptr ds:[edx],eax 00401165 |. 8A1A mov bl,byte ptr ds:[edx] 00401167 |. 8A4A 01 mov cl,byte ptr ds:[edx+0x1] 0040116A |. 02D9 add bl,cl ; 12位相加 0040116C |. 8A4A 02 mov cl,byte ptr ds:[edx+0x2] 0040116F |. 02D9 add bl,cl ; 加3位 00401171 |. 8A4A 03 mov cl,byte ptr ds:[edx+0x3] 00401174 |. 80E9 02 sub cl,0x2 ; 4位-0x2 00401177 |. 02D9 add bl,cl ; 相加 00401179 |. 80FB 10 cmp bl,0x10 ; 比较0x10 0040117C |. 75 4D jnz XKeygenMe.004011CB 0040117E |. 8D05 14824000 lea eax,dword ptr ds:[0x408214] 00401184 |. 8B00 mov eax,dword ptr ds:[eax] ; 0123 00401186 |. 2D 30303030 sub eax,0x30303030 0040118B |. 8D15 14824000 lea edx,dword ptr ds:[0x408214] 00401191 |. 8902 mov dword ptr ds:[edx],eax 00401193 |. 8A1A mov bl,byte ptr ds:[edx] 00401195 |. 8A4A 01 mov cl,byte ptr ds:[edx+0x1] 00401198 |. 02D9 add bl,cl ; 12+ 0040119A |. 8A4A 02 mov cl,byte ptr ds:[edx+0x2] 0040119D |. 02D9 add bl,cl ; +3 0040119F |. 8A4A 03 mov cl,byte ptr ds:[edx+0x3] 004011A2 |. 02D9 add bl,cl ; +4 004011A4 |. 80FB 12 cmp bl,0x12 ; 比较0x12 004011A7 |. 75 22 jnz XKeygenMe.004011CB 004011A9 |. EB 00 jmp XKeygenMe.004011AB 004011AB |> 68 98304000 push KeygenMe.00403098 ; ASCII "Valid Serial (Press Enter To Exit)" 004011B0 |. E8 7F000000 call KeygenMe.00401234 004011B5 |. 68 C8000000 push 0xC8 004011BA |. 68 38924000 push KeygenMe.00409238 004011BF |. E8 A8000000 call KeygenMe.0040126C 004011C4 |. 6A 00 push 0x0 ; /ExitCode = 0 004011C6 |. E8 67010000 call <jmp.&kernel32.ExitProcess> ; ExitProcess 004011CB |> 68 BB304000 push KeygenMe.004030BB ; ASCII "Invalid Serial (Press Enter To Exit)" 004011D0 |. E8 5F000000 call KeygenMe.00401234 004011D5 |. 68 C8000000 push 0xC8 004011DA |. 68 38924000 push KeygenMe.00409238 004011DF |. E8 88000000 call KeygenMe.0040126C 004011E4 |. 6A 00 push 0x0 ; /ExitCode = 0 004011E6 |. E8 47010000 call <jmp.&kernel32.ExitProcess> ; ExitProcess 004011EB |> 68 E0304000 push KeygenMe.004030E0 ; ASCII "Please Insert a Valid Mail Address (Press Enter To Exit)" 004011F0 |. E8 3F000000 call KeygenMe.00401234 004011F5 |. 68 C8000000 push 0xC8 004011FA |. 68 38924000 push KeygenMe.00409238 004011FF |. E8 68000000 call KeygenMe.0040126C 00401204 |. 6A 00 push 0x0 ; /ExitCode = 0 00401206 |. E8 27010000 call <jmp.&kernel32.ExitProcess> ; ExitProcess 0040120B |> 68 19314000 push KeygenMe.00403119 ; ASCII "Please Enter an email with 4 Characters minimum (Press Enter to Exit)" ITS-5551-O@11-5553-5553
代码:
#include <iostream.h> #include "StdAfx.h" #include <stdlib.h> #include <time.h> int GetRand() { int a = rand()%126; if (a <=0x20) { a += 0x20; } return a; } void main() { char xx[]= "ITS-"; char Ochar = 'O'; //ITS-5551-O@11-5553-5553 srand( (unsigned)time( NULL ) ); for (int i =0 ;i<10;i++) { printf(xx); while (1)//1 { int a = GetRand(); int b = GetRand(); int c = GetRand(); int d = GetRand(); if ((a-0x30>=0)&&(b-0x30>=0)&&(c-0x30>=0)&&(d-0x30>=0)) { if ((a-0x30)+(b-0x30)+(c-0x30)+(d-0x30)==0x10) { printf("%c%c%c%c-",a,b,c,d); break; } } } printf("%c",Ochar); while (1)//2 { int b = GetRand(); int c = GetRand(); int d = GetRand(); if ('O'+b+c-d==0x8F) { printf("%c%c%c-",b,c,d); break; } } while (1)//3 { int a = GetRand(); int b = GetRand(); int c = GetRand(); int d = GetRand(); if ((a-0x30>=0)&&(b-0x30>=0)&&(c-0x30>=0)&&(d-0x30>=0)) { if ((a-0x30)+(b-0x30)+(c-0x30)+(d-0x30)-0x2==0x10) { printf("%c%c%c%c-",a,b,c,d); break; } } } while (1)//4 { int a = GetRand(); int b = GetRand(); int c = GetRand(); int d = GetRand(); if ((a-0x30>=0)&&(b-0x30>=0)&&(c-0x30>=0)&&(d-0x30>=0)) { if ((a-0x30)+(b-0x30)+(c-0x30)+(d-0x30)==0x12) { printf("%c%c%c%c ",a,b,c,d); break; } } } } }学习了一下怎么用 随机数