الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

نقل لموضوع باتش الذاكرة

مغلق
بدأه chik في 12 أكتوبر 2004 · 4 رد · 999 مشاهدة · في لغة Assembly لأنظمة 16, 32, 64 بت
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم,

كما اقترح في الموضوع السابق :

/index.php?showtopic=48028

نقلت الموضوع إلى هنا لنحاول أن ننا قش مختلف الطرق لهذا.

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

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

الطريقة الأولى التي سأعطيها هنا تكمن في :

- نفتح بروسس جديد للبرنامج الهدف وهنا هو test.exe ولهذا الغرض سنستعمل الدالة :

invoke CreateProcess,0,addr file,0,0,0,CREATE_SUSPENDED,0,0,addr sinfo,addr pinfo

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

file فهو اسم البرنامج الذي نريد فتحه وهنا سيكون test.exe .

- البارامتر CREATE_SUSPENDED يعني كيف سنفتح البرنامج أو البروسسوس وبارامترنا هنا يعني أنه بعد فتح البرنامج يتوقف ولا يشتغل وهذا هو Suspend وهنا نريده أن يتوقف حتى نقوم بالتغييرات اللازمة قبل نطلب منه تتم التشغيل وإلا فإنه سيشتغل كالمعتاد ويكون عملنا لا جدوى منه.

البارامترات sinfo و pinfo هي ستركترات ستقوم الدالة بملإئهما بمختلف المعلومات حول البرنامج والتي قد نحتاجها حسب نوعية البرنامج.

بعد هذا سنستعمل الدالة :

invoke OpenProcess,PROCESS_ALL_ACCESS,0,[esi].dwProcessId

وهي ستقوم بفتح البروسسوس السابق والهدف هنا أنها ستعطينا هاندل لهذا كما ستمكننا من اختيار بعض البارامترات التي نحتاجها. فالبارامتر الأول PROCESS_ALL_ACCESS يمكننا من اختيار الصلاحيات التي يمكن أن نعطيها للبروسسوس المفتوح وهنا بدون وجع الرأس سنأخذ كل الإمتيازات أو All Access . والبارامتر الأخير ليس إلا رقم البروسسوس الذي نريد فتحه وهنا طبعا نريد البروسسوس test ورقم البروسسوس سنأخذه من الستركت السابقة pinfo فهي تعطينا كلا من رقم البروسسوس والشريد وذا الهاندل الخاص بهما كما يمكن أن نتعرف أكثر على هذه الستراكت في مكتبة مايكروسوفت أيضا. وإذا تم الكل بنجاح سنحصل على هاندل الذي سنستعمله فيما سيأتي.

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

 invoke VirtualProtectEx,hand,address,number,PAGE_EXECUTE_READWRITE,addr old

هذه ستمكن من تغيير صلاحيات عنوان معين في بروسسوس معين وبابرامتراتها كما يلي :

hand هو هاندل البروسسوس والذي عثرنا عليه بعد فتح البروسسوس السابق.

address وهو العنوان الذي نريد أن نغير صلاحياته.

number هو عدد البايتات ابتداءا من address الذي سنغير لها الصلاحيات

PAGE_EXECUTE_READWRITE الصلاحية الجديدة التي نريدها وهنا كما يدل على ذلك الإسم سنعطيها كل الصلاحيات إنجاز كتابة قراءة.

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

فإذا تمت العملية بنجاح فسوف يمكننا أن نكتب أو نغير البايتات الموجودة في الذاكرة المقصودة ةللكتابة سنتعامل مع الدالة التالية:

invoke WriteProcessMemory,hand,address,addr good,number,addr written

هذه مثل الدالة السابقة تقريبا سنعطيها هاندل البروسسوس والعنوان الذي نريد أن نكتب فيه . good هي الذاكرة التي ستكون فيها المعطيات التي نريد كتابتها . number هو عدد البايتات التي نريد كتابتها و written هي مؤشر يستقبل عدد البتات التي كتبت بالفعل.

بعد هذا ما علينا سوى أن نقول للبرنامج أن يستمر في شغله بواسطة :

invoke ResumeThread,[esi].hThread

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

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

40105A وهي تحتوي على التعليمة jz x وهي قفز مشروط إلى العنوان x ونلاحظ أنه إذا تم القفز فكأن الباسوورد صحيح وفي الحالة الأخرى سيكون خطأ. لذى لو نغير القفز المشروط إلى قفز غير مشروط jmp ففي جميع الحالات سيتم القفز وكيفما كان الباسوورد ستتم عملة القفز وسيكون كأن الباسوورد الذي أعطيناه صحيح والبايت الذي يدل على القفز المشروط هو 74 هكس الذي في الذاكرة أعلاه لو نغيره بالقيمة 0EB فكأننا غيرنا التعليمة من jz إلى jmp وهذا هو الهدف.

