كيف تحمي برنامجك من الكســـر ؟

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

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






-لا تستخدم أبدا أسماء ذات معنى للتوابع وإجرائيات .

مثال :
• function RegistrationOK: Boolean;

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

-لا تستخدم أبدا رسائل-إعلام إنتهاء الصلاحية أو عدم سماحية كلمة المرور .

مثال :
Invaled Password , please try agine ?
بالتأكيد لن يقوم الهاكر بتفحص 500 كيلوبايت مثلا من شفرة لغة التجميع Assimply لكي يعرف أين يوجد الجزء الخاص من الكود الذي يجب علية تعديلة لكسر كلمة مرورك . ولكنة سيجرب أولا إدخال كلمة عشوائية لكي يعرف ماهي رسالة-إعلام عدم سماحية الكلمة , ويترقب الرسالة الناتجة , والتي تكون مخزنة بصيغة نصية في الملف التنفيذي ويسهل العثور عليها , ثم يبحث عنها في شفرة الآلة لملفك التنفيذي , وبالتأكيد هذا هو الجزء من الشفرة الذي يحوي شرط سماحية كلمة المرور والذي يمكن تعطيلة أو قلبة ببساطة فائقة .. لذلك لا تسمح لة بتحديد موقع العمل بسهولة , تجنب كتابة هذا النوع من الرسائل , أو إفصلة بعيدا عن الجزء الخاص بإختبار كلمة المرور .

-جزء برنامجك إلى ملفات متعددة


-لا تستخدم أبدا أسماء ملفات ذات معنى .

مثال:
License.Dat
لا تجعل الهاكر يتوقع أي ملف يجب أن يبدأ بة أولا , وحاول تضليلة بتشتيت الإجراءات في عدة ملفات بدلا من تجميعها في ملف واحد .


-أستخدم أدوات تشفير الملفات .

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

-أضف فترات إنتظار طويلة .

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

-أضف فترات إنتظار أخرى .

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

-أضف شفرات checksums خاصة.

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

-برىء رسائلك من البرنامج .

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

-رقع برنامجك .....

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

-خزن كلمات المرور في أماكن غير معتادة

بالتأكيد لن تخزن كلمة مرورك في ملف نصي بالإسم Password.txt في نفس مجلد البرنامج ؟؟؟؟
بإمكانك تخزينها في أحد حقول قاعدة البيانات المستخدمة , أو خزنها بملف وأعطة إمتداد DLL وضعة في مجلد النظام SYSTEM32 مثلا , وليكن إسمة RDC123.dll على سبيل المثال .....

-إذا أردت إستخدام رسائل توضيحية للمستخدم , لا تستخدم سلاسل محرفية مخزنة.

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

-لا تفصل إجراء التحقق من الصحة لوحدة بشكل مستقل

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

-إستخدم أسماء محجوزة أو شبيهه بها أو أسماء للنظام

بالتأكيد لن تقول لي أنك تخزن كلمة المرور في متحول بالإسم Password ؟؟؟؟
إستخدم أسماء تبدو وكأنها من تعليمات البرنامج والنظام , أو تبدو كأنها رموز ست عشرية
مثال : "73AF" or "GetWindowText "or "handle73").
ربما ستقطع بذلك علية إمكانية التوقع السهل لمتحولاتك .

- لا يفضل إستخدام ميزات التعطيل ,
عندما لايسمح للمستخدم بالقيام بعمل ما , لا تجعل عنصر التحكم الخاص بة معطلا , مثلا لاداعي لجعل القائمة معطلة (رمادية وغير قابلة للضغط) أو الزر غير مفعل , عندما لايحق للمستخدم نظريا القيام بالفعل الخاص بها , بل إترك برنامجك بلا إستجاية (تذكر لا رسائل تنبية ولا إجراءات معاكسة .. ) لإن عدم القيام بإجراء معاكس قد يكون أفضل بكثير من القيام به ,, مثلا لاداعي لإغلاق البرنامج إذا لم تكن كلمة المرور المدخلة صحيحة , لإن العثور على شفرة إغلاق البرنامج سهل للغاية , وبالتالي العثور على الجزء الذي يجب عدم العثور علية ..
بإمكانك إستخدام تعليقات المترجم أيضا :
• {$IFDEF trial}
• ... no action here ...
• {$ELSE}
• ... advanced functionality for registered user ...
• {$ENDIF}


