Autor Beitrag
LonghornUser
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 796



BeitragVerfasst: Mo 02.02.04 16:09 
Hallo.

Ich habe mal eine Frage:

Die Erstellung von Cracks ist in letzter Zeit bei meinem Programm stark angewachsen. Anscheinend ist mein Mechanismus Dreck :) (Die Wahrheit ist, ich habe keinen, Ich habe nur für jeden Buchstaben eine Key-Phrase eingefügt) Kennt jemand einen wirklich guten Mechanismus, mit dem er gute Erfahrungen gemacht hat ? (d.h. dass der key auf den namen bezogen ist)

Hoffe auf schnelle Antwort. Danke.

Ciao
Raphael O.
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1596


VS 2013
BeitragVerfasst: Mo 02.02.04 16:34 
sind es keygeneratoren, die erscheinen oder Cracks, die die exe-datei ersetzen??
in zweiterem Fall läge dein Problem nicht am Passworterstellungsprozess sondern am sonstigen Quelltext...

du solltest dir mal verschiedene verschlüsselungsverfahren ansehn.. (ich kenn mich da nicht aus, gab hier im Forum aber shcon öfters Beiträge, die das behandelten... ->mal nach verschlüsselung suchen ;) )
LonghornUser Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 796



BeitragVerfasst: Mo 02.02.04 18:22 
Das ist es ja. Es sind keygens. Sie lesen einfach aus, wie der Key generiert wird und schon gehts :evil:
Nee, ich bräuchte einfach einen Verschlüsselungsmech.
Mit welchem gibts da positive Erfahrungen ?

edit: Oder weiß einer
1.) wie das sog. "Delphi Encryption Compendium" funktioniert ?
2.) eine gute Encryption-Komponente ?

Ciao LHUser
Motzi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2931

XP Prof, Vista Business
D6, D2k5-D2k7 je Prof
BeitragVerfasst: Di 03.02.04 12:26 
Also einen funktionierenden Key-Gen hab ich dir damals auch schon gebaut...! :roll:

1) Ja, ich weiß wie das DEC "funktioniert"
2) ja -> das DEC! ;)

Wo hast du denn deine Probleme mit dem DEC?

_________________
gringo pussy cats - eef i see you i will pull your tail out by eets roots!
LonghornUser Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 796



BeitragVerfasst: Di 03.02.04 14:36 
Ja. Stimmt :D Könntest du mir dann sagen, wie ich einfach mit dem DEC bewerkstelligen kann, dass ich ein Edit und ein Memo habe. In das Edit <Name> kommt der Name und in das Memo dann der erzeugte Key (aus dem Namen. Das ist alles. Mehr brauche ich net. Mit DEC für einen in Sachen Verschlüsselung unerfahrenen Coder scheinbar unmöglich.

Könntest du mir da ma ne kleine Abfolge posten, wie man das macht, weil blicke durch den Wulst an Komponenten nicht durch.
Motzi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2931

XP Prof, Vista Business
D6, D2k5-D2k7 je Prof
BeitragVerfasst: Di 03.02.04 21:45 
Also beim DEC ist ein riesengroßes Demo dabei, dass so ziemlich alle Möglichkeiten mit dem DEC zu arbeiten zeigt...!

Außerdem wie willst du aus dem Namen den Key erzeugen? Mit welchem Algo? Im DEC ist jedem Algo eine eigene Klasse gewidmet über die man den Algo ganz einfach verwenden kann...!

_________________
gringo pussy cats - eef i see you i will pull your tail out by eets roots!
raven_22
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 95

Win XP pro
D7 Enterprise
BeitragVerfasst: Do 12.02.04 11:24 
Ich lach mich hier fast schlapp.
Schon mal dran gedacht, dass hier vielleicht auch mal ein kleiner, gelangweilter Cracker ins Forum schauen könnte ?
Wo möglich schreibst du noch als nächsten, welschen Mechanismus du verwenden willst.
Du vergisst wohl die wichtigste Regel ?
Wenn du willst dass etwas wirklich halbwegs sicher ist, dann Code es von Grund auf selber.
Und benutze keine bereits bekannten Verfahren.
Lass deiner Phantasie freien lauf und schreibe eine Routine, die halbwegs sicher Keys ausspuckt.
Diese Routine, solltest du aber nicht in eine externe Datei oder DLL exportieren.
Bau sie ganz tief in den Programmcode ein.
Außerdem solltest du eines der zahlreichen EXE-Komprimierung und Verschlüsselungstools nutzen.
Auch hier gilt, benutze eines das nicht so bekannt ist.
So braucht der Cracker erstmal etwas zeit, um dieses Verschlüsselungsverfahren zu umgehen.
Natürlich ist kein Verschlüsselungsverfahren absolut sicher, die meisten sind schon länger bekannt.
Demzufolge gibt es auch schon Entschlüsselungssoftware.
Hast du deine EXE überhaupt verschlüsselt ?
Wenn nicht, bist du selber schuld !
Ich würde vielleicht das folgende machen.
Das zu schützende Programm, in eine EXE packen und mit einem Tool verschlüsseln.
Anschließen würde ich eine weitere EXE erzeugen, die nur für die Key-Abfrage und so ist.
Diese zweite EXE, würde ich mit einem anderen Verfahren verschlüsseln.
Zum Schluss könnte man dann noch die erste EXE in der zweiten EXE verstecken.
Dass ganze dürfte für einen Cracker dann so lange dauern, dass er keinen Bock mehr hat.
Sollte dieses Verfahren auch nicht ausreichen, hätte ich noch paar andere Möglichkeiten.
Für den Key, gibt es auch viele Möglichkeiten.
Beispielsweiße könnte man denn Key so generieren, dass alle Zeichen aus dem der Key besteht, eine bestimmte Checksumme bilden müssen. :wink:
Ist diese Checksumme nicht im entsprechenden Bereich, so ist der Key ungültig.
Wenn du deine Key´s selber überprüfen willst, dann schreibe ein kleines Brutal Force Programm.
Damit kannst du schauen, wie lange es dauert und ob dein Verfahren gut genug ist.
Brutal Force ist eine sehr verbreitete Angriffsart, bei der einfach alle möglichen Kombinationen durchprobiert werden. :idea:

Gruß raven 8)

