المساعدة - البحث - قائمة الأعضاء - التقويم
نسخة كاملة: كيفية إضافة بيانات إلى الملف التنفيذى دون التأثير على عمل الملف
برمجة - شبكات - كمبيوتر - منتديات الفريق العربي للبرمجة > منتديات لغات البرمجة العام > منتدى مبرمجي C و ++C و C++.NET > أرشيف منتدى قسم السي ++
رمضان
طرحت هذا السؤال فى منتدى الهكر ولم أتلقى إجابة

معطم الفيروسات تضيف نفسها إلى الملفات التنفيذية دون أن تؤثر
على عمل هذه الملفات فكيف يمكننى أن أضيف بيانات إلى الملف التنفيذ دون ألتأثير على عمل الملف
الهدف من ذلك هو إستخدام ذلك لحماية البرامج

أتمنى أن أجد أحد يرد على هذا السؤال وبلاش بخل
لأنى أعلم أن بالمنتدى من يعرف ذلك ولن أحدد أسماء معينة
هاني الأتاسي
أهلا رمضان،

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

المهم نرجع على الموضوع .

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

لأستطرق إلى موضوع مشابه : هل فكرت كيف يتم تكوين ملف تنفيذي للملفات المضغوطة zip عن طريق Create self-extractor . في الحقيقية يتم إضافة الملف المضغوط على ملف تنفيذي آخر وظيفته فك الضغط أحيانا إذا كان ملف ال zip كبير فإن الملف التنفيذي يصل مثلا إلى 100 ميجابايت ، فهل تعتقد أنه عند تشغيل هذا الملف وفتحه بعد أن أصبح exe يتم نسخه بالكامل إلى الذاكرة من أجل تشغيله ؟ لا على العكس تماما فإن تشغيل ذاك الملف يتم في لحظات وهذا يعني أن الكمية التي نسخت إلى الذاكرة لا تتجاوز الكيلو بايتات . هذا البرنامج الذي نسخ إلى الذاكرة وظيفته فتح نفس الملف وقرائة الRow Data بداية من نهاية البرنامج التنفيذي الأساسي . فكيف تم تحيد عدد البايتات التي يجب نسخها إلى الذاكرة ؟

كل ملف تنفيذي يحتوي على ترويسة أو Header فيها الكثير من البيانات المفيدة أحدها هو عدد البايتات التي يجب أن تنسخ إلى الذاكرة (أو بالأصح عدد البولكات – كل بلوك 512 بايت) . هذه القيمة بالعادة تساوي حجم البرنامج التنفيذي . أما في المثال الذي ذكرته في السابق فهي تساوي فقط حجم برنامج فك الضغط الأساسي .

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

إلى هما الموضوع مشترك في الدوس والويندوز ...

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

العملية في الويندوز مختلفة بعض الشيء .. وهذا له علاقة بالمهام وال Process .. وأنصحك بمراجعة موضوعي تنفيذ برنامج من الذاكرة الموجود في الوصلة : http://arabteam.nicmatic.com/vb/showthread...p3?threadid=231
حسنا في ترويسة الملف التفيذي يوجد أيضا رقم يدل على بداية تنفيذ البرنامج أو ال entry point ، فتجد أنه بتغيير هذه القيمة لكي تؤشر على البرنامج المحقون فإن هذه العملية تكافئ عملية تعليمة القفز في الدوس . ومن ثم بعد أن ينتهي تنفيذ البرنامج المحقون يتم القفز إلى بداية البرنامج الرئيسي . وهذا كل شيء بكل بساطة ...

طبعا يجب الانتباه إلى عدة أمور وهي :
  • البرنامج المحقون يجب ان يكون صغير أي يكون مبرمج بالأسمبلي أو ياستخدام الفيجوال سي++ ولكن من غير MFC أي مباشرة بال WIN SDK .
  • بما أن الويندوز يقوم بتشغيل البرنامج الأول فإن جميع المكاتب DLL يقوم الويندوز بتحميلها ، لذا يفضل أن يكون البرنامج المحقون لا يستخدم سوى المكاتب القياسية ك Kernel32.DLL و GDI32.DLL . أو يستخدم نفس المكاتب التي يستخدمها البرنامج الأساسي . أو يتم التعامل مع المكاتب بشكل ديناميكي أي عن طريق LoadLibrary و GetProcAddress ..
  • البرنامج المحقون ينتهي مفعوله بمجرد انتهاء تنفيذه ولا يستطيع فعل أي شيء عندما يبدأ البرنامج الأساسي بالعمل .


