
تقنية حقن الشيلكود. مقدمة كملف رأس C++، أو برنامج Rust مستقل، أو مكتبة.
هذه تقنية جديدة كلياً لحقن الشيل كود لتجنب برامج مكافحة الفيروسات (AVs) وأنظمة كشف الهجمات (EDRs). هذه التقنية مستوحاة من تقنية Module Stomping وتتشابه معها في بعض النواحي. حتى تاريخه (23-01-2022) فإن hollows-hunter لا يكتشفها أيضًا.
الميزة الأكبر لهذه التقنية هي أنها لا تستبدل وحدة كاملة أو ملف PE، بل مجرد دالة واحدة، ولا يزال بإمكان العملية الهدف استخدام أي دالة أخرى من الوحدة المستهدفة.
العيب هو أنها لن تعمل مع كل دالة موجودة (لكنها ستعمل مع معظمها)، الشرح المفصل موجود في مدونتي: الدالة الجيدة والسيئة والمطروقة.
ملاحظة: من الممكن أن تكتشفها برامج مكافحة الفيروسات، لكن إذا كان التوقيع هو توقيع msfvenom/metasploit فهذا طبيعي! كل ما عليك فعله هو تغيير الشيل كود أو تشفيره.
تحديث: على ما يبدو أن هذا ليس أول دليل إثبات متاح، فقد كتب RastaMouse منشور مدونة يناقش شيئًا مشابهًا بلغة C#.
يمكنك تضمين الملف الرأسي في برنامجك بهذه الطريقة:
#include "functionstomping.hpp"
int main() {
// Just get the pid in any way and pass it to the function.
DWORD pid = 3110;
FunctionStomping(pid);
return 0;
}
أو استخدم برنامج Rust:
cd functionstomping
cargo b
functionstomping.exe <pid>
بعد تشغيل هذا البرنامج، يجب عليك استدعاء الدالة من العملية البعيدة! (إذا استخدمت الدالة الافتراضية CreateFile، فيجب عليك استدعاؤها من العملية البعيدة!).
حاليًا، الشيل كود الذي يتم تشغيله هو مجرد فتح الآلة الحاسبة، لكن كل ما عليك فعله هو استبدال unsigned char shellcode[] بالشيل كود الخاص بك. استخدمت C++ 17 و VS2019 لترجمة البرنامج مع الرأس C++، وإصدار Rust 2021 لترجمة برنامج Rust (يمكنك رؤية التبعيات في ملف Cargo.toml).
أنا لست مسؤولاً بأي شكل عن أي نوع من الضرر الذي يلحق بجهازك أو برنامجك نتيجة لهذا المشروع. أقبل المساهمات بكل سرور، قم بإنشاء طلب سحب (pull request) وسأقوم بمراجعته!