Psobf - PowerShell 난독 처리기
4개월 전 오전 8시 30분 | FaradaySEC 후원 게시물 | 다중 사용자 침투 테스트 환경 Zion 3R Go로 작성된 PowerShell 스크립트를 난독화하는 도구입니다 . 이 프로그램의 주요 목적은 PowerShell 코드를 난독화하여 분석 및 감지를 더 어렵게 만드는 것 입니다. 스크립트는 기본 난독화 부터 스크립트 조각화까지 5가지 수준의 난독화를 제공합니다. 이를 통해 사용자는 특정 요구 사항에 맞게 난독화 수준을 조정할 수 있습니다 . ./psobf -h<br><br> ██████╗ ███████╗ ██████╗ ██████╗ ███████╗<br > ██╔==██╗██╔====╝██╔===██╗██╔==██╗██╔====╝<br> ██████╔╝███████╗██║ ██║██████╔╝█████╗<br> ██╔===╝ ╚=== =██║██║ ██║██╔==██╗██╔==╝<br> ██║ ███████║╚██████╔╝██████╔╝██ ║<br> ╚=╝ ╚======╝ ╚=====╝ ╚=====╝ ╚=╝<br> @TaurusOmar<br> v.1.0 <br><br>사용법: ./obfuscator -i <inputFile> -o <outputFile> -level <1|2|3|4|5><br>옵션:<br> -i 문자열<br> PowerShell 스크립트 파일의 이름.<br> -level int<br> 난독화 수준(1~5)(기본값 1)<br> -o string<br> 난독화된 스크립트의 출력 파일 이름입니다. (기본값 "obfuscated.ps1")<br><br>난독화 수준:<br> 1: 스크립트를 개별 문자로 분할하여 기본 난독화.<br> 2: 스크립트의 Base64 인코딩.<br> 3: 대체 Base64 다른 PowerShell 디코딩 방법으로 인코딩합니다.<br> 4: 스크립트의 압축 및 Base64 인코딩은 런타임에 디코딩되고 압축이 풀립니다.<br> 5: 런타임에 스크립트를 여러 부분으로 조각화하고 재구성합니다.<br>- 난독화 수준: 4개의 난독화 수준으로 각 수준은 이전 수준보다 더 복잡합니다.
- 레벨 1 난독화는 스크립트를 개별 문자로 분할하여 수행됩니다.
- 스크립트의 레벨 2 Base64 인코딩입니다.
- 수준 3에서는 Base64 인코딩 대신 다른 PowerShell 디코딩 방법을 사용합니다.
- 스크립트의 레벨 4 압축 및 Base64 인코딩은 런타임 시 디코딩 및 압축 해제됩니다.
- 레벨 5에서는 스크립트를 여러 부분으로 분할하고 런타임에 다시 빌드합니다.
- 압축 및 인코딩: 레벨 4에는 base64로 인코딩하기 전에 스크립트를 압축하는 것이 포함됩니다.
- 변수 난독화: PowerShell 스크립트에서 변수 이름을 난독화하는 기능을 추가했습니다.
- 무작위 문자열 생성: 변수 이름을 난독화하기 위해 무작위 문자열을 생성합니다.
<a href=" http://github.com/TaurusOmar/psobf@latest " rel="nofollow"> github.com/TaurusOmar/psobf@latest</a><br> 설치로 이동하세요.
난독화 수준은 5가지 옵션으로 나누어집니다 . 먼저 난독화해야 할 PowerShell 파일이 있어야 합니다. script.ps1 파일의 내용은 다음과 같습니다. "<br>
레벨 1 난독화를 사용하여 스크립트를 실행합니다.
./obfuscator -i script.ps1 -o obfuscated_level1.ps1 -level 1<br>
이렇게 하면 난독화된 콘텐츠가 포함된 obfuscated_level1.ps1이라는 파일이 생성됩니다. 결과는 각 문자가 쉼표로 구분되고 런타임에 결합되는 스크립트 버전이 됩니다.
결과 (레벨 1) $ 난독 화 =
$([char[]](" W, r, i, t, e, -, , , , , , , , , , ` , , , , , , , ") -join '' H) ; 호출 표현식 $난독화<br>ost "Hello,World!"
레벨 2 난독화를 사용하여 스크립트를 실행합니다.
./obfuscator -i script.ps1 -o obfuscated_level2.ps1 -level 2<br>
이렇게 하면 base64로 인코딩된 콘텐츠가 포함된 obfuscated_level2.ps1이라는 파일이 생성됩니다. 이 스크립트가 실행되면 런타임에 디코딩되어 실행됩니다.
결과(레벨 2)
$obfuscated = [System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String('V3JpdGUtSG9zdCAiSGVsbG8sIFdvcmxkISI=')); Invoke-Expression $obfuscated<br>
레벨 3 난독화를 사용하여 스크립트를 실행합니다.
./obfuscator -i script.ps1 -o obfuscated_level3.ps1 -level 3<br> 이 레벨은 PowerShell에서
약간 다른 형식의 base64 인코딩 및 디코딩을 사용하여 추가 난독화 계층을 추가합니다 .
결과(레벨 3)
$e = [System.Convert]::FromBase64String('V3JpdGUtSG9zdCAiSGVsbG8sIFdvcmxkISI='); $obfuscated = [System.Text.Encoding]::UTF8.GetString($e); >
레벨 4 난독화를 사용하여 스크립트 실행:
./obfuscator -i script.ps1 -o obfuscated_level4.ps1 -level 4<br>
이 레벨은 base64로 인코딩하기 전에 스크립트를 압축하므로 분석이 더 복잡해집니다. 결과는 런타임에 디코딩되고 압축이 풀립니다.
결과(레벨 4)
$compressed = 'H4sIAAAAAAAAC+NIzcnJVyjPL8pJUQQAlRmFGwwAAAA='; $bytes = [System.Convert]::FromBase64String($compressed) $stream = New-Object IO.MemoryStream(, $bytes); -개체 IO.Compression.GzipStream($stream, [IO.Compression.CompressionMode]: :디ecompress); $reader = New-Object IO.StreamReader($decompressed); $obfuscated = $reader.ReadToEnd();
레벨 5 난독화로 스크립트를 실행합니다.
./obfuscator -i script.ps1 -o obfuscated_level5.ps1 -level 5<br>
이 레벨은 스크립트를 여러 부분으로 분할하고 런타임에 다시 빌드합니다.
결과(레벨 5)
$fragments = @(<br>'Write-', <br>'출력 "', <br>'Hello,', <br>' Wo', <br>'rld!', < br>'"'<br>); <br>$script = $fragments -join ''; <br>Invoke-Expression $script<br>
이 프로그램은 교육 및 연구 목적으로만 사용됩니다. 악의적인 활동에 사용되어서는 안 됩니다.
다운로드Psobf