Java Obfuskierten JavaScript Code "entpacken"

iks-deh

Lt. Commander
Registriert
Jan. 2011
Beiträge
1.325
Hi,
ich suche einen Weg, "gepackten" (obfuscated) JavaScript-Code wieder in den Ursprungs-Zustand umzuwandeln. Zum "Packen" wurde das Skript von dieser Seite verwendet: http://dean.edwards.name/packer/ .

Hier mal ein Beispiel wie es in meinem Fall aussieht.

Aus:
Code:
createUrl('images');
var x = new Array();
x["b8e197d850f82ddb6627"] = 'uL7TStnPqVFqpC4NGMyDExOJ5s%2B%2F%2BnMp:7853';
x["f67e35dbbcd5ea003c10"] = 'Xy0UqM%2Fex71D0AwS7y25L8sW%2BifUbtNl:8695';
$('a.thumb').mousedown(function (e) {
    e.preventDefault();
    var rel = x[$(this).attr("rel")].split(':');
    $(this).attr('href', 'g/' + rel[1] + '/' + rel[0]);
    return false
});

wird dann

Code:
eval(function(p,a,c,k,e,r){e=function(c){return c.toString(a)};if(!''.replace(/^/,String)){while(c--)r[e(c)]=k[c]||e(c);k=[function(e){return r[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('k(\'j\');3 2=o q();2["r"]=\'7%8%9%b:c\';2["d"]=\'f%h%i:6\';$(\'a.l\').m(n(e){e.p();3 a=2[$(4).5("s")].t(\':\');$(4).5(\'u\',\'g/\'+a[1]+\'/\'+a[0]);v w});',33,33,'||x|var|this|attr|8695|uL7TStnPqVFqpC4NGMyDExOJ5s|2B|2F||2BnMp|7853|f67e35dbbcd5ea003c10||Xy0UqM||2Fex71D0AwS7y25L8sW|2BifUbtNl|imageGrid|gridSolve|thumb|mousedown|function|new|preventDefault|Array|b8e197d850f82ddb6627|rel|split|href|return|false'.split('|'),0,{}))

Ich möchte nun den Inhalt eines Skripts (wird dynamisch erzeugt, muss es also ständig neu machen) in einer Android-App auslesen. Leider bekomme ich zwar den verpackten Code (2. Variante) in die Finger (Parse mir das HTML-Dokument), schaffe es aber nicht, daraus wieder den ersten herzustellen. Ich habe zwar Dienste (u.a. http://jsbeautifier.org/) samt Code gefunden, die mir das "entpacken" übernehmen, allerdings ist das alles entweder JavaScript oder Python-Code, mit dem ich unter Java nix anfangen kann. Da wird dann mal eval(...) von irgendwelchem geparsten Code aufgerufen und als JavaScript-Anfänger hab ich dann keinen Plan mehr was da gerade passiert. "Übersetzen" in Java für mich deshalb unmöglich.
Habe auch schon versucht, den JavaScript-Code über die Java-Scripting-API auszuführen, hat allerdings nicht geklappt. Auch über längeres googlen hab ich nix gefunden was mich weiter bringt.

Und nein, ich will nicht per Reverse-Engineering super geheimen Code klauen, sondern wie oben im Beispiel einfach nur an die URLs kommen, welche sowieso per Klick erreichbar sind. Warum die so versteckt sind weiß ich auch nicht wirklich...
 
Zuletzt bearbeitet:
Das Problem liegt (da bin ich mir schon relativ sicher) hier begraben:

https://github.com/einars/js-beautify/blob/master/unpackers/p_a_c_k_e_r_unpacker.js

genauer:

in dieser Funktion:

Code:
unpack_chunk: function (str) {
        var unpacked_source = '';
        if (P_A_C_K_E_R.detect(str)) {
            try {
                eval('unpacked_source = ' + str.substring(4) + ';');
                if (typeof unpacked_source == 'string' && unpacked_source) {
                    str = unpacked_source;
                }
            } catch (error) {
                // well, it failed. we'll just return the original, instead of crashing on user.
            }
        }
        return str;
},

Zeile 5, dazu gibt es wohl kein Java-Äquivalent. Und vor allem weiß ich nicht genau was da dann intern ausgeführt wird.
 
Zuletzt bearbeitet:
Wenn du es genauso machen willst, bleibt dir wohl nichts anderes übrig, als einen simplen JS-Parser zu nutzen, der dir das Ganze auffriemelt.
 

Ähnliche Themen

Antworten
5
Aufrufe
1.299
Antworten
9
Aufrufe
1.458
Zurück
Oben