Funktion in C++-dll auslagern?

Python in C/C++ embedden, C-Module, ctypes, Cython, SWIG, SIP etc sind hier richtig.
Antworten
Tomax
User
Beiträge: 31
Registriert: Sonntag 21. August 2016, 08:05

Hallo zusammen

Kann ich Funktionen, die ich nicht in Python zeigen möchte, in dll's auslagern, geschrieben in C++ oder anderen Sprachen und eventuell schlecht sichtbar?

Danke,

Thomas
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

@Tomax: was heißt denn "nicht zeigen möchte"? Wenn Du Deinen Quellcode nicht zeigen möchtest, weil er zu häßlich aussieht, dann lerne doch, schöneren Code zu schreiben.
BlackJack

@Tomax: Ob *Du* das kannst weiss ich nicht. ;-) Generell ist das aber möglich. Allerdings in der Regel nicht sinnvoll. Denn entweder Deine Funktionen interessieren niemanden, dann hast Du umsonst Arbeit hineingesteckt die zu verstecken. Und das ganze von einem Compiler abhängig gemacht und zusätzliche potentielle Fehlerquellen eingebaut. Oder die Funktionen sind interessant — dann bekommt auch jemand heraus was die machen.
Tomax
User
Beiträge: 31
Registriert: Sonntag 21. August 2016, 08:05

@blackjack
Ja, ich denke die Funktionen sind recht interessant, ich möchte nur einfach versuchen, nach der 80-20 Regel (oder besser 95-5) einfach die Mehrheit von potentiellen Usern nicht gerade mit der Nase drauf zu stossen.
Deshalb suche ich einfach eine Möglichkeit, eine Funktion (Ist im Grunde eine einfache Mathematische Funktion wie ax² + bx + c durch Übergabe der Werte a, b, c und x ausgerechnet zurückzubekommen.
Muster:

Code: Alles auswählen

def math_func(a, b, c, x):
    y = a*x**2 + v*x + c
    return y
Die zweite Funktion sollte mir möglichst einen String verschlüsseln / entschlüsseln (oder zwei Funktionen) unter Verwendung eines Schlüssels.
Muster:

Code: Alles auswählen

def code_func(a, b):
    xy = verschlüsseln(a, b)
    return xy
Diese Funktionen sind sicherlich eine Kleinigkeit für jeden C oder C++ Programmierer. Ich würde sie halt gerne möglichst unkenntlich machen und kompilieren.
PS: Die Funktion ist natürlich NICHT einfach eine Funktion 2ten Grades..... :-)

Bin für jegliche Hilfe dankbar.

Thomas
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

@Tomax: Warum möchtest Du nicht, dass jemand Deine geheime Formel liest? Wer ist der Nutzerkreis? Was könnte der Nutzerkreis mit der Formel anfangen? Handelt es sich um ein Spiel, wo derjenige, der die Formel kennt, einen unfairen Vorteil hat?

Zur Verschlüsselung: Verschlüsselungsalgorithmen sollten immer bekannt sein. Am besten erfindest Du nichts selbst, sondern benutzt schon einen weit verbreiteten Algorithmus. Das selbst zu programmieren, ist unnötige Arbeit und fast garantiert fehlerhaft oder unsicher.
Tomax
User
Beiträge: 31
Registriert: Sonntag 21. August 2016, 08:05

#sirius
Wir möchten die Formel in einem Gerät verwenden und unser Wettbewerb soll das zumindest nicht soo einfach nachmachen können. Ziel ist ein Mehrnutzen für unsere Kunden - aber nur wenn wir es managen.

Ist mir auch recht, wenn es ein bestehender Verschlüsselungsalgorithmus ist. Ich möchte damit einen Datensatz verschlüsselt ablegen und die Formel soll zur Laufzeit entschlüsseln und berechnen.
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Selbst wenn du die Funktion so auslagerst wird jeder Wettbewerber der tatsächlich ernsthafte Konkurrenz darstellt problemlos die Formel rekonstruieren können. Wenn die Motivation da ist wird es auch garantiert passieren.

Wenn es dir wirklich wichtig ist dass die Funktion geheim bleibt, musst du sie als Webservice bereitstellen.
BlackJack

