Funktion in C++-dll auslagern?

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

Mittwoch 28. September 2016, 15:40

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: 8265
Registriert: Sonntag 21. Oktober 2012, 17:20

Mittwoch 28. September 2016, 15:58

@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

Mittwoch 28. September 2016, 16:24

@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

Donnerstag 29. September 2016, 11:53

@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: 8265
Registriert: Sonntag 21. Oktober 2012, 17:20

Donnerstag 29. September 2016, 12:26

@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

Freitag 30. September 2016, 18:42

#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: 2462
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Freitag 30. September 2016, 18:55

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

Freitag 30. September 2016, 19:11

@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

Freitag 30. September 2016, 21:24

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: 8265
Registriert: Sonntag 21. Oktober 2012, 17:20

Freitag 30. September 2016, 22:04

@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

Samstag 1. Oktober 2016, 05:22

@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

Samstag 1. Oktober 2016, 05:48

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

Samstag 1. Oktober 2016, 10:10

@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

Samstag 1. Oktober 2016, 15:44

@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

Samstag 1. Oktober 2016, 16:13

@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.
Antworten