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

مواضيع عامة للنقاش

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

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

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

حسب تجربتي لاحضت أن بعض الإخوان قد تتخلط عندهم الأمور حين نتكلم عن Process مثلا أو Thread أو Adress space أو Context إلى غير دلك من الأمور . ولدا يمكن أن نتطرق إلى هده المفاهيم وربما من خلال المثال التالي :

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

علما أن هناك عدة طرق لحل هدا لدا أترك الباب مفتوحا للتدخلات والنقاشات.

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

أتمنى أن يجد هدا الموضوع صدى بين المشاركين علما أن الهدف هنا ليس حل المشكل فقط بل الحل والنقاش.

إلى اللقاء.

#2

عليكم السلام ورحمة الله

تعرف أخي Chik

أتمنى أن يصبح المنتدى بهذا الشكل

في كل يوم يقوم أحد الأعضاء بطرح برنامج ... يريد أن يغير فية أي شيء

أو يفهم طريقة عملة ... ويتفاعل بقية الأعضاء مع الموضوع إلى أن يجدو لة حل

في مدة شهر = فهم عمل 30 برنامج أو إكتشاف 30 فكرة

بهذة الطريقة سيخرج المنتدى خبراء

بالإضافة إلى أن هذة الفكرة تجمع بين المبتدىء - والمتقدم في البرمجة

بالإضافة إلى أن هذة الأمور تكسبك مهارة في البرمجة؟

مثال : قبل فترة قمت بكتابة برنامج .. وأردت أن يظهر tooltip عند الساعة

مثل برامج التحديث وبرنامج Zone Alarm وغيرها

راجعت أغلب مكتبة MSDN فلم أجد طريقة كاملة - إلى أن أدخلت برنامج Zone Alarm

داخل Olly وسجلت الدوال + البارمترات وتتبعت البرنامج

في مدة 8 دقائق تقريبا كتبت المثال الذي أريدة ؟؟

فعلا فائدة كبيرة - وندوز مفتوح المصدر :)

وإلى اللقاء

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 لفتح مثل هذه المواضيـع

,

انا لدي موضوع يدور في ذهني

وهو كيف يمكنني معرفة الأخطاء قبـل ان تقع ؟

في نظام الويندز ,

وإذا لايمكنني فعل ذلك ’ هناك طريقه لمعرفة الخطأ الفلاني سببه كذا

مثلاً رقم الخطأ هذا سببه اللصق في مكان ممتلئ مثلاً او غيره

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

والاخطاء يطلع التعريف حقها بهذه الطريقه مثلاً

CS:0000 IP:0077 مثلاً هنا ماهو الخطأ ان تتضمن هذه القيمه في الرحستر CS

عندما تشتغل بالـpointers تحدث لك اخطاء عديده

ولو تفاديت هذه الاخظاء واعطيت لكل pointer عنوان فيظل عندك أخطاء

لا أدري هل نحجر في مكان غير قابل للحجر ( للنظام نفسه ) ام ماذا؟

ارجوا النقاش حول هذا الموضوع

#4

دقيقة Jass لو سمحت

حبيت تنزل برنامج بجانب الساعة فأخذت الكود من الزوم ألارم

ببرنامج أولاي

بصراحة خلتني أتشوق لأعرف شو بإمكاني فعله بأولاي

أنا حملت البرنامج من زمان و ما إستخدمته

لو سمحت فيك تشرحلنا أساسياته

و أنا شاكر لك

#5

وأنا كذلك اخي Jaas ياليت تتكرم وتدلنا على الطريقة الصحيحة التي استخدمتها

شاكرا لك وبالتوفيق

#6

يبدو ان موضوعي لايهم

#7

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

الأخ عيسى لا تزعل ولا أضن أن هناك موضوع أحسن من الآخر بل لكل واحد مكانته وأهميته.

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

