Soru:
Oldukça karmaşık JavaScript analizi
Adam Caudill
2013-04-01 08:27:20 UTC
view on stackexchange narkive permalink

Kısa süre önce, oldukça karmaşık bir JavaScript içeren bir web sayfasını analiz ediyordum - yazarın bunu mümkün olduğunca zor anlamak için epeyce çaba harcadığı açık. Bu kodun birkaç varyasyonunu gördüm - aynı kaynağa sahip oldukları açık, ancak gizlemeyi kaldırma çözümünün her seferinde değişmesine yetecek kadar farklı olan yeterince benzerlik var.

URL'yi çalıştırmaya başladım 0/46 puan alan VirusTotal - bu nedenle ilgi çekici bir konuydu ve Anti-Virüs yazılımı tarafından tespit edilmiyordu (en azından statik olarak). Sonra, herhangi bir anlam ifade edip edemeyeceğini görmek için jsunpack üzerinden çalıştırmayı denedim - şans yok, ayrıştırıcıyı bozdu.

Koda baktığımda, birkaç yöntem vardı kafa karıştırıcı olacak şekilde tasarlanmış ve daha sonra javascript olarak kodu çözülecek ve çalıştırılacak bunun gibi birkaç KB dizge:

  22 = "; 4kqkk; 255ie; 35bnh; 4mehn; 2lh3b; 7i29n ; 6m2jb; 7jhln; 562ik ... " 

Birkaç dakika etrafı araştırdıktan sonra, gerçekten kartladığım kod parçasının şu olduğunu belirledim:

  try {document.body -} catch (dgsdg) {e (a);}  

Bu durumda e 'nin diğer adı eval ve a , dosyanın başlangıcındaki çeşitli işlevler tarafından manipüle edilen (ve bir dizi yanıltıcı atamayla geçen) bir dizeydi.

a değerini hızlı bir şekilde almak için kodu Base64 olarak değiştirdim ve değeri çıkardım ve ardından HTML dosyasını Chrome'da bir sanal makinede açtım (bağlantı kesildi ağda):

  document.write (window.btoa (a))  

Bu bana aradığım değeri vermeyi başardı, ancak işlem çok uzun sürdü - ve başka bir eval kaçırmış olsaydım, açıkça kötü niyetli olan kodu çalıştırabilirdim. Böylece ihtiyacım olanı elde edebildim ve düşürmeye çalıştığı kötü amaçlı yazılımı tespit edebildim - ancak süreç çok yavaş ve riskliydi.

Javascript'i, çalıştırmanın getirdiği riskleri en aza indirmek için güvenli bir korumalı alanda çalıştırmanın daha iyi yolları var mı? Bu tür bir kodu genel olarak gizlemek için bir aracın oluşturulmasının bir yolunu görmüyorum, bu yüzden onu çalıştırmanın (veya tek seferlik araçlar oluşturmanın) bir yolunu görmüyorum, ki bu da zaman alıcıdır.

Bu tür bir kodla başa çıkmak için başka araçlar ve teknikler hakkında bilgi almak ilginç olur.

