这个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\n",a,b,c,d);
break;
}
}
}
}
}
学习了一下怎么用 随机数