_________________
---_-= raven_22 =-_---
Motzi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2931

XP Prof, Vista Business
D6, D2k5-D2k7 je Prof
BeitragVerfasst: Do 12.02.04 11:40 
Also deine Tipps sind auch nicht unbedingt das wahre..! Eine Exe zu crypten oder zu patchen bringt ziemlich wenig, mit den richtigen Tools ist dieser Schutz innerhalb von Minuten übergangen..
Und warum sollten keine bekannten Algorithmen verwendet werden?

Die einzige Möglichkeit einen halbwegs sicheren Schutz zu entwickeln ist mit Hilfe von polymorphem Code am besten in Kombination einer polymorphen Verschlüsselung... (Hagen hat dazu mal was in der Delphi-Praxis gepostet)

_________________
gringo pussy cats - eef i see you i will pull your tail out by eets roots!
raven_22
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 95

Win XP pro
D7 Enterprise
BeitragVerfasst: Do 12.02.04 12:02 
Danke für diesen Hinweis !
Besagte Tools, sind mir auch nicht wirklich fremd. :?
Warum sollte man keine bekannten Algorithmen verwenden ?
Ist doch ganz einfach, umso bekannter, umso einfacher ist der Algorithmus zu knacken oder zu umgehen. :roll:
Polymorphe Verschlüsselung, darüber hab ich doch schon was gelesen.
Werde ich mir mal genauer anschauen, klingt interessant. :)

Gruß raven 8)

_________________
---_-= raven_22 =-_---
Motzi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2931

XP Prof, Vista Business
D6, D2k5-D2k7 je Prof
BeitragVerfasst: Do 12.02.04 12:10 
Bekannte Algorithmen sind nicht unbedingt einfacher zu knacken oder zu umgehen..! Ganz im Gegenteil.. es gibt nichts sichereres als einen lang bekannten Algorithmus dessen Sicherheit schon x-mal geprüft wurde und der noch immer als sicher gilt! Ein gutes Beispiel: Blowfish - der Algorithmus ist schon ziemlich alt, aber dennoch hat er bis jetzt alle noch so gründlichen Kryptanalysen überstanden.. die einzig Möglichkeit ihn zu knacken ist eine Brute-Force-Attacke die man bei jeder Verschlüsselung (ausgenommen One-Time-Pad) anwenden kann, allerdings ist das eben auch die ineffizienteste Attacke überhaupt und bei einer vernünftigen Schlüssellänge daher auch absolut unrealistisch..!

_________________
gringo pussy cats - eef i see you i will pull your tail out by eets roots!
raven_22
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 95

