Soru Javascript deminifier (deobfuscator) diye bir şey var mı?


Bu soru tam tersi Hangi Javascript minifier (cruncher), Google'ın JS API'ları için kullandığı aynı şeyleri yapar?

Google'ın nasıl yükleneceğini öğrenmek istiyorum, böylece popüler olmayan JS araç takımlarıyla kendi başarımı oluşturabilirim.


17
2017-09-07 06:25


Menşei


Ben sadece "unminify" için aramadım buldum stackoverflow.com/questions/822119/...Her ne kadar cevapların hiçbiri "yeniden adlandırılan değişkenleri geri almamaya" çalıştığı için geçerli olduğunu düşünmeme rağmen - Jorge Vargas
Sorunuzda yanlış terimi kullanıyorsunuz. Gerçekten "gizleme" (tanımlayıcı yeniden adlandırma) tersine çevirmekle ilgilendiğiniz şey. Bu soru için doğru cevapların birçoğunu aldınız, ancak sizin amacınıza uygun değilsiniz. - Ira Baxter
"maxifier", zekice - skaffman
Eğer sourcemap yoksa, yapabileceğiniz en iyi şey onu güzelleştirmektir. Değişken isimlerinin tümü kısaltılmışsa, kaynağa sahip olmadan onları özendirmenin bir yolu yoktur. (ve eğer kaynağa sahip olsaydın, onu deobfüsyona sokmanın bir anlamı yok.) - Kevin B
Olası kopya Javascript nasıl deminify - John Slegers


Cevaplar:


Bunu dene: JS Güzelleştirici


30
2017-09-07 06:28



Bu sadece bir kod biçimlendirici, çok iyi ama burada aradığım şey değil. - Jorge Vargas
Sadece kod kodunu biçimlendirmez, "deminifier" işini yapması gerekiyordu .. aslında denediniz mi? - yoda
@Yoda: Nasıl dobfuscate olabilir? Tanımlayıcılarla ilgili hiçbir şey bilmiyor gibi görünüyor. - Ira Baxter


Uhhh, minified -> orjinal değişken isimlerinin bir eşlemesi olmadıkça değişken isimleri geri yüklemek imkansız olurdu. Aksi takdirde, bu aracın yazarlarının psişik yetenekler için Randi ödülünü kazanabileceğini düşünüyorum.


16
2017-09-07 07:10



Elbette orijinal isimleri geri kazanamazsınız. Ama en azından daha iyi isimler elde ederseniz, daha sonra bulabilir ve değiştirebilirsiniz, başka bir deyişle araç JS sözdizimini bilecek ve a değişkenini method_named_a ile değiştirecek fakat ba () içinde değiştirmeyecektir, çünkü bu bir sözdizimi hatası oluşturacaktır. - Jorge Vargas
Özellikle, güzelleştiricilerin, orijinal sembolleri geri istediğini ima eden "değişken yeniden adlandırma işlemini geri alma" dan şikayet ettiniz. - patros


Deneyin http://www.jsnice.org/

Sadece tökezledim ve harika. Kodu genişletir. İsmi değişkendir. örneğin, bu koda sahipseniz:

var g = f.originalEvent.targetTouches[0];

Sonra kodunuzu şöyle değiştirir:

var touches = event.originalEvent.targetTouches[0];

Oldukça iyi bir tahmin, metreler.

Bunu çevirdi:

d.slide.hasClass("selected") ? (e.onSlideOpen.call(d.prev.children("div")[0]), q ? (e.rtl && d.slide.position().left > i.w / 2 || d.slide.position().left < i.w / 2) && h.animateSlide.call(d) : t && d.index ? (h.animateGroup(d, !0), h.fitToContent(d.prev)) : d.slide.position().top < i.h / 2 && h.animateSlide.call(d)) : (setTimeout(function() { e.onSlideOpen.call(d.slide.children("div")[0]) }, e.slideSpeed), h.animateGroup(d), t && h.fitToContent(d.slide)), e.autoPlay && (f.stop(), f.play(l.index(j.filter(".selected"))))

Bunun içine:

if (e.slide.hasClass("selected")) {
    settings.onSlideOpen.call(e.prev.children("div")[0]);
    if (val) {
      if (settings.rtl && e.slide.position().left > box.w / 2 || e.slide.position().left < box.w / 2) {
        self.animateSlide.call(e);
      }
    } else {
      if (isMac && e.index) {
        self.animateGroup(e, true);
        self.fitToContent(e.prev);
      } else {
        if (e.slide.position().top < box.h / 2) {
          self.animateSlide.call(e);
        }
      }
    }
  } else {
    setTimeout(function() {
      settings.onSlideOpen.call(e.slide.children("div")[0]);
    }, settings.slideSpeed);
    self.animateGroup(e);
    if (isMac) {
      self.fitToContent(e.slide);
    }
  }
  if (settings.autoPlay) {
    node.stop();
    node.play(tabs.index(options.filter(".selected")));
  }

Üzerinde çalıştığım bir kütüphanede birkaç hata var ve kodun şifresini çözmeye çalışırken saatler geçirdikten sonra, bunu bulmak bana bir sürü zaman kazandıracak.

Cidden, bu araç zemini JS Beautifier ile siliyor.


11
2017-12-03 15:03



Çok hoş. Otomatik tip algılama da. Bu yorumdan üç yıl sonra, bu hala en iyi de-minimizatöre benziyor. - Sam Fen


Chrome Geliştirici araçları bunu yerleşik


7
2018-04-01 14:40



Bu nasıl "geri"? - The Red Pea


