Wie kann ich meine Signatur in einem Programm verbergen? [geschlossen]

31

Wir haben einen Programmierkurs an der Universität und Kommilitonen stellen in unserer Facebook-Gruppe einige Programmierfragen. Ich zögere ein wenig, alle meine Programme zu teilen, besonders wenn es für eine der Aufgaben etwas Cooles ist, da diese von den TAs angeschaut werden und sie möglicherweise bemerken, dass jemand das gleiche Programm hat und anfängt, Fragen zu stellen, wo es herkommt von. Trotzdem möchte ich manchmal meinen Code weitergeben, um anderen zu helfen, aber ich möchte nicht, dass die Leute einfach meine Arbeit packen. (Klarstellung: Wir dürfen mit den Aufgaben zusammenarbeiten) Dies ist natürlich eine dünne Linie. Während ich einigen Menschen helfen möchte, befürchte ich, dass sie nicht die akademische Ehrlichkeit haben, den Code selbstständig umzuschreiben.

Die meisten meiner Kommilitonen sind in ihren Fähigkeiten nicht sehr fortgeschritten, daher würde ich sagen, dass ich meinen Namen in einer Base-64-codierten Zeichenfolge verstecke, die an einem diskreten Ort hergestellt wurde. Trotzdem kann es zu offensichtlich sein, dass eine zufällige Zeichenfolge herumsteht.

Welche Möglichkeiten gibt es, meinen Namen in einem Programm zu verbergen, ohne dass er verdächtig aussieht?

Ich habe bei CodeGolf gesehen, dass sie ASCII-Kunst zu anderen Dingen gemacht haben, wenn sie bewertet wurden. Gibt es ähnliche Strategien, die ich anwenden könnte? Die ideale Lösung wäre etwas, das wie etwas aussieht, das diskret hineinpasst, aber in Wirklichkeit die Funktion hat, zu beweisen, dass ich es von Anfang an codiert habe.

Klarstellung: (Entschuldigung, hätte das früher sagen sollen) Wir dürfen zusammenarbeiten, müssen aber den TAs unsere Programme erklären, um die Punkte zu bekommen. Es ist nur zur Befriedigung, einige Ostereier im Code eines anderen zu verstecken, wenn dieser ausläuft, zumal es verlockend sein kann, Programme auszutauschen, um zu überprüfen, ob die Antworten auf von ihnen verursachte Probleme gleichwertig sind usw. oder um zu sehen, wie andere das Problem lösen.

MikeFoxtrot
quelle
70
Teile keinen Code, sondern teile Ideen
Ratschenfreak
7
Was ich vor ein paar Jahren getan hatte, war eine Variable mit einem bestimmten Namen (in meinem Fall "pkmn"), die ich in jedem von mir geschriebenen Code verwendete, für Dinge, die nicht auffielen (die Art von Dingen, die man normalerweise "i" nennt). j "...). Wenn jemand meinen Code gestohlen hat, hat er nicht den gesamten Code durchsucht und die Variable unberührt gelassen. Das war meine Unterschrift.
DrakaSAN
29
Warum fragst du uns? Fragen Sie Ihren Professor oder TA, welches Verhalten an Ihrer Schule angemessen ist .
Eric Lippert
6
Dies ist eine Anwendung der Steganographie . Normalerweise beinhalten die Anwendungen in der realen Welt das Ausblenden von Nachrichten in Ton, Bild oder anderen verlustbehafteten Formaten, aber der allgemeine Fall ist hier anwendbar. Die akzeptierte Antwort ist gut, aber ich würde auch empfehlen, etwas über Steganographie zu lernen.
2
Wie wäre es, wenn Sie nur subtil defekten Code veröffentlichen?
Benjol

Antworten:

44

Verwenden Sie Ihre Signatur nicht in Ihrem Code, sondern in einem öffentlich zugänglichen Entwicklungsprotokoll.

Veröffentlichen Sie Ihren Code in einem öffentlichen Github-Repo. Fügen Sie einen Docblock mit Ihrem Namen in das Feld "Autor" ein. Auf diese Weise ist öffentlich bekannt, dass Sie der eigentliche Autor des Programms sind.


Dies kann nicht als "Verstecken" qualifiziert werden, aber meiner Meinung nach tut es dies. Wenn ein Schüler beschließt, Ihren Code zu kopieren, wird er denken, dass er nur seine Unterschrift gegen Ihre austauschen muss. Stellen Sie sich ihre Überraschung vor, wenn Sie öffentlich Beweise für ihr Fehlverhalten vorlegen. Um die Sache noch schlimmer zu machen, ist es online verfügbar. Sie können sogar ein Online-Tool wie Diffchecker verwenden , um zu demonstrieren, welche Teile Ihres Codes gestohlen wurden!

