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

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

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

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

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
VBA-RunPE — تنفيذ VBA لتقنية RunPE أو كيفية تجاوز القائمة البيضاء للتطبيقات. | Kitploit
أدوات/GitHubGitHub/itm4n/vba-runpe
الاستغلالالتهرب من IDS/IPSما بعد الاستغلالاختبار الاختراقالفريق الأحمرتطوير الحمولاتArchived
GitHubitm4n/vba-runpe

VBA-RunPE

تنفيذ VBA لتقنية RunPE أو كيفية تجاوز القائمة البيضاء للتطبيقات.

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

الأكثر شعبية

عرض الكل →

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

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

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

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

VBA RunPE

الوصف

تطبيق بسيط ولكنه فعّال لتقنية RunPE في VBA. يمكن استخدام هذا الكود لتشغيل ملفات تنفيذية من ذاكرة Word أو Excel. وهو متوافق مع كل من الإصدارات 32 بت و64 بت من Microsoft Office 2010 والإصدارات الأحدث.

مزيد من المعلومات هنا:
https://itm4n.github.io/vba-runpe-part1/
https://itm4n.github.io/vba-runpe-part2/

Win10_x64_Office2016_x64_PowerShell

الاستخدام 1 - ملف PE على القرص

  1. في الإجراء Exploit في نهاية الكود، حدد مسار الملف الذي تريد تنفيذه.
root@kitploit:~
strSrcFile = "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe"

/!\ إذا كنت تستخدم إصدار 32 بت من Microsoft Office على نظام تشغيل 64 بت، فيجب عليك تحديد ملفات ثنائية 32 بت.

root@kitploit:~
strSrcFile = "C:\Windows\SysWOW64\cmd.exe"
strSrcFile = "C:\Windows\SysWOW64\WindowsPowerShell\v1.0\powershell.exe"
  1. حدد وسائط سطر الأوامر (اختياري).
root@kitploit:~
strArguments = "-exec Bypass"

سيتم استخدام ذلك لتشكيل سطر أوامر مكافئ لـ:

root@kitploit:~
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -exec Bypass
  1. (اختياري) فعّل عرض > النافذة الفورية (Ctrl+G) للتحقق من سجلات التنفيذ والأخطاء.

  2. شغّل ماكرو Exploit!

الاستخدام 2 - PE مضمن

  1. استخدم pe2vba.py لتحويل ملف PE إلى VBA. بهذه الطريقة، يمكن تضمينه مباشرة في الماكرو.
root@kitploit:~
user@host:~/Tools/VBA-RunPE$ ./pe2vba.py meterpreter.exe 
[+] تم إنشاء الملف 'meterpreter.exe.vba'.
  1. استبدل الكود التالي في RunPE.vba بمحتوى ملف .vba الذي تم إنشاؤه في الخطوة السابقة. يقوم النص البرمجي Python بتحويل PE إلى VBA ويطبق قالب RunPE تلقائيًا (لا حاجة للنسخ/اللصق يدويًا).
root@kitploit:~
' ================================================================================
'                                ~~~ PE مُضمّن ~~~
' ================================================================================

' كود تم إنشاؤه بواسطة PE2VBA
' ===== بداية PE2VBA =====
Private Function PE() As String
    Dim strPE As String
    strPE = ""
    PE = strPE
End Function
' ===== نهاية PE2VBA =====
  1. (اختياري) فعّل عرض > النافذة الفورية (Ctrl+G) للتحقق من سجلات التنفيذ والأخطاء.

  2. شغّل ماكرو Exploit!

/!\ عند استخدام PE مضمن، سيتحول الماكرو تلقائيًا إلى هذا الوضع لأن الدالة PE() سترجع سلسلة نصية غير فارغة.

المشكلات المعروفة

  • فشل GetThreadContext() مع رمز الخطأ 998.

قد تواجه هذا الخطأ إذا قمت بتشغيل هذا الماكرو من إصدار 64 بت من Office. كحل بديل، يمكنك نقل الكود إلى وحدة نمطية بدلاً من تنفيذه من مراجع كائن Word. شكرًا @joeminicucci على النصيحة.