Win XP pro
D7 Enterprise
BeitragVerfasst: Do 12.02.04 12:42 
OK, ich gebe mich geschlagen.
Du hast ja Recht, ist mir auch bekannt.
Ich meine aber mit Verschlüsselung, die Tools mit den man seine EXE verschlüsseln kann.
Also UPX und wie sie nicht alle heißen !
Dass eine Brute-Force-Attacke nicht sonderlich effektiv ist, ist ja allgemein bekannt. :roll:
Genau gesagt, ist es sehr Zeitraubend und öde.
Passwortlisten sind da schon schneller, aber auch nicht das Gelbe vom Ei.
Die beste Methode ist sicher, wenn man sich den Algorithmus vornimmt.
Algorithmus identifizieren, Arbeitsweiße herausfinden und so weiter.
Nicht dass ich schon derartiges gemacht hätte, ich informiere mich nur so.
Schließlich sollte ein Proger wissen, wogegen er sich schützen sollte und wie. :wink:


Gruß raven 8)

_________________
---_-= raven_22 =-_---
Motzi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2931

XP Prof, Vista Business
D6, D2k5-D2k7 je Prof
BeitragVerfasst: Do 12.02.04 13:01 
Naja, also mit Algo identifizieren, Arbeitsweise herausfinden etc kommst du bei Algorithmen wie Blowfish, IDEA, Rijandel und sonstige auch nicht weit, das haben schon wesentlich klügere Köpfe als du versucht und sind gescheitert..! ;)

Sofern der Schlüssel schlecht gewählt wurde hilft eventuell noch eine Wörterbuch-Attacke, aber sonst gibts nix mehr...

Aber normale symetrische Verschlüsselungsmechanismen die auf einem Schlüssel basieren bringen in so einem Fall auch nciht viel, da ja der Schlüssel in der Exe gespeichert werden muss wodurch das ganze schon wieder wesentlich einfacher zum knacken wird..! Daher auch das was ich vorher geschrieben hab - polymorpher Code kombiniert mit polymorpher Verschlüsselung... ist aber ein ziemlich heftiges Thema!

_________________
gringo pussy cats - eef i see you i will pull your tail out by eets roots!
raven_22
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 95

Win XP pro
D7 Enterprise
BeitragVerfasst: Do 12.02.04 14:06 
Vielen Dank, dass du mein Interesse an polymorphen Codes und polymorpher Verschlüsselung geweckt hast.
Das ist ein sehr interessanten Thema, hast du paar URL´s oder so ?
Ich habe mich mal kurz auf folgender Seite informiert.
homepages.fh-giessen.../Stadelmann/text.htm
Es ist scheinbar nicht so kompliziert, wie es an Anfang klingt.
Polymorph, sagt ja eigentlich schon alles aus.
Du scheinst dich ja ziemlich gut auszukennen, mit derartigen Themen.
Woher hast du dein Wissen, hast du dich nur aus Interesse informiert ?

Gruß raven 8)

_________________
---_-= raven_22 =-_---
Motzi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2931

XP Prof, Vista Business
D6, D2k5-D2k7 je Prof
BeitragVerfasst: Do 12.02.04 19:39 
Links kann ich dir leider keine anbieten...

ich beschäftige mich schon seit längerer Zeit mehr mit dem Thema Kryptographie, daher kenn ich mich auf dem Gebiet auch halbwegs aus (hab auch dementsprechend ein paar Bücher)...
Auf das Thema polymorphe Codes bin ich gestoßen als ich angefangen hab mich eingehender mit ASM zu beschäftigen, allerdings ist es sehr schwer Informationen zu diesem doch eher komplexen Thema zu finden...

_________________
gringo pussy cats - eef i see you i will pull your tail out by eets roots!
obbschtkuche
Gast
Erhaltene Danke: 1



BeitragVerfasst: Do 12.02.04 20:49 
Dazu hab ich mal eine Klasse geschrieben (angefangen):

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:
137:
138:
139:
140:
141:
142:
143:
144:
145:
146:
147:
148:
149:
150:
151:
152:
153:
unit ModCode;

interface

uses
 Windows, SysUtils;

const
 EXE_START = $00400000;
 SRC_START = $00401000;
 SRC_END   = $7fffffff;
 BUFMAX    = 65536;

type
 PDataArray = ^TDataArray;
 TDataArray = array[0..BUFMAX-1] of byte;

 TModMyself = class
 private
  fProcess: DWORD;
  function ReadBufferFromMemory(address: DWORD; var Data: TDataArray): DWORD;
 public
  constructor Create(Process: DWORD); overload;
  constructor Create; overload;

  function Find(data: pointer; length: DWORD): DWORD; overload;
  function Find(data: string): DWORD; overload;
  function WriteBuffer(address: DWORD; const buffer; length: DWORD): boolean;
  function WriteByte(address: DWORD; data: byte): boolean;

  function ReadByte(address: DWORD): byte;
  function ReadWord(address: DWORD): word;
  function ReadDWord(address: DWORD): DWORD;
  function ReadBuffer(address: DWORD; const buffer; length: DWORD): DWORD;
 end;