BEARBEITEN: wie in den Kommentaren erwähnt, sicher, dass Ihre Schule es ermöglicht, Ihre Arbeit auf diese Weise zu teilen! OP gab an, dass ihre Institution damit einverstanden ist, aber Ihre möglicherweise nicht!

sbichenko
quelle
26
@exizt - Dies ist zwar eine gute Idee nach einem schulischen Umfeld. Ich habe meine Zweifel, dass die meisten formellen Situationen in einem schulischen Umfeld dies akzeptieren würden, weil Sie am Ende immer noch Ihre Arbeit mit anderen Schülern teilen. Es ist am besten, wenn Sie Ihre Schule alleine lassen, bis Sie eine Note dafür erhalten haben.
Ramhound
4
@exizt - Professoren machen sich Sorgen um Betrug. Sofern der Professor nicht sagt, dass Sie mit einem anderen Studenten arbeiten können, gehen sie normalerweise davon aus, dass Sie keinen Code von Ihren Kollegen stehlen werden. Wenn Sie mit dem Programm brauchen, wird erwartet, dass Sie zum TA gehen und / oder nicht zu Ihren Kollegen. Aus diesem Grund habe ich vorgeschlagen, Ihre Arbeit für sich zu behalten, bis Sie eine Note erhalten. Während es alles warm und verschwommen ist, möchte der Autor seinen Kollegen helfen, es ist nicht sein Problem, dass sie die Arbeit nicht ohne Hilfe machen können. Er kann helfen, nur keine Beweise für eine solche Tat zu haben. Wenn er da sitzen und etwas erklären will
Ramhound
4
Wie würde dies den ursprünglichen Autor auflösen? Die Person, die Ihren Code gestohlen hat, könnte einfach behaupten, dass sie ihn vor dem Einchecken des Githubs geschrieben hat und dass Sie ihn ihnen gestohlen haben. Ich sehe nicht, dass dies das Problem in der Frage anspricht.
Adam Davis
7
Nachdem ich an meiner Universität studiert habe, weiß ich (und wenn ich sehe, wie es passiert), dass Sie nach dieser Antwort wegen akademischen Fehlverhaltens angeführt werden. Mir ist keine Universitätspolitik in meinem Land (Australien) bekannt, die in Bezug auf Plagiate zwischen Kopierer und Kopierer unterscheidet, und ich bezweifle, dass sie anderswo wesentlich anders sein würde. Es ist viel sicherer, Ihren Code für sich zu behalten!
Sapi
2
Git erlaubt dem Commit, beliebige Zeitstempel zu setzen. Ich bezweifle, dass Sie sich auf ein Git-Repo verlassen können, wenn es um Beweise geht.
Zan Lynx
14

"Da diese von den TAs geprüft werden und sie möglicherweise bemerken, dass jemand dasselbe Programm hat"

, hoffe ich, gehört es zu ihren Aufgaben, Betrug, Plagiat und andere Betrugsfälle aufzudecken und zu bestrafen.
Und die Arbeit anderer zu duplizieren und sie als deine eigene weiterzugeben, ist das, Betrug und Plagiat.

Ganz einfach: Überlassen Sie Ihre Arbeit nicht anderen. Helfen Sie ihnen, ihre eigenen zu schreiben, indem Sie ihnen Ideen zur Lösung von Problemen geben, und lassen Sie sie dann ihre eigene Codierung vornehmen.

jwenting
quelle
Bingo. Die erste Regel für Nachhilfe ist, dass Sie den Leuten helfen sollten, selbst Lösungen zu finden. Wenn Sie nicht möchten, dass Leute Ihren Code stehlen, geben Sie ihnen den Code nicht. Wenn Sie ihnen helfen möchten, veröffentlichen Sie Hinweise, Listen hilfreicher Algorithmen und Datenstrukturen oder allgemeine Beschreibungen der Lösung.
Sean McSomething
2
Die Zusammenarbeit auf Code-Ebene bietet viele Vorteile. 1) Üben Sie, anderen den Code zu erklären. 2) Bauen Sie Arbeitsbeziehungen auf. 3) Lernen Sie die Talente Ihrer Klassenkameraden. 4) Lernen Sie von Klassenkameraden, wenn Sie nicht die beste Lösung haben. Gruppen, die ihre Anstrengungen bündeln, übertreffen die Stars auf den Inseln. Kommilitonen werden immer Feinde sein; OP versucht, das Beste aus der Freundschaft herauszuholen und gleichzeitig die gelegentliche feindliche Seite zu bekämpfen.
Duozmo
@duozmo nichts Falsches an der Zusammenarbeit (WENN die Zuweisung es natürlich zulässt), solange du nicht die Arbeit eines anderen für ihn erledigst. Und nein, meine Kommilitonen waren während meines Studiums nie Feinde. Im schlimmsten Fall waren sie Konkurrenten für die schönsten Aufgaben.
Jwenting
7

