Ich weiß, es scheint seltsam zu sagen, aber ein Arbeitskollege hat absichtlich ein paar schlechte Programmierpraktiken angewendet! Ich erkläre es. Lassen Sie mich zunächst sagen, dass er ein intelligenter Typ ist und größtenteils verständlichen Code schreibt.
Er wurde gebeten, Lizenzen für ein in Java geschriebenes Webanwendungsprojekt zu implementieren. Da es sich um Java handelt, könnte man, wenn man es wirklich wollte, wahrscheinlich die Gläser öffnen und die Namen der darin geschriebenen Klassen und Methoden lesen. Seine Lösung für dieses Problem bestand darin, Variablen und Methoden buchstäblich als weniger offensichtliche Namen zu bezeichnen und sie in bereits überlastete Klassen einzufügen, anstatt neue Klassen zu generieren.
Er begründete dies damit, dass ein Hacker, der bestimmte Klassen ausschalten wollte, um Lizenzprüfungen zu umgehen (und daher eine kostenlose Kopie des Produkts zu erhalten), eine weitaus schwierigere Zeit damit haben würde, wenn nicht klar wäre, welche Methoden zur Anwendung kamen diese besonderen Aufgaben ausführen. Erst nachdem er es getan hatte, konfrontierte ich ihn damit und schlug vor, dass wir vielleicht eine Art Verschleierungsbibliothek kaufen könnten, um es für uns zu tun, während wir gute Programmierpraktiken beibehielten. Er behauptet, weder Zeit noch Ressourcen gehabt zu haben, um nach einer solchen Lösung zu suchen.
..Das lässt mich in einem Dilemma. Suche ich nach einer Obfuscator-Bibliothek in Java und repariere seinen alten Code (der beim Umbau seines Codes etwas heikel sein könnte), oder lasse ich ihn so, wie es mich bis zum Äußersten irritiert?
Antworten:
Sicherheit durch Verschleierung ist niemals gute Sicherheit. Es muss bessere Möglichkeiten geben, Ihr geistiges Eigentum zu schützen. Und das sollten Sie und Ihr Kollege gemeinsam mit Ihrem Vorgesetzten zur Sprache bringen. Wenn das Management dann entscheidet, dass es nicht die Zeit oder das Geld für mehr Sicherheit ausgeben möchte, müssen Sie beide mit dieser Entscheidung leben (es ist nicht Ihr Produkt, es ist das Produkt des Unternehmens) und besser nicht ausgeben (Abfall?). mehr Zeit zum Thema.
quelle
Original: Was sagt dein Chef? Finde es heraus - mach das.
Ich wurde gebeten, das oben Genannte auszuarbeiten:
Zuallererst denke ich, dass Sie mehr als ein Dilemma haben:
Vor allem aus betriebswirtschaftlichem Fall gesehen das Problem IST gelöst. A ist vorhanden und höchstwahrscheinlich eine "ausreichend gute" Lösung für das Problem. Ihr Unternehmen ist vielleicht gerade so gut geschützt, dass es gezielte Anstrengungen braucht, um das Problem zu lösen.
Dies bedeutet, dass selbst wenn Sie es nicht mögen (und glauben Sie mir, Sie werden im Laufe Ihrer Karriere viel schlechter dastehen ), es das tut, was nötig ist. Wenn das Problem gelöst ist, sollten Sie es also nicht einfach tun, sondern die Person, die für die langfristige Zuordnung Ihrer Arbeit verantwortlich ist, davon überzeugenDer Preis für diese Implementierung ist hoch genug, um ein Rollback zu rechtfertigen und einen Stock Obfuscator zu wählen. Dies erfordert einiges an Vorbereitung von Ihnen, und beachten Sie auch, dass Obfuscators auch Nachteile haben, die Sie kennen müssen (andere Antworten decken dies gut ab). ZB sind Stapelspuren nicht sofort verwendbar usw. Es kommt darauf an, wie wichtig es ist, Raubkopien zu vermeiden. Beachten Sie, dass es am schwierigsten ist, Hardware-Dongles zu brechen, und dass dies höchstwahrscheinlich teurer ist, als es Ihre Kunden möchten.
Daher liegt diese Entscheidung nicht bei Ihnen, da Ihr Unternehmen zusätzliche Ressourcen für die Kontaktaufnahme mit B benötigt. Daher müssen Sie Ihre Bedenken der verantwortlichen Person mitteilen, diese und alle anderen langfristigen Bedenken gut genug erläutern, damit diese verstehen kann, warum Sie halten es für schlechter als Ihren Vorschlag. Lassen Sie ihn dann die Entscheidung treffen und respektieren und verhalten Sie sich unabhängig davon, wie es sich herausstellt, professionell. Beachten Sie, dass der ursprüngliche Autor es höchstwahrscheinlich ohnehin so pflegen muss, wie er es geschrieben hat, und wenn er abreist oder es nicht mehr möchte, können Sie die Angelegenheit erneut zur Sprache bringen.
Mit anderen Worten: Was sagt Ihr Chef? Finde es heraus - mach das.
Beachten Sie auch, dass dies anders gewesen wäre, wenn Sie das Problem früher angesprochen hätten, sodass die Geldverschwendung für die Zeit, die für die Implementierung von A aufgewendet wurde, geringer war. Mit anderen Worten, wenn die Wahl zwischen A und B getroffen werden sollte.
Abschließend möchte ich Ihre Frage zu "nur das Reparieren des Codes anderer Leute" kommentieren. Dies ist keine kleine Korrektur für den vorhandenen Code (was ich gut finde und empfehle, insbesondere wenn Tests vorhanden sind). Es ist ein störendes Rollback und eine Neuimplementierung, und selbst in Teams mit gemeinsamem Code-Besitz wäre dies - zumindest für mich - ohne vorherige Genehmigung nicht akzeptabel.
Hoffentlich klärt dies meinen Standpunkt.
quelle
Nein , es wäre schlimmer, hinter jemanden zurückzukehren und den Code zu ändern, für den er verantwortlich ist, als den fragwürdigen Code zu schreiben.
Sie haben es mit dem Programmierer besprochen. Ihr nächster Schritt ist, Ihre Nase herauszuhalten oder es mit dem Management zu besprechen und dann Ihre Nase herauszuhalten.
quelle
Gab es eine offizielle Codeüberprüfung jeglicher Art - oder gab es bei der Konfrontation eine inoffizielle "Codeüberprüfung"? Ich würde sagen, da dies ein heikles und wichtiges Thema wie Sicherheit und Lizenzierung ist, müssen Sie dies in der Kette erhöhen. Sie haben den ersten Teil erledigt - die Konfrontation mit dem Programmierer. Jetzt, da er nicht zuhört, können / sollten Sie es aufnehmen. Wenn Sie dies nicht tun, sind Sie möglicherweise Teil des Problems.
Ich würde ihm sagen, dass Sie es tun werden - dies KANN seine Meinung ändern. Wenn dies nicht der Fall ist, schreiben Sie Ihrem Chef und dem Programmierer CC eine sehr politisch korrekte, aber genaue und prägnante E-Mail über die Situation. Bitten Sie in der E-Mail um ein Treffen zwischen Ihnen und / oder einer anderen teilnehmenden Partei.
Treffen Sie diese Dinge immer direkt - und dies auf politische und freundschaftliche Weise.
quelle
Wenn Sie einen Verschleierer finden, der die Signatur von Klassen (Methodennamen usw.) verschleiern kann, schlagen Sie vor, ihn zu kaufen und zu verwenden.
Bis dahin musst du vielleicht damit leben. Ich gebe zu, dass ich in einem kürzlich durchgeführten Grails-Projekt etwas Ähnliches getan habe - die Lizenzprüfungen sind bewusst in die bereits umfangreiche Anmeldemethode eingebettet, sodass es ziemlich schwierig wäre, die Methode zur Umgehung der Prüfung zu ersetzen.
quelle
Kann er zeigen, dass ein solcher Hack machbar ist, oder ist es nur ein hypothetisches Szenario, über das er sich Sorgen macht? Kann er eine Live-Demo dieser Arbeit geben? Er sollte es versuchen. Ernst. Wenn es funktioniert, sollte es dem Management vorgelegt werden und dann vorgeschlagen werden, einen Verschleierer zu besorgen.
Wenn ein Obfuscator nicht sicher genug ist, haben Sie nach anderen Möglichkeiten gesucht, um die JAR zu sichern, z. B. die Verschlüsselung oder das Kompilieren zu systemeigenem Code?
RE: Überarbeitung seines Codes: Ist es nur eine Frage des Umbenennens? Viele IDEs verfügen über Refactoring-Tools, die dies recht einfach durchführen können.
quelle
Unabhängig davon, wie wertvoll Ihre IP-Adresse ist, besteht das Intelligente nicht darin, Ihren Code in der Hoffnung, Hacker zu verwirren, zu entstellen. Abgesehen von der Tatsache, dass es ein Albtraum sein wird, dies auch weiterhin zu tun, löst es kein wirkliches Problem. Es macht es nur schwieriger, aber nicht unmöglich. Es ist also keine wirkliche Lösung und die Nebenwirkungen sind schlimm. Es ist, als würde man ein Medikament einnehmen, das nicht wirkt und schlimme Nebenwirkungen hat.
Ihr Problem ist, wie Sie Ihre IP sichern können. Finden Sie eine Lösung dafür: Verschleierer, Lizenzserver usw.
quelle
Ich bin auf ein ähnliches Problem gestoßen, als ein anderer Entwickler unsere Verschlüsselungs- / Entschlüsselungsroutinen
str__copy
und nanntestr__delete
(beachten Sie den zweiten Unterstrich). Es war lahm und hätte besser gemacht werden können, also haben wir gewartet, bis es eine Geschichte gab, in der eine Aktualisierung der Lizenzierung erforderlich war. Das Management hatte kein Problem mit der zusätzlichen Handvoll Stunden, da wir es als "Aufräumen" beschrieben haben. Problem gelöst, keine verletzten Gefühle.quelle
Mein erster Gedanke war die Pflege dieses Codes. Wenn der Code bereits verschleiert ist und er weitermacht, viel Glück beim Versuch, diesen Code in den Griff zu bekommen. Sie werden dann der Hacker sein, der versucht, den Code zu entschlüsseln.
Stattdessen würde ich empfehlen, den Code zu bereinigen und die harte Arbeit mit einem Obfuscator zu erledigen. Langfristig haben Sie viel verwaltbaren Code und Sie überlassen die ganze verrückte Komplexität jedem, der Ihre Lizenz hacken möchte.
Denken Sie daran, dass kein Obfuscater perfekt ist und ein sehr entschlossener Hacker alles rückentwickeln kann, aber zumindest wird es nur er sein. Außerdem erhöhen Obfuscater die Komplexität erheblich, als dies ein Typ wahrscheinlich kann.
quelle
Ich stimme mit den Antworten überein, dass Sie Ihren Chef über das Problem befragen und tun sollten, was er sagt.
Ein sehr wichtiger Zusatz zu diesen Antworten ist jedoch, dass Sie Ihre Bedenken in Bezug auf Sicherheit und Wartbarkeit dokumentieren. Unabhängig davon, ob Sie den Code ändern oder nicht, ist es wichtig, dass die Leute wissen, worüber Sie sich Sorgen machen und warum. Dies ist sowohl proaktiv (Ihr Chef kann keine Entscheidung treffen, von der er nicht einmal weiß, dass sie getroffen werden muss) als auch defensiv (wenn / wenn ein Hacker Löcher in das schlecht abgesicherte Lizenzsystem steckt, kann er Ihnen keine Schuld dafür geben Fehler.)
quelle
"Seien Sie nicht der überlegenste Fachmann, der ein Problem kennt".
Mit anderen Worten, sagen Sie es Ihrem Chef und gehen Sie von dort aus. Wenn Sie ruhig bleiben und in diesem Geheimnis ganz oben auf der Liste stehen, sind Sie verantwortlich, wenn es darauf ankommt. Sagen Sie es Ihrem Chef beiläufig und lassen Sie ihn entscheiden, wie er es angehen soll. Auf diese Weise werden Sie von der Last der Wahl befreit.
Sagen Sie es nicht nur Ihrem Chef, denn viele Manager sind vielleicht nicht so technisch, sondern tun, was wir immer tun: Geben Sie das Problem und mögliche Lösungen mit den Vor- und Nachteilen für jede dieser Lösungen an. Dann lassen Sie sie entscheiden und haben das vergangen. Das ist der Grund, warum Manager / Führungskräfte das große Geld bekommen!
quelle
Die klare Wahrheit ist, dass mit genügend Zeit und Ressourcen alles geknackt werden kann. Es ist eine einfache Funktion, wie beliebt Ihre App ist. Je populärer es ist, desto geschickter zieht es Hacker an und desto mehr Zeit wird darauf verwendet, es zu brechen. Die Codeverschleierung bietet genau das - eine Möglichkeit, die zum Auflösen erforderliche Zeit zu verlängern, ähnlich wie bei der Kryptografie. Wenn Ihr Code also verschleiert ist, muss der Angreifer geschickt sein und Zeit darauf verwenden, sonst verzweifelt er und gibt auf. Sie müssen sich fragen, ob Ihre App die Mühe auf beiden Seiten wert ist.
Es ist erstaunlich, wie schwer es werden kann, verschleierten Code zu knacken. Sie können ein einfaches 10-zeiliges C-Programm einfach durch Verschleierung in ein 100-zeiliges Assembler-Programm verwandeln. Wenn Sie versuchen, es zu debuggen, springen Sie sinnlos im Code herum und können sehr frustrierend sein, ihn zu durchlaufen. Irgendwann wird es kaputt gehen, aber es wird sehr schwer und da nichts wirklich unmöglich ist, ist das der Punkt. Durch die Verschleierung von Code wird die Anzahl der Personen verringert, die in der Lage sind, den Code zu zerstören.
Sicher gibt es bessere Möglichkeiten, wie den Debugger nicht den Cracker zu verwirren, sondern einen billigen und effizienten. Es ist jedoch nicht ganz einfach, Dinge unbeholfen zu benennen. Sie müssen Steuerflussaufruffunktionen ändern, die für den gesamten Code nichts bewirken, aber dessen Größe und Komplexität erhöhen: Rufen Sie Dummy-Funktionen auf, deren Rückgabewert nirgendwo verwendet wird, und zwar aus Funktionen heraus, die wirklich etwas bewirken. Sie können bereits sehen, wie verwirrend dies werden kann.
Sie haben etwas, was der Angreifer nicht tut. Der ursprüngliche Quellcode. Finden Sie einen Weg, um es besser für sich selbst zu organisieren.
quelle