بالنسبة إلى النقطة الأخير التي ذكرتها يمكن التلاعب في WinNT أو Win2000 كالتالي : يمكن أن يقوم البرنامج المحقون بحقن كود آخر في مهمة الويندوز الاساسية أو ال explorer.exe وهو برنامج الخلفية . وهذه العملية جدا معقدة ولكن ممكن أن يتم برمجتها ولكن فقط في WinNT وذلك بسبب أن التوابع ال API التي يجب استخدامها غير متوفرة في Win9x . هذا البرنامج الآخر المحقون يمكن أن يعمل كفيروس والله يستر ....

هذا الكلام نظري بحت ، وأنا راح أسيبك تتمخمخ فيه من قبل أن أجرب شي كود او برنامج يطبق الكلام السابق .

بس بدي أسئلك بالأول أنا مافهمت أيش هو سببك بالظبط من هذا أي كبف يتم استخدتمها في الحماية ؟؟؟
محمد عبد الودود مرعشي
كلامك رائع وزي العسل
وكان إلي تجربة سابقة باستخدام VB لإضافة بيانات إلى الملف التنفيذي دون أن أخربه
وسأنشرها بإذن الله بعد الانتهاء من الامتحانات ولكن أرجو تذكيري في بداية الشهر القادم لأن ذاكرتي صارت عدم
هاني الأتاسي
شكرا عبدالودود وبالتوفيق في امتحاناتك وبعدون إنت ذاكرتك حديد ما في شي بنسيها،

بس أنا كأني تخربطت شوي ، هل قصدك أي رمضان هو إضافة بيانات فقط (أي Data) أو جزء من كود .. إذا كان قصدك الأول فهذا سهل ، قم ققط بفتح الملف ونسخ الdata إلى آخره كما شرحت في البداية أما ّإذا كان قصدك الثاني فهذا الذي قمت بشرحه بالتفصيل في إجابتي ...
رمضان
أخى هانى بارك الله فيك
هكذا يكون الشرح وهكذا تكون المعلومات أما الموضوع السابق موضوع تشفير ملف فى الذاكرة
فأنا منزلة عندى على الجهاز وملفاته
وقد فهمت ماتعنيه تماما ولكن المشكلة هى كيفية التنفيذ
وما أطلبة هو إضافة بيانات وإضافة كود أى الاثنين معا (طماع)

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