Wie die obige Antwort, die ich mit etwas wie Github ermutige, um Ihre Entwicklung des Codes zu protokollieren, gibt es andere Methoden, die Sie verwenden könnten, um sich zu verstecken, wie z was ich dringend empfehlen würde.

Dies ist natürlich der Fall, wenn die gemeinsame Nutzung von Code dringend erforderlich ist. Was ist mit Pseudocode? oder wie "Ratschenfreak" feststellte, teile die Idee nicht die Umsetzung. (Dies ist sinnvoller für komplexeren Code)

CraigChilds94
quelle
7

Sie können auch einen der ältesten Tricks verwenden, um Nachrichten auszublenden. Lassen Sie den ersten Buchstaben jeder Variablen eine Nachricht ausblenden. Beispielsweise,

$Image = "test";
$a = "/test/img.jpg";
$message = "This is img.jpg";
$Full = 435674;
$rate = 3;
$ascii = "---....!--";
$number = 2040;
$k = 5;

// Do some work here?
Francisco Presencia
quelle
6
Ich würde nicht auf so etwas angewiesen sein - wenn sie seinen Code verwenden, wäre das Ändern von Variablennamen und -reihenfolgen ein offensichtlicher Schritt, um nicht beim Kopieren erwischt zu werden.
thegrinner
6

Ich denke, dass GitHub oder eine ähnliche Lösung in Ordnung ist, ABER es gibt zwei Dinge zu beachten:

  • Dies gibt deine Arbeit immer noch an andere, die es von sich aus tun sollen. Es kann also strafbar sein, ob du eine Art Osterei darin versteckst oder nicht.
  • Die Politik der Schule könnte in solchen Dingen tatsächlich ziemlich restriktiv sein. In Deutschland gibt es zum Beispiel eine Reihe von Universitäten, die ihre Studenten sogar dazu bringen, eine Art "Vertrag" zu unterzeichnen, in dem angegeben ist, dass alles, was sie im Rahmen einer in diesem und jenem Kurs erteilten Aufgabe entwickeln, Eigentum der Universität ist und dürfen ohne ausdrückliche Genehmigung der Einrichtung nicht in irgendeiner Form verbreitet werden. Bevor Sie Schulsachen ins Internet stellen, rate ich Ihnen dringend, sich zu erkundigen (es gibt normalerweise Leute, die in jeder Bildungseinrichtung und wissenschaftlichen Einrichtung an diesen Dingen arbeiten), da Sie möglicherweise tatsächlich in Schwierigkeiten geraten, und damit meine ich nicht nur ein F bekommen, aber viel schlimmer. Wenn du deinen Freunden wirklich helfen willst,
rbaleksandar
quelle
Das sind alles sehr gute Punkte! Ich habe sie in meiner Antwort überhaupt nicht berücksichtigt.
sbichenko
Danke für die Sorge, gute Punkte :) Wir dürfen mit anderen bei den Aufgaben zusammenarbeiten, aber ich möchte nicht, dass die Leute meinen Code für ihre Aufgabe kopieren, wenn ich einen Teil davon teile.
MikeFoxtrot
4

Kartografen haben das gleiche Problem . Ein paar Techniken:

  1. Führen Sie eine unwahrscheinliche Abweichung vom traditionellen Stil Ihrer Sprache ein, z

    if (lefthand== righthand)

  2. Verteile No-Ops in deinem Code, wenn sie Teil der von dir verwendeten Sprache sind.

    lefthand = righthand;;

duozmo
quelle
(1) würde auseinanderfallen, wenn Schüler so etwas wie den Auto-Formatierer von Eclipse verwenden. (2) mit den NOPs ist eine nette Sache.
Richard Le Mesurier
Wie würden Sie beweisen, dass die Leute auf Sie kopiert haben und nicht umgekehrt?
Pierre Arlaud
2
@ArlaudPierre, wie eine Person zuvor sagte, der Trick ist, für alle Programme ab Jahresbeginn so etwas zu verwenden, damit Sie nachweisen können, dass Sie es absichtlich getan haben und die andere Person nicht.
MikeFoxtrot
Der erste ist Blech und kann, wie bereits erwähnt, leicht von einem Formatierer besiegt werden. Der zweite Befehl gibt in jeder guten IDE Warnungen aus.
David Conrad
3