فيمكن أن نزيد مثلا لو أردنا أن يكون الباسوورد دائما خطء فسنجعل البرنامج لا يقفز أبدا في الذاكرة السالفة وهنا يمكن أن نفعل ذلك بتغيير البايتان 74 1D في الذاكرة السالفة إلى بايتين 90 90 وهما تعليمتان NOP أو No Operation أي أن البروسسوس لا يقوم بأي شيء وهذا سيجعل البرنامج يندرج مباشرة إلى الكود الذي يعطينا باسوورد خطأ.

ويمكننا أيضا أن نمر مباشرة إلى النافذة الثانية بدون أن يطلب منا أي شيء وهنا يمكن مثلا أن نغير بعض المعطيات الخاصة بالنافذة ا|لأولى لنجعلها تشير إلى النافذة الثانية وهكذا عند الإنجاز سنتصل مباشرة بالنافذة الثانية. وكل ما سنغيره في بارامترات DialogBoxParam هو عنوان الرسورس ليدل هذه المرة على اسم رسورس النافذة الثانية وكما يجب أن نغير أيضا عنوان DialogProc لنعطيه عنوان الدالة الخاص بالنافذة الثانية.

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

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

إلى اللقاء

PATCHER.zip

#2

أشكرك أخي chik

جمعت بين الإسمبلي والسي بموضوع رهييب

وكلنا متابعين معك

سأقوم بتخزين البرنامج الذي طرحت .. وسأرجع لكتابة الملا حظات

-

http://www.jaascois.com

*************************************************

مجموعة مواضيع - إحتراف البرمجة -

ّ~~~~~~~~~~~~~~~~~~~~~~

البرمجة المتقدمة & الهندسة العكسية & برمجة وأمن الأنظمة

/index.php?showtopic=45002

آخر المواضيع :

+- تحليل جرائم الكمبيوتر -+

أنظمة اليونكس(Solaris,HP, AIX,SCO)وانواع المعالجات

ثغرة SMS لأجهزة الجوال Siemens 3568i !

أخطاء وثغرات البرامج العربية !!!

سلسلة مواضيع - أمن وحماية مواقع الويب -

E البرمجة المتقدمة X للملفات التنفيذية E

سلسلة مواضيع ثغرات الأنظمة وإختراق الأجهزة

**************************************************

<span style='font-size:14pt;line-height:100%'>الإرادة تحـــقق السيـــادة</span>

**************************************************

#3

شكرا لك استاذي chik و ساحاول ان شاء الله متابعة تلك الدروس الجميلة

#4

مشكور أخي chik موضوع جميل جدا كنت أبحث عنه من زمان وسأل عنه كثيرا ولكن لم أجد جواب شافي ...

عزيزي ما ادري لو كان المثال الذي وضعته مشفرا فكيف سيكون صنع اللودر ؟

هل سيكون بنفس الطريقة ؟

انا ضعيف جدا في الأسمبلي وأرى أن صنع لودر بهذا الشكل صعب على

يعني كتابة الكود وما إللا ذلك ... فهل يوجد تبسيط لذلك أو هل يمكنك وضع البرنامج على شكل كود .

وهل ينفع هذا الكود مع كل البرامج يعني تغير اسم البرنامج ومكان التغيير فقط .

ماذا لو أحببت صنع اللودر بالفيجول بيسك فهل يمكنك مساعدتي لوضع لودر لنفس المثال .

تحياتي

#5

السلام عليكم,

اقتباس
عزيزي ما ادري لو كان المثال الذي وضعته مشفرا فكيف سيكون صنع اللودر ؟

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

اقتباس
وهل ينفع هذا الكود مع كل البرامج يعني تغير اسم البرنامج ومكان التغيير فقط .

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

اقتباس
ماذا لو أحببت صنع اللودر بالفيجول بيسك فهل يمكنك مساعدتي لوضع لودر لنفس المثال

حاول وسأساعدك إن شاء الله علما أنه إذا كنت تعرف استعمال دوال API في الفجوال باسيك فلن يكون لديك مشكلا في تحويل البرنامج مباشرة إلى الفجوال باسيك.

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

إلى اللقاء.

هذا الموضوع مغلق.

مواضيع مشابهة