Autor Beitrag
Palmetshofer
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 44



BeitragVerfasst: Mi 28.04.04 15:58 
Also ich hab mal versucht eine DLL für einen "Software-Schutz" zu programmiern und was
dabei entstanden ist könnt ihr euch ja anschaun.

Eine Dll dient als keygenerator:

Wird über arrays "verschlüsselt"
Vorgesehen sind Name, ein ActivationKey und die Seriennummer

Die andere Dll dient zur validierung.

Variablen werden über ShortStrings ausgetauscht! Funktioniert aber einwandfrei!.

Bin über jede Form von KONSTRUKTIVER kritik erfreut :D

Wer ernsthaftes interresse daran hat kann mir Mailen oder eine PN schicken und ich werde den Source zuschicken!
(Ich will den source nicht direkt in di öffentlichkeit stellen da es ein ziemlicher aufwand war!
Aber stelle ihn natürlich zur verfügung falls jemand wie oben gesagt ernsthaftes interresse daran hat)

Download:
*.rar-Archiv
*.zip-Archiv

MfG Matthias Palmetshofer
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mi 28.04.04 16:55 
Hm. Kucken wir doch mal, was wir da haben: Ein Programm, was einen Key erzeugt und ein anderes, was einen Key prüft. Jetzt fráge ich mich: Was soll ich damit? In meinem Programm nutzen kann ich sie nicht, weil jegliche Dokumentation fehlt und zusammen mit deinen Programmen kann ich sie auch nicht benutzen. Also, was soll ich damit jetzt? Ich kann dir nur sagen, dass es anscheindend funktioniert, aus einem Namen und einer Zifferfolge irgendeine Zeichenkette zu generieren und aus der wieder den Namen und die Ziffernfolge zu gewinnen,
Palmetshofer Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 44



BeitragVerfasst: Mi 28.04.04 21:58 
Ach ja! ich hab ganz vergessen den aufruf der funktion aus der dll mit in ein textfile zu gebn! Tut mir leid. :oops:

Zum generieren des Keys:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
type
  TCdkey = function(name: ShortString; ActKey: integer): Shortstring; stdcall;

...

Function key (name: ShortString; ActKey: integer): ShortString;
var
Cdkey: Tcdkey;
handle: THandle;
begin
  Handle:=LoadLibrary(PChar(ExtractFilePath(ParamStr(0))+'generator.dll'));
  if Handle <> 0 then begin
    @Cdkey := GetProcAddress(Handle, 'key');
    if @cdkey<> nil then begin
      result := Cdkey(name,actkey);
    end;
    FreeLibrary(Handle);
  end;
end;


zum validieren des keys:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
type
  TKeyValidation = function(Name,SerialKey: ShortString; ActKey: integer): Boolean; stdcall;

...

Function validate (Name,SerialKey: ShortString; ActKey: integer): Boolean;
var
KeyValidation: TKeyValidation;
handle: THandle;
begin
  Handle:=LoadLibrary(PChar(ExtractFilePath(ParamStr(0))+'keyvalid.dll'));
  if Handle <> 0 then begin
    @KeyValidation := GetProcAddress(Handle, 'validate');
    if @KeyValidation<> nil then begin
      result := KeyValidation(Name,SerialKey,ActKey);
    end;
    FreeLibrary(Handle);
  end;
end;

Der ActivationKey sollte nicht größer sein als 5 zeichen da sonst eventuell fehler entstehen können die ich - derzeit - nicht beheben kann! wahrscheinlich weil dann der string zu lange wird. Sollte nur mal so ein testversuch werden.

@Lukie: Wenn du den source haben willst schreib mir einfach eine pn und ich werd ihn dir schicken!

Moderiert von user profile iconPeter Lustig (18:59, 16.05.2004): Code- durch Delphi-Tags ersetzt

_________________
Menschen stolpern nicht über Berge, sondern über Maulwurfshügel.
Konfuzius
thebe
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 128

WinXP Home
D6 Enterprise
BeitragVerfasst: Mi 28.04.04 23:09 
Ähm...
Ich will Dich ja nicht irgendwie ärgern oder so, aber das was Du da programmiert hast ist im Sinne der Sicherheit "totaler Müll". Und ich meine damit nicht die Funktionen die den Key generieren oder verifizieren, sondern die Form in der Du das rüberbringst.

DLL Dateien kann man nach den Export Funktionen durchsuchen lassen, da findet man dann die schicke Funktion mit dem Namen "validate". Klingt logisch wofür die gut ist oder ? Wenn man sich also die Export Funktionen der DLL anguckt, findet man diese Funktion ohne großes Rumprobieren sofort. Ich weiß das nun nicht genau ob man die Parameter die die Funktion erwartet auch noch rausfinden kann mit herkömmlichen Programmier Mitteln, aber auf alle Fälle kann man per Debugger / Disassembler den Zugriff auf die DLL nachverfolgen und kriegt damit auch die Parameter raus die die Funktion erwartet. Flugs programmiert man sich eine eigene DLL mit einer Export Funktion die die gleichen Parameter annimmt aber immer true zurückliefert. Und was hat man dann ? Nen gecracktes Programm.

Serial Verifizierungen per DLL ist glaub ich sogar die unzuverlässigste Methode überhaupt, die man dafür benutzen kann (btw Ulead soll das angeblich auch für deren Progs benutzen wenn der Artikel den ich darüber mal gelesen hab noch so aktuell war).

Nimms mir nicht übel und verstehs bitte nicht böse, fürs Basteln und Ausprobieren ist das ne gute Idee, aber was richtig sinnvolles was Andere ohne "größere" Bedenken benutzen können ist das nicht. Ich würde Dir viel eher raten ein wenig über die Technik zu schreiben die Du für die Key generierung benutzt hast, weil immer mal wieder einige Leute danach fragen und dann sowas innen FAQ wesentlich sinnvoller ist als inner DLL die man schnell cracken kann.
Palmetshofer Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 44



BeitragVerfasst: Do 29.04.04 12:47 
Hmm werd mir das zu herzen nehmen!

Ich hab das mal aus spaß programmiert und in verbindung mit einer dll versucht um zwei fliegen mit einer klappe zu schlagen weil
ich immer schon mal versuchen wollte dlls in programmen einzubinden!

Ich könnte mich an die arbeit einer faq machen könnte aber auch hilfe benötigen da ich soetwas
noch nie gemacht hab!

Hmm hab mir schon gedacht, dass das mit den dlls nicht so gut wäre habe aber auf grund meiner eingeschränkten sicht was das programmieren mit delphi angeht nichts konkretes daraus machen können!

Mich würde interessieren was ihr vorschlagen würdet was das mit der Sicherheit angeht?





------------------------------------
Satz- und Rechtschreibfehler vorbehalten :lol:

_________________
Menschen stolpern nicht über Berge, sondern über Maulwurfshügel.
Konfuzius
Alstar
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 827



BeitragVerfasst: So 16.05.04 17:55 
Hi!

Man könnte das Problem der gecrackten DLL folgendermaßen Lösen: Man lässt das Programm eine (MD5)Checksum der DLL generieren und diese wird dann mit z.B. einer Konstanten, die im Programm definiert ist, vergleichen.
Aber ebensogut könnte man natürlich den Quelltext der DLL in sein Programm einbinden.
Allerdings ist das nur eine kleine Hürde, die man als Hacker nehmen müsste. Das ist, als wenn man versucht Elitesoldaten mit Wasserpistolen aufzuhalten *g*

Alstar