Vermeidung von Plagiaten in NICHT Ihrem Beruf als Student, das liegt ausschließlich in der Hand eines Ausbilders / TA.

Im Allgemeinen behandeln Schule als wäre es ein Closed-Source-Geschäft. Ihre Kommilitonen sind Kollegen für andere Arbeitgeber. Sie können keinen Code über einfache Liner und dergleichen hinaus freigeben und NIE ganze Klassen oder Projekte freigeben .

Das Verstecken von "Easter Eggs" im Code wird allgemein als unprofessionell angesehen. (Meinungen können hier abweichen)

Machen Sie keinen stinkenden Code zu Ihrer Unterschrift

Ihre "Signatur" oder wie Sie Ihren Code von anderen unterscheiden, sollte geschmackvoll sein und Ihren Code in keiner Weise "riechen". Aus diesem Grund rate ich dringend von Folgendem ab:

  • Absichtlich falsch geschriebene Dinge (Variablen, Methodennamen)
  • Absichtliches Hinzufügen von Code "Kuriositäten" wie No-Ops, um Code als Ihren zu kennzeichnen.
  • Verwenden nicht standardmäßiger oder ungewöhnlicher Codestrukturen (Leerzeichen, Zeilenumbrüche usw.)
  • Verwenden von nicht standardmäßigen oder ungewöhnlichen Codierungsmustern (tatsächliche Codelogik)
  • Unnötige Verschleierung von Code (Begraben von Methoden mit in Methoden ohne Grund)
  • Jede andere Art von Code-Trick oder Zauberei, um ihn auf ungewöhnliche Weise zu unterscheiden.

Wie schütze ich dann meinen Code ?!

Im Allgemeinen ist die Einschränkung der Verfügbarkeit der beste Weg, um Ihren Code zu schützen. Wenn Sie es nicht veröffentlichen und niemand Ihren Computer hackt, ist Ihr Code im Allgemeinen sicher. Sicher, es könnte dekompiliert, rückentwickelt usw. werden. An diesem Punkt ist es sowieso nicht so, als würde es dem Code entsprechen, der es generiert hat.

Ich möchte es veröffentlichen, aber verhindern, dass es plagiiert wird

Nur nein ... Auf jeden Fall könnte ein Plagiat durch unordentliche Zauberei in Ihrem Code auffallen, vorausgesetzt, er stellt seinen Code ebenfalls zur Verfügung ... und das werden sie auch nicht .

Es wird Sie auch schrecklich aussehen lassen, wenn andere Ihren Code durchsehen und gehen. "Was zum Teufel ist mit all den Tippfehlern und No-Ops?"

Aber ich möchte eine Codesignatur, etwas, das ich mir ansehen und sagen kann, dass ich das getan habe, ich war es, das gehört mir

Ehrlich gesagt, wenn Sie gut programmieren, sollte es im Allgemeinen nicht von jedem anderen Code in den Projekten zu unterscheiden sein, an denen Sie arbeiten. Sicher, es könnten Nuancen sein, die Ihnen zeigen, woran Sie gearbeitet haben, und welche Bob getan hat, aber diese sollten ziemlich mild sein.

Der einzige Zeitcode, der bei Gleichaltrigen auffällt, ist, wenn etwas neu ist und noch nie in Ihrem Kreis gemacht wurde, oder wenn es auf eine Weise riecht, die für Ihren Kreis einzigartig ist.

RualStorge
quelle
Du willst "versus", nicht "versus". Es sei denn, Sie und Bob schreiben Gedichte. ;)
David Conrad
@DavidConrad Danke, Code ist doch Poesie;) entsprechend korrigiert.
RualStorge
1

Da das Problem darin besteht, eine Signatur im Quellcode zu verstecken, wo

  • es wird nicht sofort offensichtlich sein
  • es kann nicht zufällig oder versehentlich entfernt werden
  • es kann bei Bedarf bis zu einem Grad an Sicherheit wiedergefunden werden, der einen Beweis darstellen würde.

Eine interessante Variante der Steganographie .

Sie können keine Formatierung oder Leerzeichen verwenden, da dies von jeder kompetenten IDE trivial entfernt werden kann.