أخى عبد الودود أذكرك من الان أى قبل الشهرrolleyes.gif
neoo
السلام عليكم ،،
اخ رمضان وش دعوه بخل، الاخوان هنا ما يقصرو ابدا و هذا عندك الاخ هاني ، و على فكرة المشكلة ان اكثر الاصدقاء هنا مشغولون و انا منهم ،،
عموما سبق ان سويت برنامج زي ما قلتلك باللغة السي، و كنت كاتبه في الاساس بالدلفي لكن تركت الدلفي من زمان و انا عارف ان وعدتك بشرح للعملية بس ما عندي و الله وقت!! عموما سجل اميلك و بارسلك المشروع بالدلفي كاملا بالسورس راجيا منك عدم استخدامه في اشياء تغضب الله سبحانه و تعالي ، لان البرنامج عبارة عن ثلاث برامج سيرفر و كلاينت و برنامج يقراء EXE حق السيرفر و يغير البورت الذي يفتحه و يغير الايميل اللي يرسل له فك باسوردات الجهاز اللي شغل فيه البرنامج ، مع ان هذا البرنامج ليس ما تريد بالضبط لكن سيفيدك كثيرا كثيرا، بالنسبة لسيرفر و الكلاينت فانها لا يكشفها برنامج حماية فيروسات و لا اي برنامج ... لذلك فهي خطيره جدا و انتبه تشغلها علشان ما تجيني باسورداتك على ايميلي (-:
عموما لان ارسلها على ايميلك حتى تحلف لي بان لا تعطيها شخصا و لا تستخدمها في مضرة المسلمين ( يكفي اللي سويناه ) .


شاكر لك ومقدر مساعدتك السابقة لي ،،

اخ هاني بالنسبة للكومبايلر عندي كود assembler و compiler لمعالجات موتورلا و مجموعة سورس كود مفسرات للغة السي، كنت بارسلها لك ، لكن نظرا لانشغالي ماقدرت ارسلها، عموما إن شاء الله غدا ارسلها لك .
رمضان
أخى عبد الوهاب
مقدر لك مجهودك أما بالنسبة للقسم فلا أفضل أن أقسم ليس لانى أنوى إستخدام البرنامج فى الضرر
ولكنى كما تعلم مهنتى الاساسية معلم والرسول صلى الله عليه وسلم
يقول بعثت معلما ودعنى أسألك سؤال هل وجدت معلم يستخدم علمه فى الضرر ؟

أما بريدى فهو فى ردى السابق أو
ramadan@arabteam.nicmatic.com
neoo
السلام عليكم ،،
لم اقصد شي سي عند طلي منك القسم لكن فقط كنت اود المساعده و تبرئة ذمتي، لانه سبق ان استخدم البرنامج في اشياء سيئة و ندمت و قتها ( و بصراحة اكثر صارت فيني من اللي انا معطيه البرنامج شفت كيف الناس سيئة جدا و السبب يقول من اللي قالك تعطيني اياه شفت البجاحة !! ) عموما ما دمت معلما فلك البرنامج بكامل الحرية و اسف اذا كنت فهمت من كلامي تجريح لك ،،

وإن شاء الله راح ارسله لك غدا في الصباح ،،

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

أخ نيو أتمنا ارسال ما تريد ارساله وأنا شاكر جدا ...

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

قمت بعمل كود يقوم بالتالي :
  • يمكن أن يستدعى من داخل الملف نفسه من أجل كتابة أي شيئ في أي موقع في نفس الملف التنفيذي . وذلك بعد الانتهاء مباشرة .
  • يمكن أن تمسح الملف التنفيذي نفسه بعد الانتهاء مياشرة .


لم أنقل الكود بعد إلى DLL لكي يستخدم في ال vb ولكن سوف أشرح شرح بسيط على ماهية هذا الكود ..

في الحقيقة إطريت إلى برمجة كودين منفصلين واحد لكي يعمل على Win9x والآخر يعمل على ًWinNT أو Win2000 .. الطريقة المتبعة مختلقة بعض الشئ ..

في ويندوز 2000 ..
يتم حقن كود في ال Program Manager وهو برنامج الخلفية في ويندوز . هذا الكود المحقون يعمل في Thread منفصل في ال Program Manager ، وينتظر انتهاء البرنامج الأساسي الذي استدعى الروتين . وعند انتهائه يقوم إما بمسح الملف التنفيذي أو الكتابة فيه على حسب الأمر المعطى . من دون تدخل الهارد بالموضوع ..

في ويندوز 9x ...
الطريقة السابقة لا يمكن استخدامخا هنا من أجل بعض التوابع مثل VirtualAllocEx و CreateRemoteThread لا يعمل في 9x .. لذا تم استخدام طريقة أخرى بحقن نفس الكود ولكن في نفس الProcess في ذاكرة Heap يتم انشائها في ال Run-Time ...

إن شاء الله أستطيع أن أنقل الكود إلى مكتبة DLL قريبا حتى يتسنى لك تجريبه ...
هذه "نسخة - خفيفة" من محتويات الرئيسية للإستعراض الكامل مع المزيد من الصور والخيارات الرجاء إضغط هنا.
Invision Power Board © 2001-2009 Invision Power Services, Inc.