حماية البرامج من الهندسة العكسية
#1
قبل كل شيء هذه فقط تنبيهات و نصائح
الهندسة العكسية و هي عملية جلب الكود و قرصنة البرامج
نعم هذا الموضوع هام جدا لماذا ؟ لأنك ندما تبيع برنامجك لأاحد ما أو يجربه أحد ما و كان له و لو حتا خبرة بسيطة سيتطيع كشف الكثير من الأسرار لذا يجب قرائة هذا الموضوع بتأني :

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

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

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

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

السلام عليكم

على أمل ذلك .... نحن بالإنتظار لكل ما من شأنه أن ينفعنــا

عموما نشكر لك سعيك و بارك الله فيك
بالتوفيق
الرد
#3
السلام عليكم ورحمة الله وبركاتة

نقاط جيدة تبعد بعض الكاركر الصغار عن برنامجك Smile

على كلاً أحببت أن اضيف بعض الطرق التي تعقد الأمر قليلاً على الكراكر , بما اني دخلت هذا المجال لفترة تسمح لي بتعلم الأساسيات

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

بالنسبة للنقطة الثانية :
تستطيع ان تخدع الكراكر المبتدئ بها وهي انك تضع اسماء دوال (وهمية) اي لا تفيد وإنما تحوي اكواد ليست ذات فائدة , وكذلك تستطيع ان تجعل
بتلك الدوال بعض الطرق التي توهم الكراكر انها خاصة بالرقم التسلسلي للبرنامج , فالكراكر المبتدئين دائماً يستعملون الطرق التقليدية ولا يتحلون بالصبر Smile

أما عن النطقة الثالثة :
فيوجد طريقة جميلة لعمل ذلك وهي من خلال رسم النص بدوال الرسم بدلاً من وضع صورة ( ففكرة الصور اصبحت تقليدية ) , فمثلاً تقوم بوضع دالة تستقبل مصفوفة تحمل ارقام ( ارقام فقط ) , وهذه المصفوفة تقوم بتحويل تلك الارقام إلى حروف وتقوم بطبعتها , ويوجد عده طرق لعمل تلك الخدعه , وهذا مثال بسيط
عليها :
PHP كود :
unit Unit1;

{
$mode objfpc}{$H+}

interface

uses
  Classes
, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls;

type

  
{ TForm1 }

  
TForm1 = class(TForm)
    
Button1 : TButton;
    
procedure Button1Click(Sender : TObject);
  private
    { private 
declarations }
    
procedure DrawTheResult(ArrayOfByte : Array of Byte; TextPosition : TPoint);
  public
    { public 
declarations }
  
end;

const
  
