عمل حقن لمكتبة داخل برنامج (Injection) - نسخة قابلة للطباعة +- الفريق العربي للهندسة العكسية (https://www.at4re.net/f) +-- قسم : منتديات البرمجة - Programming Forums (https://www.at4re.net/f/forum-5.html) +--- قسم : البرمجة بلغة السى و السى بلس بلس ++C & C (https://www.at4re.net/f/forum-17.html) +--- الموضوع : عمل حقن لمكتبة داخل برنامج (Injection) (/thread-1783.html) |
عمل حقن لمكتبة داخل برنامج (Injection) - ExCodeMaker - 07-06-2020 - المشروع يعمل على حقن مكتبة DLL داخل برنامج في الذاكرة NOTEPAD ويكتب في ملف C:\temp.txt للتاكد من نجاح العملية - للانتباه ان هناك نسختان في وندوز للنوت باد X64 في windows\system32 و X86-32 في Windows\SysWow64 - يجب استخدام نسخ متوافقة من الحقن والبرنامج الهدف (الحقن مبني عل 64 ويمكن تغييره) - قمت بوضع نسخة من البرامج لكل من C و ++C ، يمكن استخدام النسخة التي تريد - استخدمت Visual Studio 2019 اتمنى ان ينال هذا المشروع الصغير اعجابكم RE: عمل حقن لمكتبة داخل برنامج (Injection) - YANiS - 08-06-2020 السلام عليكم و رحمة الله القيت نظرة سريعة على السورس و لم اجرب عمله بعد... استسمحك اخي بعض الأسئلة: - لماذا قمت بتسمية الدالة بــ GetProcessId و المتغير LoadLibraryA ؟ - لماذا تعريف نوع ما ترجعه الدالة GetProcessId مختلف ؟ فوق معرفة بأن ترجع نوع DWORD و تحت معرفة ان ترجع نوع unsigned long - وجود دالة لا يتم استدعائها ابدا const wchar_t* GetWC(const char* c) RE: عمل حقن لمكتبة داخل برنامج (Injection) - ExCodeMaker - 09-06-2020 وعليكم السلام ورحمة الله اولا اشكرك على المرور والتعليق على البرنامج، واسال الله ان يزيدك من نعيمه. وانا سعيد ان ارى اخواننا يكتسبون هذه المعرفة رغم قلة الموارد فيها مقارنة بالعلوم الاخرى. خاصة باللغة العربية. لذا كنت سعيدا بالانضمام للاعضاء للاستمتاع بتبادل المعرفة، واشكر القائمين على هذا الموقع المميز. بالنسبة للاسألة، التسمية متوافقة مع الغرض، فالدالة هذا هو الهدف منها والمتغير يشير الى موقع الدالة في الذاكرة. بالسنبة للتعرف، ما شاء الله على قوة ملاحظتك، فانا قصدت ذلك لانه لا يوجد بلغة C تعريف DWORD وانما هو مقتبس من الاسمبلي وهو عبارة عن Alias ، لذا احببت الانحياز لاصل اللغة. اما الدالة غير المستخدمة، فمن الواضح انك لم تفتح المشروع وانما فتحت الملف مباشرة، لان هذا الملف بلغة ++C والمشروع بلغة C. فانا استخدمت تقنية مختلفة بلغة ++C واحببت تركها ضمن الملفات للاستفادة والتعلم، وان اشرت لذلك في الشروحات اعلاه. اما الفكرة فهي مباشرة ومفيدة وضرورية لكل من يبحث ويتعلم في مجال الهندسة العكسية. ارجوا ان تكون الاجابة قد لبت طلبك واشكر الاخ EarthMan123 على متابعته اليومية للمواضيع والمشاركة والتوضيح دون كلل او ملل ، من لا يشكر الناس لا يشكر الله RE: عمل حقن لمكتبة داخل برنامج (Injection) - YANiS - 09-06-2020 بارك الله فيك اخي على اجابتك... بخصوص: (09-06-2020, 07:09 AM)ExCodeMaker كتب : بالنسبة للاسألة، التسمية متوافقة مع الغرض، فالدالة هذا هو الهدف منها والمتغير يشير الى موقع الدالة في الذاكرة.الاشكال هنا هو اعتمادك على تسمية قد تسبب اعتراضات خلال مرحلة البناء تسمية الدالة GetProcessId مع وجود دالة تابعة للنظام بنفس التسمية مع احترام الحروف الكبيرة و الصغيرة. error C2373: 'GetProcessId': redefinition; different type modifiers عند تخصيص البناء x86 warning C4273: 'GetProcessId': inconsistent dll linkage عند تخصيص البناء x64 و عند الانتهاء من بناء التطبيق يتم رغما عنا اضافة الدالة GetProcessId في جدول التصديرات Exports قم اخي بفحص جدول التصديرات للملف الناتج عندك. الحل: من GetProcessId الى getProcessId تفي بالعرض. نفس الشئ في اعتماد تسمية المتغيرات: من LoadLibraryA الى lpLoadLibraryA مثلا، الحرص فقط على عدم التسمية باسماء قد تسبب اعتراضات او قد تؤدي الى سلوك خارجي مثل اضافة الدالة الى جدول التصديرات (حالة التطبيق خاصتك) (09-06-2020, 07:09 AM)ExCodeMaker كتب : بالسنبة للتعرف، ما شاء الله على قوة ملاحظتك، فانا قصدت ذلك لانه لا يوجد بلغة C تعريف DWORD وانما هو مقتبس من الاسمبلي وهو عبارة عن Alias ، لذا احببت الانحياز لاصل اللغة.في الأصل، unsigned long و DWORD (احرف كبيرة) هما نفس الشئ:
الاشكال هو منهجي في طريقة كتابة تعريف نفس الدالة بكتابة مختلفة في نفس السورس حتى و ان كان الاختلاف شكلا و ليس مضمونا. بالمناسبة جربت المثال و عمل عندي بنجاح، فقط: 1- يجب تشغيل notepad كمسؤول لكي يتم منحه صلاحيات الكتابة في السواقة "C" 2- و بما ان متسوى notepad اصبح مستوى مسؤول، فانه طبعا يجب رفع مستوى تشغيل التطبيق بنفس المستوى. احببت ارفاق الملفات (لم اغير اي شئ في السورس الأصلي سوى تسمية الدالة getProcessId )(x86 و x64) التنفيذية، تشغيلها لا يحتاج الى dependencies مثبتة على النظام لكي تشتغل. RE: عمل حقن لمكتبة داخل برنامج (Injection) - kOuD3LkA - 09-06-2020 السلام عليكم مشكور على الموضوع صراحة انا لم ابرمج في لغة C و C++ منذ ايام الدراسة لكن كنت اطلع على الملف بشكل سريع ولفت نظري شيء هنا انت قمت بعمل function اسمها CreateRemoteThreadInject ترجع int
ولكن بعد ذلك اذا لم يجد process ID لاحظت انها ترجع false وهذا bool وليس int اليس من الافضل في هذه الحالة ان ترجع bool بالشكل التالي
وليس هكذا
(ربما اكون مخطأ والبرنامج يعمل بشكل عادي من دون مشاكل لأن false وtrue هم في النهاية 0 و1 اترك ذلك للمختصين في البرمجة) الكود الأصلي في الملف
RE: عمل حقن لمكتبة داخل برنامج (Injection) - Cyperior - 09-06-2020 (09-06-2020, 04:19 PM)kOuD3LkA كتب : (ربما اكون مخطأ والبرنامج يعمل بشكل عادي من دون مشاكل لأن false وtrue هم في النهاية 0 و1 اترك ذلك للمختصين في البرمجة) 0 = false أي قيمة عدا الصفر = true RE: عمل حقن لمكتبة داخل برنامج (Injection) - ExCodeMaker - 09-06-2020 بالنسبة ل GetProcessId كلامك صحيح، في نسخة ++C لا يوجد اشكال فهي مقبولة Overloaded ، وعندما نقلتها الى نسخة C كان يجب تغييرها كما ذكرت RE: عمل حقن لمكتبة داخل برنامج (Injection) - motaghred - 23-05-2021 السلام عليكم هل يوجد TUT شرح وشكرا |