Verfinsterung (Software)

In der Softwareentwicklung ist verfinsterter Code die vorsätzliche Handlung, Quelle zu machen, oder Maschine codieren schwierig, durch Menschen zu verstehen.

Programmierer können Code absichtlich verfinstern, um seinen Zweck (Sicherheit durch die Zweideutigkeit) oder seine Logik zu verbergen, um zu verhindern, herumzubasteln, Rücktechnik, oder als ein Rätsel oder Erholungsherausforderung für jemanden abzuschrecken, den Quellcode lesend.

Programme bekannt als obfuscators gestalten lesbaren Code in den verfinsterten Code mit verschiedenen Techniken um.

Übersicht

Die Architektur und Eigenschaften von einigen Sprachen können sie leichter machen zu verfinstern als andere. C, C ++, und Perl sind einige Beispiele von Sprachen, die leicht sind zu verfinstern.

Erholungsverfinsterung

Das Schreiben und das Lesen des verfinsterten Quellcodes können ein Gehirnnecker für Programmierer sein. Mehrere Programmierstreite belohnen den am kreativsten verfinsterten Code: der Internationale Verfinsterte C-Codestreit, Verfinsterte Perl-Streit und Internationale Verfinsterte Rubinrote Codestreit.

Typen von Verfinsterungen schließen einfachen Schlüsselwort-Ersatz, Gebrauch oder Nichtgebrauch von whitespace ein, um künstlerische Effekten, und das Selbsterzeugen oder die schwer zusammengepressten Programme zu schaffen.

Kurze verfinsterte Programme von Perl können in Unterschriften von Programmierern von Perl verwendet werden. Das ist JAPHs ("Gerade ein anderer Hacker von Perl").

Beispiele

Das ist ein Gewinnen-Zugang vom Internationalen Verfinsterten C-Codestreit, der von Ian Phillipps 1988 geschrieben ist, und kehren Sie nachher konstruiert von Thomas Ball um.

/ *

AM WENIGSTEN WAHRSCHEINLICH ERFOLGREICH ZU KOMPILIEREN:

Ian Phillipps, Cambridge Consultants Ltd., Cambridge, England

  • /
  1. einschließen

wichtig (t, _,)

Rotforelle

a;

