Methoden-Variablen in ProGuard verschleiern

W

Wurstbr00t

Hallo,

ist es möglich die Variablen in einer Methode zu verschleiern? Ich möchte nicht, dass man erkennt, wie die Methode arbeitet.

z.B. aus

Code:
public void checkCounter()
{
     int counter = user.getCounter();
     if(counter >= 10)
     {
          Signature sig = Signature.getInstance("MD2withRSA", "SunRsaSign");
     }
}



sollte dann sowas werden:



Code:
public void a()
{
     int x = s.as();
     if(x >= 10)
     {
          v sd = v.kj("MD2withRSA", "SunRsaSign");
     }
}


Der ideale Fall wäre es, wenn man "MD2withRSA" und "SunRsaSign" auch nicht in Klartext sehen könnte. Ist so etwas möglich und wenn ja, wie?
 
Hi sheel,

vielleicht habe ich mich nicht korrekt ausgedrückt. Ich benutze bereits ProGuard. Dadurch wird auch sehr viel obfuscated, allerdings nicht die Methodenvariablen. Im ganz Speziellen sind es denke ich die Java-spezifischen, also Strings, Integer, Signature etc. Das sollte eigentlich auch verschleiert werden. In den wichtigen Methoden werden allerdings gar keine Variablennamen verschleiert, auch nicht was es für ein Variablentyp ist. Das würde ich gerne ändern :)
 
Dann solltest du dir einen besseren (d.h. korrekt funktionierenden) Obfuscator zulegen. Allerdings ist das Obfuscaten von Code nicht besonders sinnvoll, da man sowieso wieder an den Code ran kommt ;)
 
Vielleicht hab ich ja die Einstellungen von ProGuard einfach nur noch nicht komplett korrekt. Ich weis aber momentan nicht, wie ich es einstellen soll, dass Javaklassen nicht gekeept werden.

Was für einen Obfuscator würdest Du mir denn empfehlen? Er muss allerdings auch mit Android funktionieren. Und was würdest du dann machen, um den Code zu sichern?
 
Hi,
schau dir doch mal den yGuard an. Mit dem habe ich selber auch schon ein paar mal gearbeitet. Funktioniert echt super. Die Deopfuscater-Programme haben danach kein leichtes Spiel mehr. ;)
Allerdings weiß ich nicht ob das auf für Android funktioniert. Würde mich allerdings wundern wenn nicht, da das schließlich auch nur Java-Code ist.

Gruß

Fabio
 
Guten Morgen Fabio,

dank dir schonmal. yGuard werd ich mir definitiv anschauen. Ich hätte allerdings noch eine Frage zu den Einstellungen. Ich habe eine View und die erstellt eine Variable vom Object Auto. Die View muss ich keepen, sonst wird sie gelöscht und meine App startet nicht. Durch dieses keepen wir automatisch auch die Klasse Auto gekeept, was wiederrum bedeutet, dass man sie fast komplet einsehen kann(mein oben schon beschriebenes Problem mit den Methodenvariablen). Ist es möglich die Klasse Auto vom löschen zu schützen, ohne, dass sie umbenannt wird(incl variablen)?
 
Klar gibt es diese Möglichkeiten. Du kannst yGuard auch jede Methode einzeln nennen, die er nicht obfuscaten soll.

In diesem Beispiel würdest du alle Klassen, Methoden und Fieldvariablen die protected oder public sind vor der Obfuscation ausschließen. Das kannst du variable einstellen. Auch für jede Klasse, Methode und Fieldvariable einzeln wenn du möchtest. Eine Tabelle dazu, bei welcher Sichtbarkeit diese von der Obfuscation ausgeschlossen werden findest du hier.
XML:
<target depends="jar" name="yguard">
   <taskdef name="yguard" classname="com.yworks.yguard.YGuardTask"
   classpath="yguard.jar"/>
   <!-- the following can be adjusted to your needs -->
   <yguard>

      <inoutpair in="${jar}" out="${obfjar}"/>

      <shrink logfile="${shrinklog}">
         <keep>
            <class classes="protected" methods="protected" fields="protected"></class>
         </keep>
      </shrink>
   </yguard>
</target>
Sieh dir am Besten mal die Beispiel auf der Homepage von yGuard an. Da wird dir dann bestimmt einiges klarer. ;)
 
Zuletzt bearbeitet von einem Moderator:
Ok, vielen dank. Ich werde mich nächste Woche mit yGuard beschäftigen. Heute geb ich ProGuard noch ne Chance;)
 
Hallo,

falls es euch interessiert, schreib ich noch, wie die Sache jetzt ausging. Als ich bleibe bei ProGuard erstmal. Die localen Variablen in einigen methoden wurden obfuscated, allerdings hat der Dekompiler sie wieder ersetzt durch eigene Namen: local... z.B.. Ach und Standardbibliotheken wie java.security können nicht obfuscated werden!


Nun versuch ich weiterhin meinen Code zu sichern. Habe diese Pdf gefunden und probier einmal mein Glück:

http://users.rowan.edu/~tang/courses/ref/AdvObfuscator.pdf
 
Zurück