Das lässt wirklich nur die Benennung von Variablen und Funktionen zu. Sie können keine gemeinsame unterscheidende Teilzeichenfolge verwenden, da sie durch Suchen und Ersetzen zu leicht entfernt werden kann. Dadurch werden eindeutige und originelle Variablennamen verwendet, die einzeln entfernt werden müssten. Rechtschreibfehler und fremdsprachige Wörter sind gute Kandidaten.

if (a== x) {}   // disappears on reformatting
int gghhjj_i;   // easily removed by search and replace, if all the same
int couunt = 0;  //spelling
int nummer = 0; // german
float doppel = 0.0; // german
string spago = "xx"; // italian
boolean manana = true; // spanish
struct perzon;  // excess use of z's.
class employeej; // what if every variable contained a 'j'?

Die Möglichkeiten für Kreativität sind grenzenlos!

Dann wird eine einfache Textverarbeitung zum Extrahieren und Vergleichen von Token die Plagiatoren schnell erkennen.

david.pfx
quelle
2
Ich werde das wirklich entmutigen. Während A den kreativen Weg zur Lösung dieses Problems lobt, kann dies zu Gewohnheiten führen, mit denen sich kein Fachmann befassen möchte. Das Ändern eines Briefes usw. ist nicht schlecht, aber absichtlich falsch geschrieben ist eine schreckliche Angewohnheit, wenn Sie in Teams arbeiten. "Oh, hey, es ist im 'common'-Ordner", "Ich finde keinen Ordner mit dem Namen' common '", "Oh Mist, ich meine' commom '", "... ist das' com_mom ',' comm_mom ',' commmom 'oder' commom '... "
RualStorge
Sie haben offensichtlich nicht mit bestimmten Outsourcern zusammengearbeitet, bei denen Englisch nicht die Muttersprache ist. Ich habe 11 verschiedene Schreibweisen des Wortes "Ansage" gezählt (zumindest denke ich, dass dies so war).
david.pfx
Ich habe "Commom" genau so bekommen. Es war etwas, mit dem wir gelebt haben, bis es jemanden genug verärgert hat, um das zu beheben, was das beleidigende Wort des Tages ist. Das Hinzufügen zu diesem Problem zum Zweck, als "Ihre Unterschrift" hervorzuheben, ist
schauderhaft
@ RualStorge: Ah. Eine geniale Antwort, aber vielleicht keine, die man bei einem Interview ausprobieren sollte?
david.pfx
1
Nein, aber andererseits gibt es viele viele Dinge, die man in einem Interviewprozess nicht sagt. Wie ein Unternehmen mit einer schlechten Projektmanagement Eingabe ... sagt man nicht planen sie aktiv subtile Ausflucht und Borderline - Aufsässigkeit verwenden des Unternehmens Praxis und Politik zu verbessern, aber hier sind wir;)
RualStorge
1

duozmos Vorschlag, noops zu verwenden, führt möglicherweise zu schlechten Noten für die Schlamperei, aber das könnte eine gute Sache sein, wenn Sie Code in einem Beispiel verwenden, der nicht wörtlich verwendet werden soll.

Das hat mich dazu inspiriert, über ein abwechselndes Signaturmuster von Tabulatoren und Leerzeichen in führenden und nachfolgenden Leerzeichen nachzudenken.

Andy Dent
quelle
4
Es gibt bereits eine Sprache dafür - en.wikipedia.org/wiki/Whitespace_(programming_language)
Ondrej Svejdar
0

Ähnliches habe ich zuvor getan, um Variablen zu erstellen, die die gleichen Namen wie andere wichtige Variablen haben, deren Namen jedoch abhängig vom Texteditor abgelegt werden, sodass die Änderung nicht leicht erkennbar ist, oder um Buchstaben mit Akzenten zu verwenden. Rufen Sie mehrere Funktionen auf, an die Sie viele wichtige Variablen des Programms aus einer if-Anweisung senden, und verwenden Sie dabei Ihre Variablen, die niemals wahr sein werden, z. B. if (1eft == wrōng).

Sie sollten in der Lage sein, verschiedene Tutorials zum Thema 'Wie schreibe ich nicht wartbaren Code?' Zu finden, die hilfreich sein könnten.

sanepete
quelle
Dies sollte jedoch Ihre Spuren verlieren, da die Programme nicht so gut sind, wie sie sein sollten, und auch die TAs sie nicht lesen können
user151019
Ihre Note wird in der Regel dafür bestraft, wenn dies bemerkt wird. Niemand mag es, wenn Sie nach "logRepository" suchen, nur um herauszufinden, dass es tatsächlich "1ogRepository" ist. Es lässt Sie nur schlecht aussehen.
RualStorge
Das hat mir gesagt. Ich hole meinen Mantel.
Sanepete