Seite 1 von 2

Funktion in C++-dll auslagern?

Verfasst: Mittwoch 28. September 2016, 15:40
von Tomax
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

Re: Funktion in C++-dll auslagern?

Verfasst: Mittwoch 28. September 2016, 15:58
von Sirius3
@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.

Re: Funktion in C++-dll auslagern?

Verfasst: Mittwoch 28. September 2016, 16:24
von 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.

Re: Funktion in C++-dll auslagern?

Verfasst: Donnerstag 29. September 2016, 11:53
von Tomax
@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

Re: Funktion in C++-dll auslagern?

Verfasst: Donnerstag 29. September 2016, 12:26
von Sirius3
@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.

Re: Funktion in C++-dll auslagern?

Verfasst: Freitag 30. September 2016, 18:42
von Tomax
#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.

Re: Funktion in C++-dll auslagern?

Verfasst: Freitag 30. September 2016, 18:55
von DasIch
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.

Re: Funktion in C++-dll auslagern?

Verfasst: Freitag 30. September 2016, 19:11
von 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.

Re: Funktion in C++-dll auslagern?

Verfasst: Freitag 30. September 2016, 21:24
von Tomax
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

Re: Funktion in C++-dll auslagern?

Verfasst: Freitag 30. September 2016, 22:04
von Sirius3
@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.

Re: Funktion in C++-dll auslagern?

Verfasst: Samstag 1. Oktober 2016, 05:22
von Tomax
@sirius3:
Kann ich damit auch so was wie eine dll oder so machen und auslagern?

Re: Funktion in C++-dll auslagern?

Verfasst: Samstag 1. Oktober 2016, 05:48
von Tomax
Habe gerade cython ausprobiert... Sieht wirklich so aus, als wäre das meine gewünschte Lösung.

Re: Funktion in C++-dll auslagern?

Verfasst: Samstag 1. Oktober 2016, 10:10
von Sirius3
@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«.

Re: Funktion in C++-dll auslagern?

Verfasst: Samstag 1. Oktober 2016, 15:44
von Tomax
@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

Re: Funktion in C++-dll auslagern?

Verfasst: Samstag 1. Oktober 2016, 16:13
von 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.