إن جعل كلمات تسجيل الدخول متعلقة بظروف مختلفة أفضل مليون مرة من الكلمات المخزنة سلفا .

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


نكمل في المرة القادمة ,,, مع ملاحظات أكثر تخصص مع دلفي ..
عروة علي عيسى ..
المنتديات

التعليقات

الأيهم

لا تستخدم أبدا أسماء ذات معنى للتوابع وإجرائيات .
أسوأ نصيحة يمكن أن تنصح مبرمجا بها. لماذا لا تقول له: استخدم برنامجا صغيرا يحول اسماء التوابع والمتحولات إلى كلمات سر قبل إنتاج الإصدار النهائي. هل تعتقد أن من الضروري شرح أهمية استخدام الأسماء المعنوية والمتوافقة مع قواعد ترميز المتحولات (مثل الترميز الهنغاري) في البرامج؟ هذا الموضوع أساسي في المحاضرات الأولى لأي منهج برمجي.
لا تستخدم أبدا رسائل-إعلام إنتهاء الصلاحية أو عدم سماحية كلمة المرور
وماذا تقترح بدلا عنها؟ أن يتوقف الحاسب عن الاستجابة، أو أن يعيد البرنامج إقلاع الحاسب عند إدخال باسوورد غلط؟، أم أن ينتج عبارة عشوائية مثل "صباح الخير" أو "كيف حال الماما" عند إدخال باسوورد غلط؟ هذا الكلام غير منطقي أبدا، واستخدام رسائل التنبيه أمر مفيد جدا للمستخدم، لا تنس أن البرامج تكتسب قيمتها أساسا من تقدير المستخدم لها، وليس من تقدير القراصنة لصعوبة كسرها.
أستخدم أدوات تشفير الملفات
فكرة حلوة، ولكن دير بالك تشفر ملفات المستخدم! الداتا ملك مستخدم برنامجك، وليست ملكك، في جميع الأحوال هو الذي يدخلها، ويحق له أن يسترجعها عندما يريد وبأي شكل يريد.
-أضف فترات إنتظار طويلة
أيضا فكرة حلوة، ولا قيمة لها بدون التشفير
أضف فترات إنتظار أخرى
ممكن، ولكن كل هذا لن يجدي نفعا بدون التشفير.
أضف شفرات checksums خاصة
هذه ضرورية دائما، لأنها حماية للبرنامج نفسه من الخربطة. يجب أن يكتشف البرنامج أية ملفات خاصة به وغير صالحة، ولا بتعامل معها لكي لا ينتج نتائج غير متوقعة.
برىء رسائلك من البرنامج
لا أوافق على هذه الفكرة، هذا النوع من الأوامر يثير القرصان فورا. لا تنس أن القرصان يشم رائحة الألعاب البرمجية على الطاير. شو دخل برنامج قاعدة بيانات بمعالجة أخطاء الهارد؟ معناها هون في شي مهم لازم نشوفه. يعني يمكن أن تلفت انتباهه فورا إلى المنطقة المهمة بدلا من أن تخبئها.
رقع برنامجك
معناها اكتب الكودات الأساسية أربع خمس مرات، إذا كنت فاضي وما عندك ميزات إضافية تضيفها للبرنامج بدلا من اجترار الكود نفسه عدة مرات.
خزن كلمات المرور في أماكن غير معتادة
لا داعي لذلك أساسا. يمكنك أن تخزنها في ذاكرة مستخدم البرنامج، أصلا كل أنظمة التشغيل في العالم تشفر كلمات السر، ويستطيع أي كان أن يقرأها، والزلمة بيكسر كلمة سر واحدة منها.
إذا أردت إستخدام رسائل توضيحية للمستخدم , لا تستخدم سلاسل محرفية مخزنة
هذا ضروري جدا إذا أردت إنتاج نسخة بلغة أخرى من البرنامج، يعني لازم دائما تتبع هذه الطريقة سواء كنت عم تحمي برنامج أو عم تبرمج بشكل عادي. هناك الكثير من المقالات عن عزل النصوص عن الكود في البرمجة.
لا تفصل إجراء التحقق من الصحة لوحدة بشكل مستقل
كتابة هذه الإجراءات بهذه الطريقة تجعل الوصول إليها سهلا جدا، أقترح بدلا من ذلك وضع كل سطر في استدعاء تابع مختلف مستقل موجود في مكان أخر، يعني العب جمباز برمجي بدل ما يكون سباق جري سريع.
إستخدم أسماء محجوزة أو شبيهه بها أو أسماء للنظام
لن يفيدك هذا كثيرا إلا إذا كان القرصان يتبع الكود الأصلي، وليس البرنامج التنفيذي.
لا يفضل إستخدام ميزات التعطيل
ممكن تساوي هيك، ولكن عليك أن تشرح لكل مستخدم لبرنامجك لماذا تعامله كقرصان. لماذا لا تعرض له رسائل توضيح، وعليك أن تطول بالك على طلبات الصيانة التي لا تنتهي.
إن جعل كلمات تسجيل الدخول متعلقة بظروف مختلفة أفضل مليون مرة من الكلمات المخزنة سلفا .
صحيح. أعزائي الديك الذي يبيض بيضة واحدة في العمر، يحاول حمايتها بشتى الوسائل. أما الدجاجة التي تبيض كل يوم بيضة على الأقل، فتقدم بيضها للبشرية كلها. وكذلك المبرمجون الحقيقيون، فهم ينشرون كودهم الأصلي على الإنترنت، ويسمحون للبشرية أن تنسخه، ولذلك لا يقلقون على حماية البرنامج. على عكس الهواة أو قراصنة الأفكار الذين لا يصدقون أن تظبط معهم شغلة في العمر. والمبرمج الذي يرغب في تحقيق ربح مادي من الكود تبعه، يمكنه أن يعامل المستخدم كموزع بدلا من أن يعامله كقرصان. حاول أن تعقد صفقة مربحة للطرفين مع المستخدم، وستجد أنه سيحرص على فائدتك لأنه سيستفيد. عزيزي عروة مقالتك ممتازة وتحوي العديد من الأفكار المهمة والتي تستحق التوقف، أنتظر مقالتك القادمة عن دلفي.
orwa

