Alternate 2

Dll nutzen aber nicht herausgeben

DanniiBoy

Cadet 2nd Year
Registriert
Okt. 2007
Beiträge
30
Ich habe ein Problem...

Habe eine Tool in C# geschrieben und nutze eine dll (c) die mir zu einem seed einen key berechnet.

Gibt es eine Möglichkeit diese dll beim ausliefern des Tools an den Kunden nicht zugänglich zu machen?


aaaargh... :/
 
Kannst du das nicht auf einen Server auslagern? Gibt halt Mehrarbeit bei Authentifizierungmechanismus etc
edit: es geht dir doch darum, den Algorithmus zu verbergen, oder?
 
Zuletzt bearbeitet:
Leider nicht.... es ist ein Tool zum flashen von steuergeräten und soll über laptop in irgendwelchen produktionshallen laufen :D
Ergänzung ()

Der Kunde darf die Dll halt nicht in die Finger bekommen :D
 
Ich verstehe die Frage nicht. Wenn du die Funktionalität der DLL in der ausgelieferten Software benötigst, dann benötigst du ja wohl auch die DLL. Wenn nicht (also nur du in-house diese Funktion brauchst), kannst du sie weglassen. Wo ist das Problem?
 
Ich brauche die Dll,ja....

Der Kunde darf diese Dll aber nicht selbst für ein eiegenes Tool nutzen können, da er dann Zugriff auf Sicherheitsrelevante Funktionen des Steuergeräts bekommen würde.
 
Dann kommt es drauf an, wie spitzfindig dein Kunde ist. Man kann unmanaged dlls in deine managed exe reinkompilieren. Das heißt nicht, dass er nicht trotzdem irgendwie dran kommen würde, aber die dll wäre aus dem Dateisystem raus.
 
Dann nutze doch ggf. den Obfuscator...
 
Das Tool nutzt die Dll um aus einem Seed den Key zu berechnen. Also ja.

Der Kunde darf aber nicht die dll für ein eigenes Tool nutzen dürfen.
Er könnte nämlich dann ein eigenes Tool schreiben, dass die Dll nutzt um aus dem Seed einen Key zu bekommen.

Dann hätte er Zugriff auf Sicherheitsrelevante Funktionen des Steuergeräts.

Und das darf nicht sein....

So besser?

Achja, ich habe den Quellcode der DLL auch nicht.
Ergänzung ()

Den Ansatz werde ich mal versuchen...
 
Tja, dann musst du sie ja wohl mitliefern. Du könntest sie aber zb. verschlüsselt oder in die .exe eingebunden mitliefern und zur Laufzeit entpacken/entschlüsseln. Aber auch dann, wer will, kommt da dran.
 
Wenn die dll dann zur laufzeit entpackt/entschlüsselt wird, dann muss das Probleme mit den Schreibrechten im aktuellen Ordner bedacht werden, richtig?
 
Naja, da gäbe es ja das TMP verzeichnis - aber besser wäre es, das ganze komplett im Speicher stattfinden zu lassen. Frag mich aber nicht wie.
 
Darfs was kosten? Wie man es von Hand macht weiß ich nicht, aber es gibt professionelle Lösungen, mit denen man unmanaged Code so in .NET verpacken kann, dass dieser zur Laufzeit aus dem Arbeitsspeicher und nicht vom filesystem gelesen wird.
 
dll als Resource hinzufügen und diesen Code bevor die DLL benutzt wird einmalig:
Code:
AppDomain.CurrentDomain.AssemblyResolve += (sender, args) => {
  var name = args.Name + ".dll";
  using (var input = Assembly.GetExecutingAssembly().GetManifestResourceStream(name)) {
    Assembly dll = input != null ? Assembly.Load(input.ToArray()) : null;
    return dll;
  }
};
 
Sorry, hab Dein Post übersehen ..
Sollte so klappen:
Code:
using System.Runtime.InteropServices;
using System.Diagnostics;
...
[DllImport("kernel32", EntryPoint = "LoadLibrary", SetLastError = true, CharSet = CharSet.Unicode)]
static extern IntPtr Kernel32LoadLibrary(string lpFileName);
...
String dllPath = "mylib.dll";
IntPtr h = Kernel32LoadLibrary(dllPath);
Debug.Assert(h != IntPtr.Zero, "Unable to load library " + dllPath);

Edit: Mhhh, oder geht DllImport? Hab's nie probiert .. Ich mache das normalerweise so das die DLL('s) als BZip2-gepackte Embedded Resource in der Exe sind, das packt einfach am besten. :D
 
Zuletzt bearbeitet:
Das ist doch alles nur Obfuscation. Das Steuergerät ist einfach zu knacken wenn sich hinter der Schlüsselberechnung nur ein "geheimer" Algorithmus verbirgt, der aus dem Seed einen Key berechnet. Wenn diese Funktion für dein Programm notwendig ist und du dieses Programm auslieferst, dann kann ein routinierter Hacker diesen Algorithmus problemlos knacken. Und zwar völlig egal ob du es als DLL auslieferst oder irgendwie in die EXE-Datei verpackst.
Das einzig brauchbare Verfahren um den Algorithmus zu verstecken ist mit einem Webservice oder ähnlichem. Aber das hilft auch nur dann, wenn sich der Key nicht trivial aus dem Seed ableiten lässt. Smartcard würde auch noch funktionieren.

@lynxx: Eine DLL als BZIP2 in einer Resource verpackt fresse ich zum Frühstück. Ich hab den "Trick" schon so oft gesehen bei ganz unterschiedlichen Programmen, die etwas "verstecken" wollten. Sowas in den Resourcen zu extrahieren ist überhaupt kein Problem. Und dass es BZIP2 ist sieht man schon am Hexeditor auf den allerersten Blick..
 
IceMatrix schrieb:
Sowas in den Resourcen zu extrahieren ist überhaupt kein Problem. Und dass es BZIP2 ist sieht man schon am Hexeditor auf den allerersten Blick..
Mir geht's ja nicht ums verstecken, sondern erstmal das ein Programm nicht so gross ist und das nur eine ausführbare Datei gebraucht wird obwohl z.B OpenGL, bass.dll, etc verwendet wird.
Ausserdem glaube ich kaum das er Crackern eine Herrausforderung geben will, sondern nur verhindern das gleich jeder darauf zugriff hat und man könnte die Resource ja noch nach belieben verschlüsseln.
 
Zurück
Oben