[Bu cevap] (http://reverseengineering.stackexchange.com/questions/64/what-is-a-good-tools-to-reverse-the-effects-of-minify-on-javascript/115#115) ilgi alanlarınızla alakalı olun.
Bunu kapatmak için oy kullanıyorum çünkü tam bir kandırmaca gibi görünüyor, dahası size kod olmadan tavsiye vermek zor.
[Minify'ın JavaScript üzerindeki etkilerini tersine çevirmek için iyi araçlar nedir?] 'Nin olası kopyası (https://reverseengineering.stackexchange.com/questions/64/what-is-a-good-tools-to-reverse-the- javascript üzerinde küçültmenin etkileri)
Dokuz yanıtlar:
#1
+36
svent
2013-04-04 02:46:12 UTC
view on stackexchange narkive permalink

Bahsettiği için Jurriaan Bremer'e teşekkürler, JSDetox kitabının yazarıyım!

Daha önce de belirtildiği gibi her gizleme şeması farklıdır. JSDetox her şeyi otomatik olarak gizlemeye çalışmaz - asıl amaç manuel analizi desteklemektir.

İki ana özelliği vardır: statik analiz "şişirilmiş" kodu optimize etmeye çalışır, ör.

  var x = - ~ - ~ 'bp' [720094129.0.toString (2 << 4) + ""] * 8 + 2;  

dış bağımlılık olmadığı için

  var x = 34;  

ile çözülebilir.

İkinci özellik ise JavaScript kodunu HTML DOM emülasyonu ile yürütme yeteneği: bir HTML belgesi (isteğe bağlı) ve bir JavaScript dosyası yükleyebilir, kodu çalıştırabilir ve ne olacağını görebilir. Elbette bu her zaman kutudan çıktığı gibi olmaz ve manuel düzeltmeler gerekebilir.

JSDetox, "eval ()" veya "document.write ()" gibi çağrıları (elle yaptığınız şeyi) araya getirir ve neyin yürütüleceğini gösterir ve daha fazla analize izin verir. HTML DOM emülasyonu, bir HTML belgesiyle etkileşime giren kodun yürütülmesine izin verir, örneğin:

  document.write ('<div id = "AU4Ae" >212< / div> '); var OoF2wUnZ = parseInt (document.getElementById ("AU4Ae"). innerHTML); if (OoF2wUnZ == 212) {...  

Lütfen http'ye bakın : Daha fazla örnek için //relentless-coding.org/projects/jsdetox/samples veya ekran videolarını izleyin: http://relentless-coding.org/projects/jsdetox/screencasts

JSDetox, analiz edilen JavaScript kodunu tarayıcıda yürütmez, arka uçta V8 (krom tarayıcının JS motoru) kullanır - yine de izole bir sanal makinede çalıştırılmalıdır.

Svent eski bir konuyu açtığı için üzgünüm. Her şeyden önce harika bir araç için teşekkürler. Btoa () 'nın tanınmadığı bir sorun yaşıyorum. Yanlış bir şey yapıyor olabilirim. Bunu yapmaya çalışıyorum: data = btoa (önemsiz); document.write (veri); Teşekkürler
@k0ng0 Sorun şu ki, btoa () tarayıcılardaki pencere nesnesinin bir işlevi ve JavaScript dilinin bir özelliği değil. JSDetox şu anda yalnızca pencere nesnesinin seçili işlevlerini taklit eder. İpucu için teşekkürler, bir sonraki sürümde bu konuyu daha ayrıntılı inceleyeceğim.
Öncelikle, aracınız üzerindeki çalışmanız için teşekkürler, ancak, her seferinde içine karmaşık bir kod koyup "analiz et" e bastığımda, sadece "yükleniyor ..." diyor ve aslında hiçbir şey yüklemiyor. 10 dakika kadar bıraktı.
#2
+17
Mick
2013-04-04 09:13:39 UTC
view on stackexchange narkive permalink

Malzilla 'nın ve kötü amaçlı javascript kodunu çözmenize izin veren yerleşik SpiderMonkey JS motorunun hayranıyım.

enter image description here

İşte bir LuckySploit saldırısının kodunu çözmek için Malzilla'nın kullanıldığı bir eğitici.

Malzilla için önceden oluşturulmuş ikili dosyayı buradan SourceForge'da indirebilirsiniz.

Bu eski bir cevap olabilir, ancak diğer herkesi gereksiz yere kafa karışıklığından kurtarmak için, tüm ikili dosyalar, bağlantılı Source Forge'da Malzilla yollarında olsalar bile "InnoBF" adı verilen bir tür araçtır. Aslında kaynaktan inşa etmelisiniz, ancak Delphi / Kylex / her neyse, bu yüzden evet, gerçekten eğlenceli.
Yanılıyorsun. Malzemilla ikili dosyası önceden oluşturulmuştur ve Sourceforge'dan indirilebilir (yukarıda bağlantılı olduğu gibi): https://sourceforge.net/projects/malzilla/files/Malzilla%20Win32%20Binary%20package/Malzilla%201.2.0/
#3
+11
peter ferrie
2013-04-01 09:26:24 UTC
view on stackexchange narkive permalink

Yapabileceğiniz en iyi şey, eval () 'un bir proxy işlevi kullanılarak geçersiz kılındığı ve işlevin yalnızca çıktıyı yazdırdığı bir ortam (örn. FireFox) kullanmaktır. Bu şekilde, kötü amaçlı yazılım onu ​​takma ad olsa bile, herhangi bir şeyi kaçırma riski yoktur. Maalesef eval () geçersiz kılınacak şekilde tasarlanmamıştır (ve son ECMAScript spesifikasyonu tarafından açıkça yasaklandığına inanıyorum), ancak en kötü ihtimalle çalışmayacaktır.

En iyisi sizsiniz ... "Maalesef eval () geçersiz kılınacak şekilde tasarlanmamıştır" ... nasıl geçersiz kılınacağına veya neyle geçersiz kılınacağına dair bir öneri yok mu?
#4
+9
Denis Laskov
2013-04-01 19:15:16 UTC
view on stackexchange narkive permalink

Çevrimiçi araçlardan sonra, Revelo by KahuSecurity'yi kullanabilirsiniz http://www.kahusecurity.com/tools/Revelo_v0.5.1.zip Süreçte daha az otomasyona sahiptir, ancak özelleştirilmiş js'nin gizliliğini kaldırma. Belgeler ZIP'e dahildir, ayrıca Kahu blogunda da bunun kullanım örneklerini görebilirsiniz: http://www.kahusecurity.com/ s.s. VM kullanmayı unutmayın!

#5
+7
Jurriaan Bremer
2013-04-03 00:56:24 UTC
view on stackexchange narkive permalink

Ruby'de otomatik bir javascript + html paket açıcı olan JSDetox, http://www.relentless-coding.com/projects/jsdetox veya kendi kitaplığımı denediğiniz için şanslı olabilirsiniz. devam ediyor ve yalnızca javascript'i destekliyor (ancak JSDetox'tan biraz daha fazlasını yapıyor), https://github.com/jbremer/jsunpck.

JSDetox için şunları yapabilirsiniz: html'yi web arayüzü aracılığıyla girdi olarak verin, sanırım ve daha sonra bazı ince ayarlı kodlar çıkaracak (ör., gizlenmiş.) Ancak jsunpck'im, komut satırında bir javascript dosyasını kabul ediyor.

Her zaman olduğu gibi , bu araçlardan herhangi biriyle başarı garanti edilmez, ancak kim bilir. Sonunda, yukarıda açıklandığı gibi eval yama uygulamak gibi dinamik bir yaklaşımla daha çok ilgilenebilirsiniz.

#6
+6
Gunther
2013-04-06 19:22:49 UTC
view on stackexchange narkive permalink

Kişisel olarak, manuel olarak analiz etmekte tembel hissediyorsam ya JSDetox ( http://relentless-coding.org/projects/jsdetox) kullanırım.

Muhtemelen piyasadaki en iyi araçlardan biridir.

#7
+5
thisismalicious
2013-04-03 01:03:42 UTC
view on stackexchange narkive permalink

Bazı şeyler için çalışan http://jsunpack.jeek.org/ 'i deneyebilirsiniz. Ben şahsen, eval () leri değiştirerek, bir sanal makinede Chrome'un yerleşik JS konsolunu kullanıyorum.

Bu da yardımcı olabilir, ancak okunabilirliği artırmak için daha fazla. p>

#8
+4
api pota
2017-11-06 13:54:32 UTC
view on stackexchange narkive permalink

Buradaki diğer yararlı bağlantılara ek olarak, yarı otomatik Javascript kötü amaçlı yazılım analizi, gizlemeyi kaldırma ve yük çıkarma için Malware-Jail

Sandbox'ı denemenizi tavsiye ederim. Node.js için yazılmıştır

malware-jail, Node'un 'vm' korumalı alanı için yazılmıştır. Şu anda, en azından kötü amaçlı yazılım tarafından sıklıkla kullanılan kısım olan WScript (Windows Komut Dosyası Sistemi) bağlam env / wscript.js uygulamaktadır. İnternet tarayıcısı bağlamı kısmen uygulanmıştır env / browser.js.

Daha fazla bilgi edinmek ve kullanımını ve örnek çıktılarını görmek için Github deposuna bakın.

#9
+1
Giulio Muscarello
2017-09-22 05:07:12 UTC
view on stackexchange narkive permalink

Geçen yıl box-js geliştiriyorum ve JScript damlalıklarını analiz ederken en doğru araç olduğunu buldum. Dahili olarak, statik bir analiz çalıştırmak ve birçok gizleme tekniğini basitleştirmek için UglifyJS2 kullanır; geri kalanı ise bir V8 korumalı alanındaki öykünme yoluyla elde edilir.



Bu Soru-Cevap, otomatik olarak İngilizce dilinden çevrilmiştir.Orijinal içerik, dağıtıldığı cc by-sa 3.0 lisansı için teşekkür ettiğimiz stackexchange'ta mevcuttur.
Loading...