شكرا جزيلا لك أخي الأيهم ... وشكرا على إهتمامك بالموضوع وإبداء رأيك , أنا أيضا أريد أن أُؤكد للجميع أهمية الفكرة التي طرحها أخي الأيهم عن البرامج المفتوحة المصدر , فأنا من أكثر المتعلقين بهذة الفكرة , وهي بلا شك عمل رائع ولها فوائد هائلة للتعلم وللمستخدم نفسة , الذي لن يضطر لتبديل برامجة عن حدوث تعديلات على قوانين الشركة التي يملكها بل يكفي إجراء تعديلات بسيطة على شفرة البرنامج التي يملك نسخة منها . أنا نفسي قمت بفتح شفرة عدة برامج أعدتها وأحب ذلك كثيرا كذلك تراخيص الـ GPL... ولكن أحب أن أذكر الأخ الأيهم أن المقالة السابقة لم تكن عن قواعد كتابة برامج مثالية ,, ؟؟؟؟؟ بل كانت للمهتمين بحماية برامجهم من الكسر . ولن أخوض أخي فيما ذكرتة عن فتح الشفرة ولكنة لا ينطبق إلا على نصف الحالات , وأنا أوجه كلامي للنصف الآخر الذي يعاني مشكلة لا أخلاقية وهي أن ما يتعب علية لشهور وما يبدعة من صميم نفسة بتعبة ومعرفتة لايستطيع الإستفادة منة .. نعم ربما تكون الإستفادة مادية لما لا , أنا أعمل بالبرمجة من أجل الربح المادي أما بالنسبة للتسلية فأنا أفضل العزف على آلة موسيقية أكثر , وبكل بساطة يأتي هاكر بهدف التخريب والإساءة للآخرين فقط ليقوم بكسر برامجنا , بعض الهاكر يهدف إلى نشر البرامج ويخصص أهدافة من منتجات الشركات العالمية .. يعني ربما أنا أحب هذا النوع من الناس إذا أثبت أنة لا يهدف للتخريب فقط , بعض البرامج أخي لها صبغة أمنية , مثل بعض البرامج المتعلقة بسياسات شركات معينة ويمنع في هذا النوع منعا باتا تهريب أي معلومات مفيدة أو غير مفيدة لشركات مضاربة أخرى أو لجهات غير مرغوبة ,... وهنا لابد من حماية البرامج وأستطيع أن أجد لك ألف سبب يجعلنا نحمي برامجنا ربما ليس من الكسر والتوزيع فحسب بل من الإختراق غير المرغوب أيضا ... وأهنا أركز على عمومية وشمولية كلمة حماية البرامج , لإغراض بعضها ضعيف وبعضها مهم وأساسي .. إذن النقطة الأولى التي أشير إليها هي : أن بحث بعض مصممي البرامج عن طرق لحماية برامجهم هو غاية مشروعة مبررة ومهمة ولا يجوز الحكم بعدم جدواها . النقطة الثانية , أن ملاحظات حماية البرامج ( جعل البرامج أصعب للكسر ) لا تتفق بشكل كلي مع قوانين كتابة برامج قياسية , بل بالعكس , تعتمد بشكل كلي على الإبتعاد عن القياسية والإعتيادية . وبما أن الغاية مبررة حسب النقطة الأولى فإن وسيلة تحقيقها لها ضريبتها , وعلى من يريد أن يحمي برامجة لأي سبب أن يدفع بعض هذة الضرائب النقطة الثالثة , أن كل ما أوردتة سابقا هو أفكار يمكن تطبيق أي منها وليس من الضرورة أن يخنق المبرمج نفسة بها ويطبقها جميها بالعكس ,وحتى هذة الأفكار تطبق فقط في الأجزاء المهمة من الشفرة فقط , ولاداعي لتطبيقها في كل البرنامج , مثال :منع رسائل المستخدم تطبق فقط في فورم التسجيل ومع أحداث محددة ,وليس على كل البرنامج. ألقي نظرة على النت عن هذا الموضوع وسترى أن ما أوردتة أنا يعتبر طرق بسيطة للغاية لا تكلفنا سو التفكير بنفس طريقة الكراكر , ويمكن تطبيقها مع أي برنامج دون خسائر تذكر على عكس معظم الطرق الأخرى التي تكلف الكثير من المادة والجهد ولا تتفوق كثيرا على هذة الطرق , عل الأقل الإصدارة النهائية من المشروع حيث يمكن ببساطة قبل إصدار النسخة النهائية من المشروع إجراء بعض التغييرات المذكورة وترجمة المشروع ويمكن بعد ذلك إذا أردنا الرجوع للنسخة الأصلية وعدم حفظ التعديلات . ملاحظة : أعرف أن واقع البلد القائم على أساس عدم إحترام حقوق الملكية الفكرية مثل ملكية الأغاني والألحان .... وبالتأكيد البرامج , لة فوائد هائلة جدا على المواطن العادي , فأنا أشتري بشكل أسبوعي برامج جديدة دون تخصيص ميزانية خاصة بذلك .... يعني يا بلاش وعندي كل البرامج يلي بدي ياها واللي ما بدي ياها .. بس أنا ما كتير مرتاح لهاد الوضع وبتمنى أن ينتهي بسرعة , لأنة وضع غير عادل ولة آثارة السلبية على الإقتصاد وعلى المنتج السوري الذي لامجال أمامة لتسويق منتجة إلا عن طريق الحمايات المختلفة ,, التي كثيرا ما تكون غير مجدية ,,. وأخيرا أتمنى من كل اللذين يهتمون بحماية برامجهم لإي سبب من الأسباب ( لا أظن أن الأخ الأيهم سيكون سعيد عندما يخترق أحد ما موقعة على الإنترنت ويضع مكانة صفحة لعروض فاضحة وشاذة كما حصل مع بعض المواقع , وجدير بة أن لم يكن قد فكر مسبقا بإساليب حماية لبرامجة ومواقعة من قبل أن يفكر الآن, على الأقل حمايتها من الجزء الذي يريد الضرر بة وبالناس ويحاول إلحاق الأذى فقط ) أتمنى من كل هؤلاء أن يقرأو السطور السابقة بتمعن , فهي نصائح جديرة بالقراءة والإهتمام , ومع أنها بسيطة للغاية ولكنها مفيدة جدا ... المقالات القادمة عن دلفي جزء منها جاهز وسأضعها بهالكام يوم ,,,..
orwa

دعنا نتحدث قليلا أولا عن الأجزاء الداخلية من منتج بورلاند هذا ...(طبعـا دلفي ) , ربما هذة المعلومات سوف تساعد في تسريع فهم بعض الآليات المعاكسة للكسر , . VCL وهي إختصار لـ "visual component library" وهي مكتبة تستخدمها لغات بورلاند للبرمجة المرئية Visual Programming مثل Delphi و BC++ Builder . هذة البيئات يتم تنسيقها على شكل مصادر resource format , وهذة المصادر تحتوي الأشكال Forms . في دلفي فإن الأشكال بالتأكيد هي نوافذ البرنامج , وكل المعلومات حول تصميم البرنامج ستكون مخزنة فيها , عندما يتم تشغيل برنامج دلفي قياسي فإن قسم التهيئة initialisation يقوم بخلق (إنشاء) الأشكال , وتحميل المعلومات اللازمة من الموارد (المصادر أو resource) , أحيانا تؤجل هذة العملية لبعض الوقت – , وطبعا الأشكال التي لاتستخدم بشكل كبير يمكن إنشاءها وتحريرها حسب الحاجة , . الجزء المهم من هذة المعلومات هو أن عنوان الروتينات التي يستدعيها المستخدم بتأثيرة على عناصر الفورم (كالأزرارمثلا) , - يتم نسبة في زمن التشغيل RunTime بواسطة الإسم . وبالتالي إذا عرفنا الإسم يمكننا معرفة العنوان المخصص لإحداثة . وربما تكون هذة الطرق من الطرق المهمة المتبعة لكسر البرامج , ... دعنا نخوض قليلا بهــا : الخطوة الأولى ستكون جمع المعلومات عن ملفك التنفيذي بأدوات تجسس على الأشكال أو الموارد form spy tools وهذا سيبدو مشابها لضغط بالزر الأيمن على الشكل وأختيار إظهارة بشكل نصي من بيئة دلفي : ستظهر لنا معلومات مثل : object RegButton: TButton Left = 200 Top = 176 Width = 97 Height = 25 Caption = 'Register' TabOrder = 1 OnClick = RegButtonClick end ماهذا ,, حسنا إنة الزر الذي عنوانة Register حيث بإمكانك أن ترى حجمة وموقعة , وسترى أيضا إسم آخر مع العبارة OnClick ,,, هذا الإسم يخبرنا ما هو إسم الروتين المتولد عند النقر على الزر (الجزء المهم من الطريقة) ,وبالتالي يمكن معرفة عنوان حدث عند النقر لزر تسجيل الدخول Rigister .. وكما أوردنا سابقا سيتم نسب الروتين إلى معالج الحدث عند نقر المستخدم على الزر بواسطة الإسم المرفق مع OnClick وهو RegButtonClick .. وبالتالي الكلمة RegButtonClick ستكون مخزنة بشكل نصي في الملف التنفيذي وسيسهل العثور عليها بأي محرر ست عشري .! وعندما جربت ذلك على محرر ست عشري عثرت عليها بكل بساطة وكان الناتج : 000A4990 ____ ____ ____ BC57 4A00 0E52 6567 4275 ______.WJ..RegBu 000A49A0 7474 6F6E 436C 6963 6B__ ____ ____ ____ ttonClick_______ وإذا نظرنا إلى الأرقام التي قبل الإسم , سنجد البايت (0E) والذي يحدد طول ال" RegButtonClick " (14 محرف) . وقبل ذلك يوجد العنوان 004ABC57 . الخ .. لن نخوض كثيرا في ذلك وسوف ننتقل الآن إلى الجزء المهم , وهو كيف نمنع هذا النوع من الكسر . أي النوع الذي يتم الإعتماد فية على معرفة مكان الإجراء المرتبط بعنصر معين عن طريق الإسم .. وبكل بساطة أقول لك ( ذا كنت مهتما بمنع هذا النوع من الكسر طبعا) : لا تستخدم الطريقة الأوتوماتيكية في تعين معالج الحدث لزر معين وذلك بالنقر المزدوج على الزر , أو من مربع النص الخاص بة في ضابط الكائنات , . ولا تستخدم أسماء قياسية مثل " RegButtonClick , بل قم بكتابة شفرة الزر في مكان ما من البرنامج , (على شكل إجراء مثلا )أو ربما في وحدة أخرى غير البرنامج الرئيسي . ثم قم بنسبة يدويا إلى الزر بإستخدام كود مثل : RegButton.OnClick := RButtonClick; على إفتراض سميتها RbuttonClick , (يفضل إستخدام أسماء لاتدل على عملها) طبعا يجب وضع هذا الكود بعد إنشاء الفورم FormCreate ( ولكن ليس بعد إستدعائة) . بهذة الطريقة لن يسرد إسم الروتين عند إستخدام برامج تجسس الأشكال , وسيصبح العثور على إسم الروتين الخاص أصعب بكثير من الحالة السابقة ... وبالتأكيد طالما لم يستطع الهاكر العثور على مكان الشفرة التي يبحث عنها لن يستطيع فعل شي ذا قيمة ... مثال على نسب الحدث في زمن التشغيل ((النسب الديناميكي)): ننشيء مشروع دلفي جديد , ونضع زر على الفورم . ما نريدة الآن هو تعيين حدث للزر عند النقر علية ولكننا لا نريد إستخدام الطريقة العادية بتحديد OnClick من ضابط الكائنات , أو بالنقر المزدوج على الزر . لذلك سنقوم بنسبة في زمن التشغيل إلى الحدث المناسب . لنقم أولا بإنشاء إجراء بسيط يظهر عبارة Hello world , ((ولكي يقبل النسب إلى TnotifyEvent يجب أن يحوي المتحول الوسيطي Sender )). إذن : procedure TForm1.hi(Sender: TObject) ; begin showmessage('Hello World … '); end; ثم عند إنشاء الفورم نكتب procedure TForm1.FormCreate(Sender: TObject); begin Button1.OnClick:=hi; end; نلاحظ بعد تشغيل البرنامج والضغط على الزر تظهر لنا عبارة Hello World وهكذا نكون حددنا الحدث المطلوب عند النقر على الزر في زمن التشغيل Run Time ,. تستخدم هذة الطريقة في بعض الحالات التي تختلف فيها إستجابة العنصر (زر مثلا) حسب شروط معينة يحددها المستخدم أثناء التشغيل , وبالتالي يمكن تغيير إستجابة عنصر معين حسب الشروط أثناء تشغيل البرنامج . كما أنها مفيدة في حالات أخرى مثل حالتنا هذة . الشفرة الكاملة : unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; procedure FormCreate(Sender: TObject); private procedure hi(Sender: TObject) ; public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure tform1.hi(Sender: TObject) ; begin showmessage('how are you'); end; procedure TForm1.FormCreate(Sender: TObject); begin Button1.OnClick:=hi; end; end. نكمل قريبا ...
Raed Filfel

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

