Beeinflusst die Verschleierung die Leistung?

8

Beeinflusst das Verschleiern eines Java-Programms seine Leistung (ausgenommen das Umbenennen von Dingen)?

    
Albus Dumbledore 16.03.2010, 13:08
quelle

5 Antworten

6

Auf jeden Fall ja: Außer im einfachsten Fall, wo nur Bezeichner-Namen verschlüsselt sind, ist es nur eine Frage, wie stark die Leistung betroffen ist. Weitere Details zum Beispiel hier , allgemeine Informationen zu Verschleierungstechniken finden Sie im Verschleierten Code Wikipedia-Artikel.

    
quelle
6

Im Allgemeinen wirkt sich die Verschleierung durch Umbenennen von Variablen, Methoden und Klassennamen auf bedeutungslosere Namen nicht auf die Leistung aus. Einige Anbieter von Verschleierungsprogrammen behaupten sogar, dass es abgesehen von der Verschleierung auch einen Leistungszuwachs von bis zu 30% gibt. Obwohl ich diese Behauptungen nie getestet habe, habe ich sie nie bewiesen und daher schwer zu glauben gefunden.

Beachten Sie jedoch, dass einige Software auch die Verschleierung von Datenflüssen ermöglicht: Hinzufügen von bedeutungslosen Steuerschleifen zu Anweisungen, sodass der Code schwerer zu befolgen ist. Das wirkt sich negativ auf die Leistung aus, wenn auch gering.

    
Razzie 16.03.2010 13:16
quelle
1

Nein. Verschleierung ersetzt einfach deinen sinnlich benannten Code durch einen urnbaren. In einigen Fällen (zum Beispiel bei der Verwendung von ProGuard, kann unser Code sogar "optimiert" werden, indem alle unbrauchbaren Codeblöcke entfernt werden (wie if(false) und identische Anweisungen).

BEARBEITEN (um die Ideen von Magesh zu verdeutlichen).

Wenn Sie einen Obfuscator verwenden (und NICHT mit der Hand verschleiern, was keine gute Idee ist), lädt er Ihre Klassen und fügt einige Methoden oder Code-Blöcke (wie die oben genannten) hinzu, um den Code für erhaltene große Blöcke zu vereinfachen . Als Konsequenz gibt es weniger Methodenaufrufe, die weniger Stack-Nutzung erfordern, und dann das Schließen der Anwendung.

Die andere Sache, die ein Obfuscator normalerweise macht, um alle Variablen von mySmartVariable in a$a$a umzubenennen, was das Dekompilieren unmöglich macht (da ein Java Decompiler $ als das Symbol zur Identifizierung innerer und anonymer Klassen betrachtet, und nicht Variablen).

    
Riduidel 16.03.2010 13:10
quelle
0

Wenn Sie redundanten Code hinzufügen, der nie durchlaufen wird, nein. Wenn Sie Logik hinzufügen, die bei der normalen Ausführung Ihres Codes durchlaufen werden muss, dann wirkt sich dies auf die Leistung aus. Wie sehr es darauf ankommt, welche unlogische Struktur du zu verwirren versucht hast, wäre Software-Piraten.

    
wheaties 16.03.2010 13:13
quelle
0

Manchmal, ja. In Java ME (die "Handy-Version" von Java) arbeitet die Verschleierung an dem kompilierten Byte-Code und ersetzt (unter anderem) Namen durch kurze, automatisch generierte. Dies macht den Byte-Code kürzer, was es zumindest schneller macht, die Anwendung über das Netzwerk herunterzuladen.

    
Thomas Padron-McCarthy 16.03.2010 13:14
quelle

Tags und Links