implementation

{ TModMyself }

function TModMyself.Find(data: pointer; length: DWORD): DWORD;
var
 CurrentAddress: DWORD;
 BytesRead: DWORD;
 memdata: TDataArray;
 i, j: DWORD;
begin
 result := 0;

 // Maximal so lang wie der Buffer
 if length > BUFMAX then
  exit;

 // Am Anfang des Codes anfangen
 CurrentAddress := SRC_START;
 repeat
  // Einen Block einlesen (mit Länge BUFMAX)
  BytesRead:=ReadBufferFromMemory(CurrentAddress, memdata);
  // Nichts gelesen => raus
  if BytesRead = 0 then
   exit;
  // Verhindern, dass "data" nicht gefunden wird, wenn es
  // sich am Ende des Buffers befindet
  if BytesRead > (BUFMAX - length) then
   dec(BytesRead, length);
  // Daten durchsuchen
  for i := 0 To BytesRead-1 do
   if CompareMem(@MemData[i], data, length) then
   begin
    // gefunden :)
    result := CurrentAddress + i;
    exit;
   end;
  inc(CurrentAddress, BytesRead);
 until CurrentAddress>=SRC_END;
end;

constructor TModMyself.Create(Process: DWORD);
begin
 inherited Create;
 // fremder Prozess
 fProcess := Process;
end;

constructor TModMyself.Create;
begin
 inherited;
 // Der eigene Prozess
 fProcess := GetCurrentProcess;
end;

function TModMyself.Find(data: string): DWORD;
begin
 result := Find(@data[1], length(data));
end;

// Daten aus dem Speicher lesen & schreiben
function TModMyself.ReadBuffer(address: DWORD; const buffer;
  length: DWORD): DWORD;
begin
 ReadProcessMemory(fProcess, pointer(address), @buffer, length, result);
end;

function TModMyself.ReadBufferFromMemory(address: DWORD; var Data: TDataArray): DWORD;
begin
 ReadProcessMemory(fProcess, pointer(address), @Data[0], BUFMAX, result);
end;

function TModMyself.ReadByte(address: DWORD): byte;
var
 count: dword;
begin
 ReadProcessMemory(fProcess, pointer(address), @result, 1, count);
end;

function TModMyself.ReadDWord(address: DWORD): DWORD;
var
 count: dword;
begin
 ReadProcessMemory(fProcess, pointer(address), @result, 4, count);
end;

function TModMyself.ReadWord(address: DWORD): word;
var
 count: dword;
begin
 ReadProcessMemory(fProcess, pointer(address), @result, 2, count);
end;

function TModMyself.WriteBuffer(address: DWORD; const buffer;
  length: DWORD): boolean;
var
 count: cardinal;
 oldprotect:dword;
begin
 VirtualProtect(pointer(address), length, PAGE_EXECUTE_READWRITE, @oldprotect);
 WriteProcessMemory(fProcess, pointer(address), @buffer, length, count);
 VirtualProtect(pointer(address), length, oldprotect, @oldprotect);
 result := count = length;
end;

function TModMyself.WriteByte(address: DWORD; data: byte): boolean;
var
 count: cardinal;
 oldprotect:dword;
begin
 VirtualProtect(pointer(address), 1, PAGE_EXECUTE_READWRITE, @oldprotect);
 WriteProcessMemory(fProcess, pointer(address), @data, sizeof(data), count);
 VirtualProtect(pointer(address), sizeof(data), oldprotect, @oldprotect);
 result := count = 1;
end;

end.


Dann musst du dir noch eine Markierung setzen. z.B.:


ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
asm
 jmp @@foo
 DB $12, $74, $A7, $2C, $7D, $C7, $3E
 @@foo:
end;


das jmp @@foo dient dazu dass der code auf jeden Fall übersprungen wird, sonst würde das ganze mit 100%iger wahrscheinlichkeit schiefgehen.

