die einzelnen stellen werden in rechnungen mit einbezogen und es wird überprüft ob das ergebnis 'richtig ist'.
um jetzt mal ein leichtes beispiel zu wählen (wie es wahrscheinlich nicht mehr benutzt wird):
die 5te Stelle des Key muss ungerade sein. es wird also überprüft:
x = Zahl an 5ter Stelle;
y = x mod 2;
if y==1 return true;
um solche algorithmen auslesen zu können, musst du assembler-code lesen können. hier habe ich mal den programmcode eines keygens gefunden:
Code:
// SC_keygen.cpp : main project file.
#include "stdafx.h"
#include <iostream>
#include <iso646.h>
#include <stdlib.h>
#include <ctime>
#include <vector>
using namespace std;
void generate(vector<int>& s, int& x, int& d)
{
//Stores random digits 0-9 in a vector
for (int i = 0; i < 12; i++)
{
s[i] = rand() % 10;
}
//Main algorithm
for(int i = 0; i < 12; i++)
{
d = (2 * x) xor s[i];
x = x + d;
}
x = x % 10;
for(int i = 0; i < 12; i++)
{
if(i==4)
{
cout << '-' << s[i];
}
else if (i==9)
{
cout << '-' << s[i];
}
else cout<<s[i];
}
cout << x;
x=3;
d=0;
}
int main()
{
srand(static_cast<int>(time(0)));
vector<int> serial(12);
int eax = 3;
int edi = 0;
int a;
bool no_quit = true;
cout << "Starcraft CD keygen\n";
generate(serial,eax,edi);
do
{
cout << "\nGenerate another one? (yes=1/no=0)";
cin >> a;
if (a==1) generate(serial,eax,edi);
else no_quit=false;
}
while(no_quit);
return 0;
}