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.