root@kitploit:~
================================================================================
[*] الملف المصدر: 'C:\Windows\System32\cmd.exe'
[*] فحص PE المصدر...
[*] إنشاء عملية جديدة في حالة معلقة...
[*] استرداد سياق الخيط الرئيسي...
    |__ فشل GetThreadContext() (الخطأ: 998)

ليس لدي أي فكرة عن سبب نجاح هذا الحل البديل في الوقت الحالي. لقد حققت في الأمر قليلاً. يبدو أن هذا الخطأ ناتج عن عدم محاذاة بنية CONTEXT بشكل صحيح في الإصدار 64 بت. لاحظت أن حجم البنية غير صحيح أيضًا ([VBA] LenB(CONTEXT) != [C++] sizeof(CONTEXT)) بينما يكون صحيحًا في الإصدار 32 بت. لدي حل يعمل على إرجاع GetThreadContext() بشكل صحيح ولكنه يعطل بعض الأشياء الأخرى لاحقًا في التنفيذ.

تعديل 2019-12-15: تعريف بنية CONTEXT للإصدار 64 بت كان بالفعل غير صحيح، لكن إصلاح ذلك لم يصلح الخلل. لذا، قمت بتطبيق حل بديل للإصدار 64 بت. استبدلت وسيطة بنية CONTEXT الخاصة بالدالتين GetThreadContext() وSetThreadContext() بمصفوفة Byte بنفس الحجم.

تعديل 2019-12-17: أخيرًا وجدت المشكلة. افتراضي الأول كان صحيحًا، يجب أن تكون بنية CONTEXT محاذاة 16 بايت في الذاكرة. يمكن التحكم في ذلك في C باستخدام align(16) في تعريف البنية لكن لا يمكن التحكم فيه في VBA. لذلك، قد تفشل GetThreadContext() وSetThreadContext() "عشوائيًا". من ناحية أخرى، يبدو أن مصفوفات Byte دائمًا ما تكون محاذاة 16 بايت، ولهذا السبب هذا الحل البديل فعّال ولكن لا يوجد ضمان، ما لم أقوم بعمل هندسة عكسية لمفسر/مُجمّع VBA وأكتشف ذلك؟

  • LongPtr - النوع المعرّف من قبل المستخدم غير معرّف

إذا تلقيت هذا الخطأ، فهذا يعني أنك تقوم بتشغيل الماكرو من إصدار قديم من Office (<=2007). تم تقديم نوع LongPtr في VBA7 (Office 2010) جنبًا إلى جنب مع دعم واجهة برمجة تطبيقات Windows 64 بت. إنه مفيد جدًا للتعامل مع المؤشرات دون القلق بشأن البنية (32 بت / 64 بت).

كحل بديل، يمكنك استبدال جميع تكرارات LongPtr بـ Long (32 بت) أو LongLong (64 بت). استخدم Ctrl+H في محرر النصوص المفضل لديك.

الإسنادات

@hasherezade - تنفيذ كامل لـ RunPE (https://github.com/hasherezade/)

@Zer0Mem0ry - RunPE 32 بت مكتوب بلغة C++ (https://github.com/Zer0Mem0ry/RunPE)

@DidierStevens - تضمين PE في VBA

متنوعات

الاختبارات

تم اختبار هذا الكود على المنصات التالية:

  • Windows 7 Pro 32 بت + Office 2010 32 بت
  • Windows 7 Pro 64 بت + Office 2016 32 بت
  • Windows 2008 R2 64 بت + Office 2010 64 بت
  • Windows 10 Pro 64 بت + Office 2016 64 بت

ملاحظات جانبية

فيما يلي جدول التوافق بين بعض أنواع Win32 وVBA:

(*) LongPtr هو نوع "ديناميكي"، طوله 4 بايت في Office 32 بت و8 بايت في Office 64 بت. https://msdn.microsoft.com/fr-fr/library/office/ee691831(v=office.14).aspx

تنزيل الأداة
C++VBAالبنية
BYTEByte32 و64
WORDInteger32 و64
DWORD, ULONG, LONGLong32 و64
DWORD64LongLong64
HANDLELongPtr(*)32 و64
LPSTRString32 و64
LPBYTELongPtr(*)32 و64