@Tomax: Was nützt die Verschlüsselung wenn die Daten zur Laufzeit dann doch entschlüsselt werden müssen. Genau dann kann ein interessierter Wettbewerber dann auch die Informationen abgreifen. Das macht geringfügig mehr Arbeit, aber wenn es interessant ist, dann wird das auch jemand machen. Zumal derjenige ja noch nicht einmal die Interna der Funktion kennen muss um sie einfach *verwenden* zu können. Wenn Du eine bestimmte Information dem Benutzer nicht zugänglich machen willst, dann darf die schlicht und einfach nicht auf seinen Rechner gelangen.
Tomax
User
Beiträge: 31
Registriert: Sonntag 21. August 2016, 08:05

Hmmm
Danke für eure Erklärungen.

Ist es sehr schlimm, wenn ich das trotz all eurer Argumente trotzdem so machen möchte?
Ihr strengt euch ja wirklich an, mir meinen Ansatz auszureden, aber ich möchte einfach einige kleine Teile nicht als Klartext in einem Source stehen haben.

Ich kann die Funktionen nicht als Webservice anbieten, denn die Maschinen die überwacht werden, stehen an Orten ohne Netz.

Sorry wenn ich euch eure Zeit geraubt habe.

Thomas
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

@Tomax: statt sich die Mühe zu machen, alles in eine andere Sprache zu übersetzen, kann man auch direkt Python in Maschinensprache übersetzen, z.B. mit numba oder cython.
Tomax
User
Beiträge: 31
Registriert: Sonntag 21. August 2016, 08:05

@sirius3:
Kann ich damit auch so was wie eine dll oder so machen und auslagern?
Tomax
User
Beiträge: 31
Registriert: Sonntag 21. August 2016, 08:05

Habe gerade cython ausprobiert... Sieht wirklich so aus, als wäre das meine gewünschte Lösung.
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

@Tomax: DLLs haben den Vorteil, dass man sie in beliebige Programme einbinden kann, und damit die Funktionsweise durch füttern mit unterschiedlichen Werten leicht testen kann. Außerdem liefern sie Funktionsnamen und Parameter frei Haus, so dass man sich da auch nicht erst mühsam durch Millionen Zeilen Code durcharbeiten muß. Durch Deine Maßnahmen dauert es bestimmt 5 Minuten länger, bis jemand, sich den Algorithmus anschauen kann.
Ich sah schon DLLs von kommerziellen Programmen, in denen noch Debuginformationen gespeichert waren, so dass man auch rekonstruieren kann, welche Befehle der Programmierer in welche Zeile geschrieben hatte. Heutzutage beliebter sind aber Java und .NET. Da klappt die Rückübersetzung immer zu 100%, da die Befehlssätze deutlich kleiner sind.

Wenn ein Mitbewerber Interesse an Deinem Algorithmus hat und genug Energie, Dein Produkt zu kaufen und es auseinanderzunehmen, dann hält es ihn auch nicht auf, daß er eine DLL findet. Dann eher noch, »oh, Python, das versteh ich ja überhaupt nicht«.
Tomax
User
Beiträge: 31
Registriert: Sonntag 21. August 2016, 08:05

@alle die hier beigetragen haben

Besten Dank für eure Inputs!
Jedenfalls hab ich mir mittlerweile geholfen. Zumindest stehen jetzt weder die Funktionen noch meine Parameter in Klarschrift dort. Das hält sicher 95% meiner Kunden davon ab, sich näher damit zu beschäftigen - das sind alles Endanwender.
Sicher ist das alles nur ein Placebo für mich, aber das ist mir glatt Wurscht.

Warum scheint es hier im Forum so oft vorzukommen, dass die Hauptkraft darauf verwendet wird, Leuten ihre Pläne auszureden? Es ist nicht jeder so tief drin in dem ganzen Zeug - manche machen etwas auch einfach nur, um damit zu üben und sich weiterzubilden. Wenn das in Euren Augen nicht der Mühen wert ist, dann antwortet doch einfach nicht - das spart euch schon mal 5000 von 20000 Beiträgen und ihr könnt euch mit den wirklich wichtigen Dingen befassen wie der Quantenphysik oder Stringtheorien.

Jedenfalls bin ich jetzt einen Schritt weiter. Und das eine Wort "Cython" in euren Antworten hat mich wirklich weiter gebracht. Deshalb nix für ungut und weiterhin einen schönen Tag mit weniger dummen Fragen von weniger simplen Usern!

;-) Thomas
BlackJack