{\

kehren Sie zurück!

0

Es ist ein C Programm, das, wenn kompiliert und geführt die 12 Verse Der 12 Tage von Weihnachten erzeugen wird. Es enthält alle Schnuren, die für das Gedicht in einer verschlüsselten Form innerhalb des Codes erforderlich sind.

Ein Nichtgewinnen-Zugang von demselben Jahr illustriert das folgende Beispiel kreativen Gebrauch von whitespace; es erzeugt Irrgärten der willkürlichen Länge:

char*M, A, Z, E=40, J [40], T [40]; wichtig (C) {für (*J=A=scanf (M = "% d" ,&C);

- E; J [E] =T

[E] = E) printf (". _ "); für ((A-= Z =! Z) || (printf (" \n |"

) = 39, C -

); Z || printf (M)) M [Z] =Z [A-(E =A [J-Z])

&&!C

& == T [EIN]

|6

Moderne C Bearbeiter erlauben unveränderlichen Schnuren nicht, überschrieben zu werden, der durch das Ändern "*M" zur "M [3]" und das Auslassen "der M =" vermieden werden kann.

Das folgende Beispiel durch Óscar Toledo Gutiérrez, Am besten des Show-Zugangs im 19. IOCCC, führt einen 8080 Emulator durch, der mit dem Terminal und Plattenkontrolleur abgeschlossen ist, der zum Starten CP/M-80 und Laufen von Anwendungen des BEDIENUNGSFELDES/M, fähig

isteinschließen

#define n (o, p, e) =y = (z=a (e) %16 p x%16 p o, (e) p x p o), h (

#define s 6 [o]

#define p z=l [d (9)] |l [d (9) +1]

#define O)) :((

#define b (y&1?~s:s)>>" \6\0\2\7" [y/2] &1?0: (

#define S)? (z-=

#define (f) * ((7&f) -6?&o [f&7] :&l [d (5)])

#define C S 5 S 3

#define D (E)

x/8!=16+E&198+E*8!=x?

#define B (C) fclose ((C))

#define q (c + = 2,0 [c-2] |1 [c-2]

+64506; e, V, v, u, x, y, z, Z; wichtig (r, U) Rotforelle ** U; {\

{{{}}} {{{}}} {{{}}} {{{}} }\

{{{}}} {{{}}} {{{}}} {{{}} }\

{{{}}} {{{}}} {{{}}} {{{}} }\

{{{}}} {{{}}} {{{}}} {{{}} }\ {{{}}} {{{}}} {{{}}} {{{}} }\

{{{}}} {{{}}} {{{}}} {{{}} }\

{{;}} {{{}}} {{;}} {{{}} }\

{{{}}} {{{}}} {{{}}} {{{}} }\ {{{}}} {{{}}} {{{}}} {{{}} }\ {{{}}} {{{}}} {{{}}} {{{}} }\ {{{}}} {{{}}} {{{}}} {{{}} }\ {{{}}} {{{}}} {{{}}} {{{}} }\ {{{}}} {{{}}} {{{}}} {{{}} }\

für (v ((u ((e ((r-2? 0: (V (1 [U])), "C")

) System ("stty Rohstoff - werfen Minute 0 zurück"), fread (l, 78114,1, e), B (e), "B")), "A")); 118-(x

*c ++); (y

x/8%8, z = (x&199)-4 S 1 S 1 S 186 S 2 S 2 S 3 S 0, r = (y> 5) *2+y, z = (

x&

207)-1 S 2 S 6 S 2 S 182 S 4)? D (0) D (1) D (2) D (3) D (4) D (5) D (6) D (7) (z=x-2 C C C C

C C C C+129 S 6 S 4 S 6 S 8 S 8 S 6 S 2 S 2 S 12)? x/64-1? ((0 O (y) =a (x) O 9

[o] =a (5), 8 [o] =a (4) O 237 ==*c ++? ((interne Nummer (*) ) (2-*c ++? fwrite:fread)) (l +*k+1 [k] *

256,128,1, (fseek (y=5 [k]-1? u:v, ((3 [k] |4 [k]

y=Q^ = x, h (y) O M z=Q*2|2*x,y=Q&=x,h (y) O M Q n (s%2, - 7) y) O M Q n (0, - 7) y) O

M Q n (s%2, +, 7) y) O M Q n (0, +, 7) y) O z=r-8? d (r+1) :s |Q

+o [r-1] +z/256,s=~1&s|z>>8 O ++ o [r+1] || r [o] ++ O o [r+1] = *c ++, r [o] = *c ++ O z=c-l, w

, c=y*8+l O x=q, b z=c-l, w, c=l+x) O x=q, b c=l+x) O b p, c=l+z) O (y) = *c ++ O r=y

, x=0, (r) n (1, - y) s

Ein Beispiel eines JAPH:

@P=split//,".URRUU\c8R"; @d=split//," \nrekcah xinU / lreP rehtona tsuJ"; U-Boot p {\

@p {"r$p", "u$p"} = (P, P); Pfeife "r$p", "u$p"; ++ $p; ($q * = 2) + = $f =! Gabel; Karte {$P=$P [$f^ord

($p {$ _}) &6]; $p {$ _} = / ^ $P/ix? $P:close$ _} keys%p} p; p; p; p; p; Karte {$p {$ _} = ~/^ [P].

/&&

close$ _} %p; warten Sie auf until$?; Karte {/^r/&&

</Quelle>

Das zeigt langsam den Text "Gerade ein anderer Perl / Hacker von Unix", vielfache Charaktere auf einmal mit Verzögerungen. Eine Erklärung kann hier gefunden werden.

Einige Pythonschlange-Beispiele können in der offiziellen Pythonschlange gefunden werden, häufig gestellte Fragen programmierend.

Nachteile der Verfinsterung

Bestenfalls, Verfinsterung macht bloß sie zeitraubend, aber nicht unmöglich, um umzukehren, konstruiert ein Programm. In Java beschränkt es auch den Gebrauch der Nachdenken-Anwendung, Schnittstelle auf dem verfinsterten Code programmierend. Eine Antivirus-Software, wie AVG, wird auch ihre Benutzer alarmieren, wenn sie auf einer Seite mit dem verfinsterten Code landen, weil einer der Zwecke der Verfinsterung sein kann, böswilligen Code zu verbergen. Das jedoch, kann ein schnelles Abschreckungsmittel den meisten Menschen sein, die nicht annehmen, dass eine Berufsseite durch ihre Antivirus-Software beflaggt wird.

Das Verfinstern der Software

Eine Vielfalt von Werkzeugen besteht, um zu leisten oder mit der Codeverfinsterung zu helfen.

Diese schließen experimentelle Forschungswerkzeuge ein, die von Akademikern, Hobbyist-Werkzeugen, geschaffen sind

kommerzielle Produkte, die von Fachleuten und Software der offenen Quelle geschrieben sind.

Dort auch bestehen deobfuscation Werkzeuge, die versuchen, die Rückseite durchzuführen

Transformation.

Obwohl die Mehrheit von kommerziellen Verfinsterungslösungen arbeitet, indem sie sich verwandelt

jede Programm-Quelle

Code oder mit der Plattform unabhängiger bytecode, wie verwendet, durch

Java und

.NET, es gibt auch einen dass Arbeit mit C und

C ++ - Sprachen, die normalerweise zum heimischen Code kompiliert werden.

Verfinsterung und Copyleft-Lizenzen

Es hat Debatte darüber gegeben, ob es zum Rock copyleft Softwarelizenzen durch die Ausgabe des Quellcodes in der verfinsterten Form, solcher als in Fällen ungesetzlich ist, in denen der Autor weniger bereit ist, den Quellcode bereitzustellen. Die allgemeine Einigkeit bestand darin, dass, während unmoralisch, es als keine Übertretung betrachtet wurde. Das Problem wurde für die GNU-Lizenz der Breiten Öffentlichkeit geklärt, als es verändert wurde, um zu verlangen, dass die "bevorzugte" Version der Quelle codiert bereitgestellt werden.

Siehe auch

Referenzen

  • B. Barak, O. Goldreich, R. Impagliazzo, S. Rudich, A. Sahai, S. Vadhan und K. Yang. "Auf der (Im) Möglichkeit, Programme Zu verfinstern". 21. Jährliche Internationale Cryptology Konferenz, Santa Barbara, Kalifornien, die USA. Springer Verlag LNCS Band 2139, 2001.

Links


Operationsandauern-Freiheit / Ötzi der Eismann
Impressum & Datenschutz