2012-01-17 14 views
5

Bir çevirici için Google'da arama yaptım ama hiçbir şey bulamadım. Kullanılabilir araçlar var mı yoksa gizlenmiş JavaScript kodumu çözmem gerekiyor mu?Bir Javascript sözdizimi sözdizimi dönüştürücüsüne/deobfuscation aracına ihtiyacım var

Böyle bir araç olduğunu varsayalım ama Google'ı doğru anahtar kelimelerle aramadım. Kod 3 sayfa uzunluğunda, bu yüzden bir araca ihtiyacım var.

<script>([][(![]+[])[!+[]+!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]+(!![]+[])[+[]]][([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(![]+[])[+!+[]]+(![]+[])[!+[]+!+[]]+(![]+[])[!+[]+!+[]]]()[(!![]+[])[!+[]+!+[]+!+[]]+(+(+[])+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[!+[]+!+[]+!+[]+[+[]]]+(![]+[])[+!+[]]+(![]+[])[!+[]+!+[]]])(([]+[])[([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+ 

sadece dokuz karakterleri ("[]()!+,;" ve boşluk U+0020) kullanmak gibi görünüyor, çünkü

+1

Bunu değerlendirirken ne olur? – maerics

+0

Kodun bir kısmı kullanıcıları Youtube'a yönlendirir. –

+0

Whoops, bence senin çalışkanın kopyası olsaydı başın belada. – Jivings

cevap

1

Bu soru zaten bir yanıt aldı, ancak bazı şeyleri temizlemek için hala yayınlayacağım.

Bu fikir ortaya çıktığında, bir adam JavaScript'i bu şekilde kodlamak için generator'u yaptı. []["sort"]["call"]()["eval"](/* big blob of code here */) yapılıyor. Bu nedenle, sıralama kodlayıcı sıralama bölümünü (yani ilk 1628 bayt) kaldırarak bu kodlayıcının sonuçlarını çözebilirsiniz. Bu durumda üretir:

if (document.cookie=="6ffe613e2919f074e477a0a80f95d6a1"){ alert("bravo"); } 
else{ document.location="http://www.youtube.com/watch?v=oHg5SJYRHA0"; } 

de bu kodu ise neden bir açıklama yoktur (Komik yeterince bu kodun yaratıcısı bile kilobayt düzgün sıkıştırmak ve kaydetmek mümkün değildi) Artık yeni bir tarayıcıda çalışın: Array.prototype.sort'u değiştirdiler, bu nedenle window'a bir başvuru göndermez. Hatırladığım kadarıyla, bu, window'a bir başvuru almanın tek yoluydu, bu yüzden bu kod artık bozuk.

4

Bu kod büyüleyici teşekkür ederiz henüz bazı sofistike vardır: İşte

kodunun bir exemple olduğunu işlevsellik. JavaScript'in çeşitli ilkel türlere ve onların dizgi temsillerine dizilerini dizmek için örtülü tip dönüşümünü kullanır ve daha sonra bu dizelerden gelen karakterleri, daha sonra çağrılan işlevlerin adlarını yazan diğer dizeleri oluşturmak için kullanır.

array filter function değerlendirir aşağıdaki olsun: örneğin kod Yeniden

([][ 
    (![]+[])[+[]]    // => "f" 
+ ([![]]+[][[]])[+!+[]+[+[]]] // => "i" 
+ (![]+[])[!+[]+!+[]]   // => "l" 
+ (!![]+[])[+[]]    // => "t" 
+ (!![]+[])[!+[]+!+[]+!+[]] // => "e" 
+ (!![]+[])[+!+[]]   // => "r" 
]) // => function filter() { /* native code */ } 

böylece otomatik bir çözelti, arzu edilmektedir, zaman alıcı ve hata eğilimli. Bununla birlikte, bu kodun davranışı JavaScript çalışma zamanına çok sıkı bir şekilde bağlıdır; bu nedenle, bir JS yorumlayıcısının kodu değerlendirmesini gerektirdiği gibi göz ardı etme bozukluğu gözükmektedir.

Genellikle bu tür kodlamayla çalışacak araçlar bulamadım. Kodu daha fazla incelemeniz ve herhangi bir kullanım şeklini belirlemeniz (örneğin, dizi yöntemlerine güvenmek) ve kullanımlarını nasıl yakalayacağınızı (örn. Function.prototype.call gibi yüksek düzeyli işlevleri sarmalayarak) hesaplayacağınız anlaşılıyor. ]) sizin için kod yürütme izlemek için.