Einzelnen Beitrag anzeigen
Ungelesen 16.02.11, 16:01   #3
Zeodos
Mitglied
 
Registriert seit: May 2010
Beiträge: 403
Bedankt: 224
Zeodos ist noch neu hier! | 0 Respekt Punkte
Standard

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;
}
Zeodos ist offline   Mit Zitat antworten