ما يمكن عمله هو تغيير مسرى أو تحليل الخطء حتى نرى ماذا وقع وكيف سنعالج أي نوع ما. وهنا ندخل في مجال Error Handling أو بالأصح Exception Handling ما علينا سوى أن نكتب كود معين ليعالج الأخطاء ونغير مسرى الأخطاء لتتجه نحو الكود الذي كتبناه وهنا سنعالج الخطء ونقرر ما يمكننا فعله سواء إيقاف البرنامج أو استدعاء أشياء أخرى . وهنا لدينا عدة طرق لهذا النوع من البرمجة وعندنا بعض دوال الآبي في الوندوز وكذلك بعض الأقسام للذين يشتغلون ب MFC إلى غير ذلك. وهذه الأخطاء تكون ك Structures تضم كل المعلومات الخاصة بالخطء وهنا غالبا ما نتكلم عن Structured Exception Handler أو ما يعرف بملخص SEH وللذين يتتبعوا البرامج من الداخل قد يعرفوا أن هذه الستركت تبدأ في

fs:[0] ولهذا نلاحض كثيرا داخل البرامج أشياء مثل : mov ...fs:[0]... هذا يمكننا من قراءة الستركت الحالي كما يمكننا أن نغيرها إلى أشياء شخصية وغير ذالك.

هذا رأي والنقاش مفتوح.

#8
اقتباس
بصراحة خلتني أتشوق لأعرف شو بإمكاني فعله بأولاي

أنا حملت البرنامج من زمان و ما إستخدمته

لو سمحت فيك تشرحلنا أساسياته

انظر لتوقيع jaas !! وسبق وأن تفضل وشرح الولاي فعلا هنا في هذا المنتدى ,,

الشرح موجود في أحد الروابط في توقيع jaas ,,

banner_60_468.gif

NOTHING IS IMPOSSIBLE

#9

شكرا HGB

على سيرة الأسئلة

بنات أفكاري سألتي سؤال و هو :

كيف ممكن أستطيع بتعريف DB تخزين المحارف الثلاثة 127

كرقم و ليس محارف

و شو هي المقاطعه يلي بدخل هذا الرقم في بايت

أنا جربت المقاطعة 3F من INT 21

شكرا لكم

#10

الحمد لله ... بدأ حماس الأعضاء في المنتدى

الأخوة Desigen + sgr2001

جوابي سيكون موضوع كامل ... ترقبوا جديد منتديات الفريق العربي :)

أخي عيسى ... أعتقد أن مشرفنا الغالي chik جاوبك بوضوح

بالإضافة إلى ذلك راجع:

/index.php?showtopic=45181

وبصراحة مشكلة الأخطاء عقدت العالم ... فلا توجد نظرية واحدة

بأن يقوم البرنامج بإصلاح نفسة وهو يعمل ( على حسب علمي )

ولكن يكتفي بمعرفة الخطأ .. وكيف وقع لكي يتجنبة في المرة المقبلة ؟

.

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>

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

#11

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

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

في نافدة البرنامج الأول قمت بصنع نافدة من نوع TextBox وأخفيتها ونفس الشيء في نافدة البرنامج الثاني . وهكدا بدأت أقاسم المعطيات بين هدين البرنامجين عن طريق هده النوافد المخفية . وقلت أن فيها نوع من الغش لأن أشياءا تدور أمام المستعمل دون أن يراها. وكانت الأمور تجري كما يلي :

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

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

Shared Section أو كيف يمكن أن نحجز مكانا في الداكرة المشتركة بين جميع البرامج وإدا اقتضى الحال نرى كيف نحل هدا ونحن في الحلقة صفر.

إلى اللقاء.

#12

مرحبا chik كنت ماشي معاك وفاهمك إلى أن ذكرت ( الحلقة 0 )

المهم لإنشاء ذاكرة بين البرامج ؟

ظهر إختلاف كبير في تقسيم الذاكرة عندما ظهرت أنظمة وندوز NT مثل وندوز 200 وإكس بي بمعنى أن تقسيم الذاكرة في وندوز 98 وإكس بي يختلف من حيث الطريقة

وندوز 98 : يعتبر كل عنوانين الذاكرة الأ كبر من 2 غيغا بايت على أنها محمية لا يمكن الوصول لها .. في ذاكرة البرنامج

وندوز إكس بي (أنظمة NT ) تسمح لك بالوصول لأي مكان .. ولكن بدون فائدة ؟؟

عند تشغيل اي برنامج في أنظمة NT يقوم النظام بإنشاء ذاكرة وهمية للذاكرة الأصلية

للملفات المتصلة مع البرنامج .. كيف ؟

شغل 10 برامج وكل هذة البرامج تحمل المكاتب user32.dll و kernel32.dll وغيرها

حاول التغيير في محتوى هذة المكاتب في الذاكرة : سيحدث التالي

في أنظمة وندوز 98 .. لن يغير النظام القيمة وسيحدث خطأ نظام .. لأن عنوانها أكبر من 2 غيغا مثلا F7F5C412 لأن النظام يعلم بأن تغيير أي قيمة سيحدث خطأ في بقية 9 برامج

شغل نفس البرامج في وندوز NT وحاول تغيير أي قيمة في الذاكرة .. بدون أي تعب ستتغير القيمة . وستحدث خطأ في برنامج واحد من 9

بكل بساطة وكأن النظام لا يعرف إلى برنامج واحد ..

--------

بعد هذة المقدمة .. سيكون سهل في أنظمة 98 إنشاء ذاكرة للمشاركة مع بقية البرامج

ولكن كيف في أنظمة NT

في هذة الأنظمة سنعتمد على مقبض العملية التي أنشأت الذاكرة .. بمعنى عنوان داخل عملية

أما عن الدوال فهي :

في طرق بسيطة وهي بالدوال

GlobalAddAtom

GetAtomName

FindAtom

أو عن طريق الدالة

CreateFileMapping

ويكون البارمتر الأول (HANDLE)0xFFFFFFFF

وتستطيع بناء مساحة من الذاكرة بإستخدام

VirtualAlloc

ولكن عند القرائة أو الكتابة .. يجب أن تستخدم مقبض العملية التي أنشأت المساحة

أما عن إستفسارك عن تغيير خصائص قسم للمشاركة .. إستخدم هذة الدالة

VirtualProtect

وتوجد طرق أخرى وهي بإستخدام ملفات dll

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

المهم .. وضح ماهي نوع البيانات التي تريد مشاركتها .. وكم تقريبا حجمها

وسؤحاول إيجاد أفكار أوضح ؟

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>

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

#13

تشكرون ياشباب ,, فعلا لديكم خدع وأساليب كثيرة ,, وخدعة chik جميلة للغاية ولاأعرف هل أقول تصلح للمبتدئين ,, أم أنها صعبة للمبتدئين حيث يجب التعرف على هرمية التحكمات وأنها كلها child Windows ,, ويجب معرفة رقم ال class الخاص بها لاقتناص البيانات التي فيها والحصول على المقبض Hwnd وبعدها يمكن أن تفعل كل شيء بالتحكم الذي في البرنامج الآخر ,,

تشكر يا jaas على طرحك موضوع ال atom فهي من الدوال التي قرأتها سابقا ولم أحاول أن أعرف ماذا تفعل ,, رجاء المزيد من التوضيح ,,

توجد تقنيات أخرى أيضا لتبادل البيانات بين البرامج كالتالي :

ال named Pipes الأنابيب المسماة !! وتعمل لنقل البيانات بين المعالجات المختلفة في الوندوز ,, ولديها دوال ك CreateNamedPipe لانشاء ال Named Pipe ثم لعمل الاتصال ConnectNamedPipe وأخيرا بال ReadFile وال writeFile نقرا ونكتب لهذا ال NamePipe ومن البرنامجين يتم الاتصال وقراءة وكتابة المعطيات ,,

تقنية أخرى ,,

MailSlot باستخدام الدالة CreateMailslot ثم بال ReadFile وبال writeFile أيضا يمكن الحصول على المتغيرات بسهولة منها بين المعالجات ,,

تقنية ال Wionsock تخيل أنها سهلة ورائعة وسريعة لنقل البيانات بين البرامج ,, فقط مهد ال Ip = 127.0.0.1 ,, ثم افتح منفذ في احد البرامج ,, وارسل البيانات بكل سهولة ,,

تقنية ال DLL طبعا كما وضح Jaas

فك حماية Blockat من الذاكرة بال VirtualProtectEx باعطاء حق الكتابة فيها ,, ويمكن أن تقرأ هذه البلوكات من برنامج آخر ,,

banner_60_468.gif

NOTHING IS IMPOSSIBLE

#14

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

الحمد لله لقد بدأ النقاش وظهرت أفكار مختلفة.

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

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