CharectorsArrayC : array[0..26] of char = ('A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I',
  
'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'X', 'W', 'Y', 'Z', ' ');
  
CharectorsArrayS : array[0..26] of char = ('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i',
  
'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'x', 'w', 'y', 'z', ' ');


var
  
Form1 : TForm1;

implementation

{$R *.lfm}

{ 
TForm1 }

procedure TForm1.Button1Click(Sender : TObject);
const
  
GoodBoy : Array[0..8] of Byte = (19, 0, 13, 10, 26, 24, 14, 20, 26); // RightMessgae
  
BadBoy : Array[0..5] of Byte = (18, 14, 17, 17, 24, 26);  // WrongMessage
begin
  DrawTheResult
(GoodBoy, Point(10, 10));
  
DrawTheResult(BadBoy, Point(10, 30));
end;

procedure TForm1.DrawTheResult(ArrayOfByte : array of Byte;
  
TextPosition : TPoint);
var
  
MessageText : string;
  
i : Integer;
begin
  MessageText 
:= '';
  for 
i := Low(ArrayOfByte) to High(ArrayOfByte)-1 do
    if 
i = Low(ArrayOfByte) then
      MessageText 
:= MessageText + CharectorsArrayC[ArrayOfByte[i]]
    else
      
MessageText := MessageText + CharectorsArrayS[ArrayOfByte[i]];
  
Self.Canvas.TextOut(TextPosition.X, TextPosition.Y, MessageText);
end;

end. 

وبالنهاية إذا اردت ان لا يتم كسر برنامجك او قرصنته من قبل الكراكر المبتدئين قم بإستعمال الحمايات الجاهزة والمشهورة منها ويجب ان تكون بآخر إصداراتها

ملاحظة : المثال المرفق عمل من خلال لازارس


الملفات المرفقة
.7z   Trick to pass caracker.7z (الحجم : 59.13 ك ب / التحميلات : 133)
[-] كل من 1 user says قال شكرا ل مهند الرسيني على المشاركة المفيدة
  • mohamed49
الرد
#4
شكرا على التشجيع و على الإضافات الرائعة
الرد
#5
[indent]
السلام عليكم.
أستاذي الحبيب إلى الأمام.
وفقك الله لكل خير .
تقبل الله عملك.
[/indent]
اللهم اجعلني من أهل القرآن ، الذين هم أهلك و خاصتك.
تذكر بأن الوقت الذي تلهو فيه ، غيرك يبني مجده فيه.
الرد
#6

إقتباس :الهندسة العكسية و هي عملية جلب الكود و قرصنة البرامج
هذا تعريف خطأ / غير صحيح/دقيق:
الهندسة العكسية هي عملية اكتشاف المبدأ التكنولوجي لاداة او نظام من خلال تحليل هيكله او وظيفته او طريقة عمله، غالبا ما يشمل أخذ شيء (جهاز ميكانيكي, آلية جهاز الكتروني او عنصربرنامج حاسوبي) وتفكيكه الى قطع وتحليل طريقة عمله بالتفصيل بغية انشاء جهاز جديد او برنامج جديد يقوم بنفس العمل من دون نسخ الاصل.
صفحة الوكيبيدبا الانجليزية بها تعريف ادق من الصفحة العربية.
كود :
http://en.wikipedia.org/wiki/Reverse_engineering
باختصار: لديك مهندس قام بشيئ ما، انطلاقا من ذلك الشيئ تعرف كيف تم عمل ذلك الشيئ لهدف ما غالبا ما يكون تقليده/اصلاحة/تطويره/...
في مجالنا هذا هو عكس عمل مهندس البرمجيات او مهندس انظمة الحاسوب .
هنا ينبغي التفريق بين المهندس العكسي ومن يسرق البرمجيات/من يوزها/ينسخها/يعبث يها وغير مجال البرمجيات مثل المواقع والهواتف وما له علاقة.
في اللغة الانجليزية لكل فئة اسم معين Hacker/Reverser/Cracker/Phreacker/...Warez

عودة للموضوع العنوان الهندسة العكسية والحماية وهنا المفهوم الحماية من النسخ غير المشروع للبرمجيات Copy protection لكن محتوى الموضوع كلمة السر! هذا متلق بالاستخدام وليس الحماية كانك تصك كلمة سر لبرنامجك كي لايستخدمه احد غيرك بالعمل او البيت لكن هذا لايمنعه من نسخه كاملا!

إقتباس :التي أراها في المنتديات و المجموعات العربية ضعيفة و مستحيل أن نعمل بها و هي استخدام جملة الشرط if
ملاحظتين:
أولا هذا يعني انك لم تبحث جيدا بالمنتدبات العربية فهناك طرق تم ذكرها منذ سنين!
ثانيا بما ان الموضوع كلمة سر فانك ستقوم بمقارنها سواء بIF او بطريقة غيرها قد تبدو لك نها ليست IF لكنها في النهاية مقارنة.

مسالة الحماية تختصر في جملة: "البرنامج قابل للتنفيذ فهو قابل للكسر".
بدلا من اضاعة الوقت بأمور الحماية استغل وقتك بتطوير مهاراتك/برنامجك واجعله أحسن.
[-] كل من 1 user says قال شكرا ل محمد عبد العزيز على المشاركة المفيدة
  • wadoud
الرد
#7
b.m.abdelaziz كتب :
هذا تعريف خطأ / غير صحيح/دقيق:

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

إقتباس : لذا أنا أقوم بعمل شرح مبسط أو مدخل تعريفي فقط
بالتوفيق و لا بأس واصل

(مادام ها هنا من يصحح و يوجه و يزيد في المعلومات)
الرد
#9
إقتباس :ملاحظتين:
أولا هذا يعني انك لم تبحث جيدا بالمنتدبات العربية فهناك طرق تم ذكرها منذ سنين!
ثانيا بما ان الموضوع كلمة سر فانك ستقوم بمقارنها سواء بIF او بطريقة غيرها قد تبدو لك نها ليست IF لكنها في النهاية مقارنة.
+1 , وكذلك هناك منتديات عربية متخصصه في هذا المجال الواسع

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

تحياتي .
الرد
#10
[COLOR="Red"]
أخي عبد العزيز شكرا على ما تقدمه و انا عندما قلت استخدام جملة الشرط if لم اعني ما قصدته تمام فجميع الطرق تعتمد على مبدأ المقارنة لكن أنا قصدت الجمل الضعيفة و التي رأيتها في الكثير من المنتيادات و لا أقصد الكل لكن تعد على رؤوس الأصابع على حسب ما رأيت

شكرا على كل الشرح و تقبل *****Rolleyes
[/COLOR]
الرد


التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم