إعلانات نصية

تحميل لعبة gta v

أعلن هنا

أعلن هنا

أعلن هنا

أعلن هنا

أعلن هنا

أعلن هنا

أعلن هنا

أعلن هنا

أعلن هنا

أعلن هنا

أعلن هنا

أعلن هنا

أعلن هنا

أعلن هنا

أعلن هنا

أعلن هنا

أعلن هنا

أعلن هنا

أعلن هنا

النتائج 1 إلى 2 من 2

الموضوع: كيف تجعل برامجك أصعب للكسر

  1. افتراضي كيف تجعل برامجك أصعب للكسر

    مرحبـــــــــا مجددا ...

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

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


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



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



    -لا تستخدم أسماء ذات معنى للتوابع والإجرائيات إذا كنت مهتم بالحماية .
    مثال :
    • 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}


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



    ملاحظات أكثر من أجل دلفي

    دعنا نتحدث قليلا أولا عن الأجزاء الداخلية من منتج بورلاند هذا ...(طبعـا دلفي ) , ربما هذة المعلومات سوف تساعد في تسريع فهم بعض الآليات المعاكسة للكسر , .

    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.



    عروة علي عيسى
    www.orwah.net





  2. #2

    افتراضي

    مشكور أخي على الموضوع الجميل هذا...

    What Doesn't kill you
    Only make you stronger

    chmod /bin/laden

المواضيع المتشابهه

  1. تحميل كتاب تحكم في برامجك من علي بعد
    بواسطة Books Geek في المنتدى كتب دوت نت فيجوالبيسك سي شارب VB6 e books
    مشاركات: 0
    آخر مشاركة: 25-11-2013, 12:30 PM
  2. ::: أنصح باستخدام نظام Wise لتحزيم برامجك :::
    بواسطة الخوارزمي في المنتدى مدرسة فجوال بيسك دوت نت Visual Basic.NET
    مشاركات: 0
    آخر مشاركة: 13-09-2009, 12:28 AM

الكلمات الدلالية لهذا الموضوع

ضوابط المشاركة

  • لا تستطيع إضافة مواضيع جديدة
  • لا تستطيع الرد على المواضيع
  • لا تستطيع إرفاق ملفات
  • لا تستطيع تعديل مشاركاتك
  •