mit Find() kannst du die Markierung dann wiederfinden (in diesem Fall: modmyself.find(#$12#$72#$A7...);
und mit modmyself.WriteByte(modmyself.find(), wert);

wenn du z.B. eine Bedingung bei einer if-anweisung umkehren willst:
(z.B:)

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
function test2(a: byte): integer;
begin
 if a = 0 then
 begin
  asm
   // Die Markierung von oben 
   jmp @@foo
   DB $12, $74, $A7, $2C, $7D, $C7, $3E
   @@foo:
  end;
  result := 1;
 end
 else result := 2;
end;


dann findest du zuerst die Markierung und kannst danach die Bedingung umkehren:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
var
 pos: integer;

...

 with TModMyself.Create do
 try
  // Wieder die Markierung
  pos := find(#$12#$74#$A7#$2C#$7D#$C7#$3E);
  // Hier befindet sich der Benötigte Offset 4 Bytes vor der Markierung
  // JZ = Jump If Zero
  // JNZ = Jump if not Zero
  if ReadByte(pos-4) = $74 then // JZ
   WriteByte(pos-4, $75) // JNZ
  else
   WriteByte(pos-4, $74); // JZ
 finally
  free;
 end;


oder der Weg ohne die Markierung: (hier wird die Position von Test2 im code genutzt und von da ausgegangen)

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
 with TModMyself.Create do
 try
  pos := dword(@test2)+$11;
  if ReadByte(pos-4) = $74 then // JZ
   WriteByte(pos-4, $75) // JNZ
  else
   WriteByte(pos-4, $74); // JZ
 finally
  free;
 end;


Hierbei wird dir in jedem Fall das CPU-Fenster behilflich sein. Am besten setzt du einen Brakepoint auf die Stelle die du ändern willst und drückst dann [STRG]+[ALT]+[C]

user defined image

// Edit:

mit fremden Prozessen hab ichs noch nicht getestet
rizla
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 417
Erhaltene Danke: 2

XP
FPC mit Lazarus
BeitragVerfasst: Fr 23.07.04 09:58 
Vegesst Softice nicht!
Damit kann jeder den erzeugten Key für den Namen einfach rausfischen ;) (aka serialfishing)
jeder software schutz ist *LEIDER* auch auszuhebeln <sic>
*rizla*
raziel
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2453

Arch Linux
JS (WebStorm), C#, C++/CLI, C++ (VS2013)
BeitragVerfasst: Fr 23.07.04 13:58 
rizla hat folgendes geschrieben:
Vegesst Softice nicht!
:roll:
rizla hat folgendes geschrieben:
Damit kann jeder den erzeugten Key für den Namen einfach rausfischen ;) (aka serialfishing)
Nicht zwingend. Denn wenn man den Key hasht und diesen Hash mit einem vorhergehashten Keyhash verha... äähhh vergleicht, dann hat man "nur" den Hash und keinen Key -> Patchen.
rizla hat folgendes geschrieben:
jeder software schutz ist *LEIDER* auch auszuhebeln <sic>
dito. Die Frage ist nur: Wie aufwendig ist es und lohnt sich der Aufwand?

raziel

_________________
JSXGraph
Udontknow
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2596

Win7
D2006 WIN32, .NET (C#)
BeitragVerfasst: Fr 23.07.04 14:18 
Zitat:
Nicht zwingend. Denn wenn man den Key hasht und diesen Hash mit einem vorhergehashten Keyhash verha... äähhh vergleicht, dann hat man "nur" den Hash und keinen Key -> Patchen.

Mit einem Keyhash vergleichen ist ja noch schön und gut, aber meist sollen doch nicht nur einer sondern tausende Keys gültig sein. Willst du die Hashes aller Schlüssel mit herumschleppen?

Cu,
Udontknow
rizla
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 417
Erhaltene Danke: 2

XP
FPC mit Lazarus
BeitragVerfasst: Fr 23.07.04 14:20 
Titel: und wie siehts aus mit
sagen wir der hash des real key steht in eax und der "vorgehashte" wert in dx, was hält jemanden davon ab, den neu gehashten wert = dem "vorgehashten" wert zu setzen ?
beim cmp eax, edx kommt dann eh ein zero raus und alles war wieder umsonst ;)
für's prog ist es dann im grunde egal, denn beide werte sind gleich und damit <serial_correct = true>
<sic>
gruß rizla

Edit: sorry, natürlich nicht dx sondern edx.. ach ja, 32bit..

Moderiert von user profile iconUdontknow: Beiträge zusammengefasst.
Udontknow
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2596

Win7
D2006 WIN32, .NET (C#)
BeitragVerfasst: Fr 23.07.04 14:26 
Es ging ja momentan um das Erzeugen eines Keygens, daß natürlich auch gekrackt werden kann, ist klar.

Cu,
Udontknow