Yöntem adını veya değişken adlarını yeniden oluşturamayacaksınız. Umarız en iyisi, basit bir JS kod formlayıcısıdır (daha önce bahsedilenler gibi) ve daha sonra her bir parçanın ne yaptığını anlatarak, metotla, satır satır ile dosya yönteminden geçmesidir.

Belki iyi bir JS refaktor aracı kullanmak bunu daha da kolaylaştıracaktır (yöntemleri yeniden isimlendirmek / belgelemek)


2
2017-09-07 07:11



Tamam bu daha iyi bir kurşun gibi görünüyor, bu iyi bir JS refrakterleme aracı mı? - Jorge Vargas
Intellij IDEA, Javascript dosyalarında yöntem / değişken yeniden adlandırma yapabilir. CodeRush / Refactor Pro, Visual Studio'da aynı şeyi yapar - Matthew


Kullanabilirsiniz \b (word sınır) bir dosyada tek harfli değişken isimleri bulmak için düzenli ifadeler özelliği.

for i in "abcdefghij..z"; do
    sed -i "s/\b$i\b/$(random /usr/share/dict/words)/g" somefile.js
done

Bunu vim ile de kullanabilirsiniz. :%s/\<a\>/truesaiyanpower/g.


1
2017-07-13 21:59





Js dosyalarını kaldırmak için Unminify en iyi olurdu!


1
2018-01-15 12:04





Bizim görmek SD ECMAScript Biçimlendiricisi güzel kod biçimlendirecek bir araç için.

DÜZENLEME: Yeniden adlandırma işlemini tersine çevirmek istiyorsanız, bir şeylere ihtiyaç duyan isimleri asıllara yeniden adlandırabilirsiniz.

Bu araç teknik olarak bunu yapabilir: SD Thicket ECMAScript Obfuscator.

Bu, üzerinde tam kontrol sahibi olduğunuz bir yeniden adlandırma haritası uygulayarak yapar. Tipik olarak, hangi isimlerin gizlice gizleneceğini ve hangilerinin korunacağını seçerek gizleme süreci sırasında böyle bir haritayı örtülü bir şekilde inşa edersiniz ve obfuscator bu haritayı gizlenmiş kodu üretmek için uygular.

Thicket obfuscator, bu haritayı altüst ettiğin zaman yan etki olarak üretir. esas olarak bir çiftler kümesinde (originalname, obfuscatedname) referans ve hata ayıklama amaçları için.

Takas öğeleri, haritayı (gizlenmiş ad, özgün ad) verir. Bu tersine çevrilmiş harita, kodun orjinal isimleriyle, gizlenmiş koddan kurtarmak için Thicket tarafından uygulanabilir. Ve Thicket obfuscator, yeniden güzel görünmesini sağlamak için Formatter içerir.

"Tasfiyeyi tersine çevirme" (onu zayıflattığınız gibi, gizlemeyi tersine çevirmeye çalışıyorsunuz), haritaya ihtiyacınız var. Şaşırtıcı olan insanlar haritayı vermediği için, gizlenmiş bir kodun alıcısı olarak, başvurmak için hiçbir şeyiniz yoktur. Olması gereken bir korsan haritayı muhtemelen acı veren tersine mühendislikle yeniden inşa etmek zorunda kalacaktı.

"Geri dönüşüm" süreci de yorumları geri yükleyemez. Sonsuza dek gittiler.

Her şey tasarımla ilgili, bu yüzden asıl soru neden gizlemeyi tersine çevirmek istiyorsun?


-1
2017-09-07 07:05



diğer kod biçimlendirici ile aynı gerçekten. - Jorge Vargas
@Jorge: çünkü asıl sorunun "gizleme" anlamına geldiğinde "minification" terimini kötüye kullandığıdır. Yanıtlamayı, gizleme sürecini mümkün olduğu kadar tersine çevirmek için tam olarak anlattım. Doğru verilere sahipseniz araçlar bunu yapar. Bu verilere sahip olma ihtimaliniz çok düşük. - Ira Baxter
Bu da bir deobfuscator değil. Sadece kimlik isimlerini ve güzel baskıları eşler. - artificialidiot
Tam olarak söylediğim şey, ve bundan daha iyisini yapamayacağınız. - Ira Baxter
@Ira, değişime isimlendirmeye katılmıyorum. Değişmeyen yeniden adlandırma, karalama değil, "boşluklar" yerine "harflerin" minimize edilmesidir. Değişken isimlerin dikkat çekmesi, ihtiyaç duyulmayan değişkenler / yöntemler eklemek ya da 1 çağrıyı 2 çağrıyla değiştirmek, basitçe yeniden yönlendiren kukla bir yöntemdir. - Jorge Vargas


Javascript minifier ve Javascript Obfuscator iki farklı şeydir.

Minifier - yorumları, gereksiz boşlukları ve yeni satırları bir programdan kaldırır.

Obfuscator - programda değişiklikler yapar, değişkenlerin, fonksiyonların ve üyelerin isimlerini değiştirerek, programın anlaşılmasını daha da zorlaştırır. Bazı obfüserler kod değişikliklerinde oldukça agresiftirler.

Bu Javascript Obfuscator kodunuzu gizler.

Kodunuzu deobfuscate etmek istiyorsanız, Javascript Güzelleştirici. Eğer şaşırtma bulunursa kodu çözer ve sonra kodu güzelleştirir.


-1
2017-11-30 19:19



Aynı zamanda minikerler, kodu daha küçük yapmak amacıyla da şaşırtabilirler, okunması zor bir yan etkidir. - Kevin B