عزيزي رائد شكرا لانضمامك ومشاركتك، وأهلا بك واحدا منا صحيح أن الكثير من المنتديات تحوي مواضيع هكرجية، ولكن أعتقد أن مقالة صديقنا عروة أصيلة، وتحوي خبرة خاصة به، وليست نقلا عن الآخرين كما يفعل الكثير من المتهكرنين العرب على الإنترنت. وهي بدون شك مقالة مفيدة لا يقرؤها مبرمج دون أن يجد فيها الكثير من الأفكار المميزة. لاحظ عناها بالأفكار، وطريقة عرضها المركزة والموجهة أساسا لمبرمجين محترفين، وليس للهواة. لتنسيق الشفرة البرمجية استخدم الأمر [ code ] Your code here [ /code ] ولكن بدون الفراغات ضمن الأمر
orwa

أخي العزيز رايد فلفل .. أهلا ومرحبا بك في منتداك . أوافقك الرأي تماما أنة على المنتديات العربية التركيز على مواضيع اللب البرمجية أكثر من المواضيع الهكرجيـة , ربما تتساءل إذن لماذا أنشر موضوع مثل هذا إن كنت فعلا أعني ما أدعي .... في الحقيقة إن كثرة التحدث عن كسر البرامج في المنتديات ولّدت لدي إستياء كبير من هذا الموضوع , فقررت كتابة موضوع معاكس لها وهو جعل البرامج أصعب للكسر ,. وما دفعني إلى ذلك أنني لم أرى في أي منتدى عربي سابق لدلفي أي مقالة عن حماية البرامج . ولذلك فإن دفاعي عن الموضوع سيكون كالتالي : إن التحدث عن حماية البرامج الخاصة بنا أشرف عشر مرات من التحدث عن كسر حماية برامج الغير , وما قدمتة في هذا المنتدى بخصوص ذلك أفضل بكثير مما قدمتة منتديات عربية أخرى (معظمها) .. كما أن منتدانا هذا هو أول من طرح فكرة حماية برامج دلفي على حد علمي ... وهناك جانب آخر بسيط ومهم : بما أن المنتدى معني بشؤون دلفي المختلفة , فلا أرى ضير من ذكر مثل هذة المواضيع بإعتبارها مادة علمية متخصصة بالدلفي قد تفيد في رفع تفكير المبتدء كما أنة توجد في ثناياها معلومات قيمة عن أمور أخرى (مثال النسب الديناميكي في الفقرة السابقة ) بغض النظر عن رقي الفكرة نفسها , أي إعتبارها مادة علمية بغض النظر عن الفكرة العمومية لها .. ذلك كان ما أحببت أن أدافع بة عن فكرتي في طرح موضوع كهذا ... وأتمنى أن تعذرني بعد ذلك أما عن أننا يبدو علينا الإرهاق من كثر القرصنة ...وكأن الشغل الشاغل هو فك البرامج ...... ياسيدي اللة يسامحك , مع أن عنوان الموضوع هو جعل البرامج أصعب للكسر وليس فك حمايتها كما تقول . على كل حال ملاحظتك بمكانها ... أما عن أن الهكر يفضلون البرامج ذات الإقبال العالي , كلامك صحيح مئة بالمئــة . طريقة بغاية الروعة هي الطريقة التي ذكرتها لحماية البرامج من الكسر , وأنا شخصياً أميل إلى هذا النوع من الطرق .. أما ياسيدي قولك عن الأخلاق الرفيعة والإشارة إلى المصدر ... أللة يسامحك ومقبولة منك ,, على كل حال المصدر هو الإنترنت ومخزون متواضع من المعلومات جمعتة مع مرور الزمن . طريقة تنسيق الكود أجابك عليها أخي الأيهم وأخير .... أشكرك جزيل الشكر أخي رايد فلفل على مساهمتك وتفاعلك , وأنى أنتظر بفارغ الصبر أن أرى مشاركات فاعلة من عضو نشيط وذكي مثلك . وأتمنى منك أن تعذرني وتعذر المنتدى على طرح هكذا مواضيع , ولكني أؤوكد لك أنني لم أكن أريد الجانب السيء منها ... وجل ما أتمناة الآن هو أن تجد الفلفل الذي تريدة في منتدانا هذا (عم أمزح لا تاخد على بالك ....) أخوك .. عروة [ تم تحريره بواسطة orwa on 2/3/2004 ]

إضافة تعليق جديد

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

Restricted HTML

  • وسوم إتش.تي.إم.إل المسموح بها: <a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • تفصل السطور و الفقرات تلقائيا.
  • Web page addresses and email addresses turn into links automatically.

دعوة للمشاركة

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