هذا كان الحل الأول الذي عملته في البداية . وبعد وقت بدأت أهتم بمواضيع الذاكرة وكنت أشتغل على نظام 98 ولا زلت حتى الآن.وسأزيد بعض التفاصيل على الذي قاله الأخ JAAS الذي أشكره كثيرا على اهتماماته. في 98 الذاكرة تحتوي على 4 جيغا - 32 بايت تعطينا هذه القيمة - وهي مقسمة إلى قسمين كما قال الأخ jaas كل واحد له 2 جيغا. الإثنين جيغا الأولى يمكن أن نقول أنها مجزءة إلى قسمين. الأول بمساحة 4 ميغا وهو يحتوي على كل ما يخص نظام الدوس إن صح التعبير وبعد ذلك وإلى 2 جيغا فهي الذاكرة المخصصة للبرامج ولهذا قد نلاحظ أن جل البرامج تبتدأ في الذاكرة 400000 هكس لأن الذاكرة التي قبلها لا تصلح للبرنامج كما ذكرنا من قبل. وفيما يخص 2 جيغا الباقية أو العليا فهي بدورها مقسمة إلى 2 .1 جيغا الأول أو ما يعرف بالذاكرة المشتركة فهي يراها جميع البرامج وعلى سبيل المثال فمكتبات الوندوز مثل Kernell32 وغيرها فهي توجد في هذا الفضاء . فهنا جاءت فكرة أن أضع المعطيات التي نريد أن نتقاسمها في هذا المجال وكانت الفكرة أن آخذ مكانا فارغا وسط مكتبة kernell32 ويضع فيه البرامج معطيات وبدون عناء يمكن لبرنامج آخر أن يقرا المعطيات أو يغيرها وهنا أيضا اعترضتني مشكل الحماية لهذه المكتبة . وهنا بدأت أتساءل من الذي يحمي هذا المكان ولكن بعد أن درست شيئا ما عن ترويسة الملفات جربت أن أغير الحماية في الملف على القرص وهنا عملت الفكرة واستطعت الكتابة إلا أن هذه الفكرة قد لا تعمل إلا في التجربة لأنك لو تعمل برنامج فسوف لن تعمل أو تطلب من المستعمل أنك ستغير ملف المكتبة فهذا قد يجعل لهم شيء من الخوف. ولهذا يمكن أن نعود إلى الطريقة أو الطرق التي يمكن أن نعملها. في MSDN بحثت وهناك عدة دوال تحجز أمكنة في الذاكرة ولكنها لا تحجز في هذا الميدان أو على الأقل ما هو مكتوب وأظن أن MSDN لم تقله حيث بعد بحث اكتشفت أن الدالة VirtualAlloc تمكن ذلك ويلزمها بارامتر معين وهذا البرارامتر لم أجد له أثر في المكتبة. وسأعطي هذا البرارمتر في المثال المقبل إن شاء الله لأني لا أتذكره الآن.

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

والطريقة الأسهل هي ربما أن نستعمل Shared Sections وسنتطرق لها فيما بعد.

إلى اللقاء.

Share.zip

#15

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

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

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

الباب مفتوح للنقاش وفي الملف المرفق تجدون البرنامج المذكور والمشروع كاملا له.

إلى اللقاء.

Test.zip

#16

أخي HGB

ال ATOM تستخدم لتخزين أسامي النوافذة في الذاكرة

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

تستطيع الوصول لها من أي مكان ؟ وأي برنامج

