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
Funktion in C++-dll auslagern?
@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.
@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:
Die zweite Funktion sollte mir möglichst einen String verschlüsseln / entschlüsseln (oder zwei Funktionen) unter Verwendung eines Schlüssels.
Muster:
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
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
Muster:
Code: Alles auswählen
def code_func(a, b):
xy = verschlüsseln(a, b)
return xy
PS: Die Funktion ist natürlich NICHT einfach eine Funktion 2ten Grades.....
Bin für jegliche Hilfe dankbar.
Thomas
@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.
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.
#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.
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.
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.
Wenn es dir wirklich wichtig ist dass die Funktion geheim bleibt, musst du sie als Webservice bereitstellen.
@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.
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
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
@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«.
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«.
@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
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
@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.
@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.
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.
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.
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«.
__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