@Tomax: Alternativen wären gar nicht antworten, das hilft keinem, oder sagen wie man etwas unsinniges macht. Das machen dann am Ende viele Leute nach.
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

@Tomax es steht dir frei (wie du es ja auch getan hast) jeden hier gegebenen Rat in den Wind zu schlagen. Wieso du auch nur einen Jota Energie darein steckst, Leuten ihre Hilfsbereitschaft auszureden - obwohl du doch gar nicht entscheiden kannst, ob anderen genau damit geholfen ist? Wenn ich mich nicht vertue, dann ist dieser Beschwerdebeitrag der laengste von all deinen Beitragen in diesem Thread - das war doch substantiell Aufwand, den haettest du dir doch sparen koennen? Hat dich aber auch irgendwie gejuckt.

Es kommt hier und anderswo alle naslang vor, das Leute mit wenig Ahnung auf vermeintliche Loesungen kommen, und sich damit laengerfristig Aerger einhandeln. Sei es falsche Vorstellungen von Sicherheit, oder schraege Architekturen. Ihnen jedesmal einfach nur den Strick zur Strangulation zu reichen - find ich jetzt auch nicht so nett.
anonym44

Eine DLL kann man in 5 Minuten Knacken,
ins besondere wenn es um einen Algorithmus geht.
In Assembler(DLL einfach in einen Debuger öffnen) ist die Funktion eventuell noch einfacher zu verstehen weil alles bis auf das Einfachste reduziert ist.

Daher wenn Du einen halbwegs brauchbaren Schutz möchtest musst Du schon dein ganzes Projekt in eine Binary umwandeln und dann das Programm verschlüßeln.
Also das einzige was Sinn macht, ist alles in eine Quellcode-Datei kopieren und dann mit Czython in eine DLL oder exe umzuwandeln.

Vielleicht glaubst Du ich mache es viel zu kompliziert, aber pass auf:
Es ist doch einfacher eine DLL zu reversen - die im schlimmsten Fall nur ein Symbol hat, also deine Funktion - als eine große Python-Datei, wie Sirus es schon richtig gesagt hat.
es auseinanderzunehmen, dann hält es ihn auch nicht auf, daß er eine DLL findet. Dann eher noch, »oh, Python, das versteh ich ja überhaupt nicht«.
anonym44

__deets__ hat geschrieben:@Tomax es steht dir frei (wie du es ja auch getan hast) jeden hier gegebenen Rat in den Wind zu schlagen. Wieso du auch nur einen Jota Energie darein steckst, Leuten ihre Hilfsbereitschaft auszureden - obwohl du doch gar nicht entscheiden kannst, ob anderen genau damit geholfen ist? Wenn ich mich nicht vertue, dann ist dieser Beschwerdebeitrag der laengste von all deinen Beitragen in diesem Thread - das war doch substantiell Aufwand, den haettest du dir doch sparen koennen? Hat dich aber auch irgendwie gejuckt.

Es kommt hier und anderswo alle naslang vor, das Leute mit wenig Ahnung auf vermeintliche Loesungen kommen, und sich damit laengerfristig Aerger einhandeln. Sei es falsche Vorstellungen von Sicherheit, oder schraege Architekturen. Ihnen jedesmal einfach nur den Strick zur Strangulation zu reichen - find ich jetzt auch nicht so nett.

Hallo Freunde,

ich finde ihr solltet Wissenschaftler Thomas mehr unterstützen.
1. Es gibt nicht nur ein paar Böse Menschen die gerne Klauen, sondern auch Nationen, z.B. Chinesen. Chinesen lassen alles freundlich zu(z.B. import Produkte) und kopieren es langsam. Nachdem es erfolgreich kopiert wird, verschwindet das Orginalprodukt ganz schnell im Hintergrund.

2. Die ganze Gesellschaft ist so aufgebaut, dass die Gierigen an der Spitze sind, daher ist es nachvollziehbar wenn man sich schützen will, insbesondere wenn man noch dabei etwas lernt.
Wieso das so ist ist ganz einfach: der gutmütige Mensch läßt läßt sich viel gefallen, der gierige Mensch versucht alle Möglichkeiten auszunutzen.

Das interessante daran ist, das man sich langsam an alles gewöhnt, wenn es dann Menschen gibt, die irgendetwas kritisches Äußern als Buhman dasteht:
https://www.youtube.com/watch?v=NJvoowZ0iWE
Antworten