هل تريد دليل ! لن أذهب بعيد (هذا الدليل من نفس الموضوع وبالتحديد طريقة

الأخ chik

قام من برنامج خارجي بالبحث عن إسم النافذة عن طريق الدالة FindWindow

كيف سمح لهذة الدالة بالدخول لذاكرة البرنامج الثاني وقرائة معلومات عن النافذة

لأن النظام يضع معلومات النافذة في ذاكرة تسمح بالمشاركة بين التطبيقات

سأقرب لك الموضوع كل نافذة في البرنامج يسجلها النظام

كيف يسجلها .. بإستخدام الدالة RegisterClass (ماذا تعيد هذة الدالة )

ATOM RegisterClass(
  CONST WNDCLASS *lpWndClass   // address of structure with class 
                               // data
);

بالتأكيد تعيد متغير من النوع ATOM

ولها إستخدامات أخرى ( مثل برنامج يظهر نافذة listbox )

وأنت متأكد أنها قائمة .. ولكن عند إستخدام أحد برامج spy تجد أن نوع النافذة

مثالا Xlitmy وهي ليست قائمة ..ولا أداة نص ..ولا زر أمر .. ولا شيء

بإختصار هو تغيير لمعلومات تسجيل النافذة !

أخي 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>

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

#17

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

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

كما ذكرت من قبل في الذاكرة 2 جيغا العليا وفي الجيغا الأول من هذين الإثنين تكون عندنا ذاكرة مشتركة بين جميع البرامج في نظام 98 . ولهذا فإذا استطاع برنامج من كتابة شيء ما في هذا المجال فسيتمكن باقي البرامج الأخرى من رأية هذه الكتابة وهذا يمكننا مثلا من برمجة برنامج مثل الكليبورد Clipboard .

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

invoke VirtualAlloc,address,Number,MEM_COMMIT + 8000000h,PAGE_READWRITE

البارامتر الأول هو العنوان الذي نريد أن نحجز فيه وغالبا ما نعطيه 0 لنترك النظام يختار المكان المتوفر.

البارامتر الثاني Number هو عدد البايتات التي نريد حجزها .

البارامتر الثالث هو نوع الذاكرة التي نريد حجزها وهنا كما ذكرنا يجب أن نضيف العدد 8000000 لكي يتم الحجز في المنطقة المشتركة.

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

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

invoke VirtualFree,address,0,MEM_RELEASE

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

وفي الملف المرفق ستجدون المشروع الكامل لبرنامجين :

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

وفي البرنامج الثاني سنعطيه هذا العنوان الذي تم حجزه وننقر OK .

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

وأكرر مجددا أن هذا البرنامج يشتغل فقط في نظام 98 .

إلى اللقاء.

Win98_Share.zip

#18

خي chik ...

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

ولكن حاولت أن أعمل لودر للبرنامج الهدف ولكن دون أن أغير فيه شيأ

فكان لا بد وأن أعطي هذا البرنامج ( صانع اللودر ) بعض البيانات ومنها هذه البيانات :

Add Patch (all hex)

patch VA :

original Bytes :

patch Bytes :

والسؤال : ما المقصود بـ patch VA ؟

وكيف أستطيع الحصول عليه ؟

وهل هو خاص بالباتش فقط أم أنها ايضا الخاصة بالملف الهدف أيضا ؟؟

تحياتي

#19

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

لا أعرف ما هو البرنامج الدي استعملته لهدا الغرض ولهدا لا أعرف ما هي المعلومات الدي يطلبها منك . و Patch VA قد تكون ربما إما Virtual Memory التي سيقوم بوضع الباتش فيها أو المعطيات التي سيكتب في هده الداكرة. على العموم هده هي المعطيات التي تلزمنا لصنع لودر في أغلب الحالات.

إلى اللقاء.

#20

أخي chik توصلت إلى أن المقصود بـ patch VA تعني Virtual Address كما اكتشفت بأن البرنامج

متواضع جدا ولا يستاهل التعب ...

-----------------------------------------------

نعود لموضوعنا الأول ...

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

هل يسمح وقتك بوضع الكود السابق على شكل برنامج جاهز يقوم المستخدم بإدخال المعطيات الواجب تبديلها

مثل Virtual Memory وغيرها ثم تشغيله ليقوم بالمطلوب ...ويكون صالح لأي برنامج تريد التعديل فيه .

ملاحظة أخيرة :

ماذا لو قمت بتشفير أو ضغط الملف السابق فهل سينفع الكود السابق للقيام بالتعديل ؟

أم أن الكود يحتاج لتعديل ...

قمت بضغط الملف السابق ( test ) بـ ASPack v2.11 فهل من الممكن صناعة لودر له دون فك ضغطه ؟؟

تحياتي

Test2.zip

تم تعديل هذه المشاركة بواسطة شادي في 16 ديسمبر 2004 في 23:25

#21

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

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

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

إلى اللقاء.

#22

مشكور أخي chik

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

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

تحياتي

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

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