Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

06.07.2012, 21:12

C++ DLL schützen

Hallo :),

ich suche vergeblich nach einer Methode meine DLL vor Fremdgebrauch (nur meine Applikation darf auf die DLL zugreifen) zu schützen, denn mit dem folgenden Code kann man auf die Funktionen in der DLL zugreifen.

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
typedef void (*func)(unsigned char*,unsigned char*,int,unsigned char*,int);
func test;

HINSTANCE hLib = LoadLibrary("test.dll");
if(hLib == NULL) {
    return 1;
}
char dllpath[70];
GetModuleFileName((HMODULE)hLib, (LPTSTR)dllpath, 70);
test = (func)GetProcAddress((HMODULE)hLib, "test");
if(test == NULL) {
    FreeLibrary((HMODULE)hLib);
    return 1;
}


Mfg
Delop

Sylence

Community-Fossil

Beiträge: 1 663

Beruf: Softwareentwickler

  • Private Nachricht senden

2

06.07.2012, 21:16

ich suche vergeblich nach einer Methode meine DLL vor Fremdgebrauch (nur meine Applikation darf auf die DLL zugreifen) zu schützen


Dabei wirds auch bleiben ;)

3

06.07.2012, 21:20

Danke für die schnelle Antwort. :). Aber es ist leider schade ._.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

4

06.07.2012, 21:25

Darüber würde ich mir keine Sorgen machen. Realistisch gesehen wird sich nie jemand dafür interessieren oder gar nachschauen welche Schnittstellen die DLL bietet.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Schrompf

Alter Hase

Beiträge: 1 470

Wohnort: Dresden

Beruf: Softwareentwickler

  • Private Nachricht senden

5

06.07.2012, 21:34

Wie wär's, wenn Du die Lib einfach statisch linkst? Dann ist sie Teil Deiner Exe und niemand kann mehr sehen, welche Wege es nimmt. Ganz zu schweigen von den Performance-Vorteilen des statischen Linkens und den vermiedenen Problemen mit Runtime, Heap und Exceptions.
Häuptling von Dreamworlds. Baut aktuell an nichts konkretem, weil das Vollzeitangestelltenverhältnis ihn fest im Griff hat. Baut daneben nur noch sehr selten an der Open Asset Import Library mit.

6

06.07.2012, 21:37

@BlueCobold: Okey. Danke für die Infos :).
@Schrompf: Was wenn die DLL von mehreren Programmen gebraucht wird und wenn ich den Code von der DLL z.B. updaten will, dann muss ich nur die DLL updaten.

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

7

06.07.2012, 21:38

Mal angenommen deine DLL ist wirklich so wichtig, dass niemand ran darf. Dann habe ich hier ein paar Ideen. Keine davon verhindert zu 100%, dass jemand deine DLL benutzen kann, aber sie würden schon eine Menge Leute abschrecken.

1. Theoretisch könntest du die DLL verschlüsselt speichern. Beim Starten des Programms entschlüsselst du sie in einen temporären Ordner und lädst sie dann.

2. Dann könntest du noch die Namen der Funktionen verschleiern, also einfach durch sinnlose Buchstabenkombinationen oder sogar völlig irreführende Namen ersetzen (à la "InitializeGraphics" => "SendHTTPRequestAsync").

3. Bevor du irgendeine DLL-Funktion nutzen kannst, musst du eine "Entsperr-Funktion" aufrufen, der du ein Passwort übergibst. Wenn das Passwort richtig ist, funktionieren die anderen Funktionen. Ansonsten brechen sie sofort ab. Das Passwort-Konzept kann man auch durch etwas komplizierteres ersetzen, wie eine Art Handshake/Challenge.

4. In der DllMain kannst du herausfinden, welcher Prozess deine DLL geladen hat. Nun prüfst du, ob es deine Anwendung ist oder eine andere (z.B. indem du in der "erlaubten" EXE-Datei eine bestimmte Byte-Sequenz einbaust, die von der DLL gesucht wird). Wenn es nicht deine Anwendung ist, beende den Prozess.

8

06.07.2012, 21:48

Gute Ideen David. :). Ich denke ich werde die 3. & die 4. Variante benutzen. :)

Zu Punkt 4: Mit MD5 würde es auch funktionieren oder?

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

9

06.07.2012, 21:56

Die Frage ist nur, ob der Aufwand zu rechtfertigen ist. Denn wenn jemand wirklich da ran will, dann sind diese Schutzmechanismen trivial auszuhebeln. Ich würd mir an deiner Stelle echt erstmal überlegen, ob das wirklich notwendig ist. Was ist denn das für eine dll!?

10

06.07.2012, 21:59

@dot: Eine Engine.

Werbeanzeige