Stolen bytes أقوى طريقة لحماية البرامج التجارية
#1
[COLOR="black"]السلام عليكم ورحمة الله

الطريقة ببساطة:
- خذ أهم وظيفة من برنامجك وضعها في DLL منفصلة
- خذ بعض الـ Bytes الثابتة من مكتبة DLL
- اجعل برنامجك يقوم بـ Try "استخدام الوظيفة" و Except "يعرض رسالة النسخة التجريبية"
- رقم التسجيل هو نفسه الـ Bytes المسروقة، طبعا مع بعض بهارات التشفير والتمويه... Smile
المثال المرفق يوضح ببساطة مبدأ الطريقة.

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

أيضا ينبغي استخدامها بحكمة فالحماية ليست في ذات الطريقة

في النهاية قد يكون من الحكمة (أحيانا) أن تترك بعض الهفوات التي تمكن من قرصنة برنامجك
فقد يوفر ذلك بعض عناء التسويق عليك، ويسـاعدك على قياس سمعة المشروع.[/COLOR]


الملفات المرفقة
.rar   SimpleRegistration.rar (الحجم : 9.72 ك ب / التحميلات : 393)
[-] كل من 1 user says قال شكرا ل kachwahed على المشاركة المفيدة
  • mohamed49
الرد
#2
"لتبقى البرمجة وليسقط الكراكرز :..."
1- هناك طريقة لإسترجاع الـ Stolen Byte (IdaFicator PlugIn)i
2- فقط كملاحظة , لو لم تعطي القيمة الإبتدائية للـ LibName ستعرض البرنامج
كود :
const
  LibName = '';//RegistrationDLL.dll
لثغرة Dll Hijacking التي تكلم عليها الأخ Str ....
المسارات المستغلة, كل ما هو مسجل في
:
كود :
cmd > set > %path%
بالتوفيق,,


الملفات المرفقة
.rar   Test.rar (الحجم : 7.45 ك ب / التحميلات : 143)
I'M Fly Like A G6

الرد
#3
[COLOR="#0000ff"]
إقتباس :...لا يمكن القيام بشيء حيال ذلك
هناك مقولة اجنبية او مثل لااتذكره ما معناه: ما قام به انسان يمكن لانسان اخر القام به (او بعكسه)

لكن ما الذي يجعله يتغير؟
استخدم Polymorphism
تغير الكود (OpCode) بكود اخر مختلف ويؤدي نفس الغرض
يمكنك مراجعة بعض المقالات والملفات المصدرية الخاصة بالفيروسات مثل الموجودة بموقع VX Heavens

احسن من طريقة طريقة البايتات المسروقة طريقة الالة الافتراضية virtual machines


[/COLOR]
الرد
#4
اخي كاش واحد اختلف معك في هذا الموضوع فطريقة ال Stolen bytes مستخدمة من قبل العديد من برامج الحماية من فترة طويلة مثل Themida و ASProtect وهي تعتبر اسهل مرحلة في عملية فك الضغط Unpacking Big Grin
الرد
#5
[COLOR="black"]شكرا لكم على المشاركة Smile
@TF6M
@Ahmed18
كما وضح أخونا Zool@nder في الـ Plugin تلك البياتات المسروقة هي من OEP للبرنامج
أي أنها هي نفسها الموجودة في التطبيقات المترمجة بنفس الـ Compiler

هنا لا نتحدث عن سرقة بايتات بشكل آلي (كما يفعل ASProtect وغيره)
بل البايتات تؤخذ من دوالك الخاصة الأكثر أهمية في برنامجك (الطباعة، الحذف، العمليات الحسابية...)
سأرفق مثال للحماية بطريقة غير حكيمة...

إقتباس :هناك مقولة اجنبية او مثل لااتذكره ما معناه: ما قام به انسان يمكن لانسان اخر القام به (او بعكسه)
بالفعل، سمعتها من أحدهم يدافع عن أخطاء Micro$oft Smile

إقتباس :استخدم Polymorphism
تغير الكود (OpCode) بكود اخر مختلف ويؤدي نفس الغرض
كنت أقصد ما يتغير في كل نسخة (اسم المستخدم وبعض البيانات...)
لكن هذه تبدو شهية، سأبحث...

إقتباس :طريقة الالة الافتراضية virtual machines
تبدو مكلفة (الجهد)، وأعتقد أنها تهاجم بـ Emulator! سأبحث...[/COLOR]
الرد
#6
مثال للحماية من حذف السجلات بسرقة 12 bytes المسؤولة عن ذلك
تم استخدام هذه الطريقة في برنامج تجاري للمبيعات
طبعا، بفرض أن قاعدة البيانات ليست BDE وأنك لا تملك صلاحية الحذف مباشرة
التجاوز سهل جدا...
الحل بعد أسبوع من اليوم.


الملفات المرفقة
.rar   WorstProtection.rar (الحجم : 395.04 ك ب / التحميلات : 293)
الرد
#7
و عليكم السلام و رحمة الله

الكل يعلم من دون شك ان:
- المنتجات DEMO يتم عدم وضع اصلا اوامر معينة مثل الطباعة و الحذف و التسجيل...الخ
- المنتجات TRIAL محدودة المدة او مرات الاستعمال و عدم تفعيل خصائص معينة و لكن هذه الخضائص اوامرها موجودة في المنتج.

الآن طريقة Stolen bytes:
حسب ما فهمت من شرح كاش واحد، يتم برمجة التطبيق باضافة دوال الخضائص كاملة بشكل عادي، ثم يتم حذف بايتات معينة منها و نشرها كنسخ تجريبية محدودة الخضائص.

اخ كاش واحد هل يمكن شرح آلية التحقق من حيث:
هل خوارزمية التسجيل تحتوي على ثوابت Hard coded للبيتات المسروقة و في حالة نجاح عملية التسجيل يتم عمل Patch للتطبيق لاضافة الباتات الناقصة من هذه الثوابت ؟

او ان معلومات التسجيل بعد معالجتها تصبح نفسها البايتات المسروقة ؟ على طريقة تحديات Mouradpr

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

كيف يتم التحكم في عدم نشر النسخ الكاملة على النت بعد شراءاحد الكراكرز نسخة مرخصة من الشركة المنتجة ؟

بالتوفيق ان شاء الله
الرد
#8
أهلا STRELiTZIA Smile
إقتباس :الكل يعلم من دون شك ان:
- المنتجات DEMO يتم عدم وضع اصلا اوامر معينة مثل الطباعة و الحذف و التسجيل...الخ
- المنتجات TRIAL محدودة المدة او مرات الاستعمال و عدم تفعيل خصائص معينة و لكن هذه الخضائص اوامرها موجودة في المنتج.
بالفعل، يمكن أن نسمي هذه الحماية Demo لكن الفرق سهولة التسجيل بإرسال رقم تسلسلي فقط عوض الملفات...

إقتباس :هل خوارزمية التسجيل تحتوي على ثوابت Hard coded للبيتات المسروقة و في حالة نجاح عملية التسجيل يتم عمل Patch للتطبيق لاضافة الباتات الناقصة من هذه الثوابت ؟
لم أفهم جيدا الفرق، لكن أعتقد أنني أقصد هذه Smile

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

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


الملفات المرفقة
.rar   GetHWID.rar (الحجم : 6.67 ك ب / التحميلات : 127)
الرد
#9
السلام عليكم و رحمة الله

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

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

و ان كان جل عملك يدور حول محاولة منع الوصول الى شرط او شروط التحقق فان مبدأ Stolen bytes في الحماية يصبح غير نافع لانك ان استطعت منع الوصول الى الأجزاء الحساسة من خوارزمية التسجيل، اي طريقة اخرى في الحماية مثل Trial تصبح فعالة.

لان السر في حماية البرامج هو منع او تعطيل الوصول الى الأجزاء الحساسة -الضعيفة- في آلية التسجيل بكاملها...


إقتباس :لو استطعنا أن نمزج الفكرتين استخدام Polymorphism Code (كما قال أشار الأستاذ عبد العزيز) مع فحص HardwareID مثلا، أعتقد أننا
- Polymorphic Code سوف يسبب لك المشاكل لانك تعتمد على عناوين ثابتة Offsets للتعديل على بايتات الخصائص.
- البصمة HardwareID طريقة جيدة لمنع عدم تكرار استعمال مفاتيح التسجيل على اجهزة اخرى.

هناك عمل تقني على احد برامج الحماية EXECryptor لــ Zoolander يوضح فيه الية الحماية من وجهة نظر من يحاول كشفها، ربما احد الأخوة عنده نسخة من العمل يرفعها لاثراء الموضوع...

بالتوفيق ان شاء الله
الرد
#10
إقتباس :و طبعا اذا كان الرقم غير صحيح لا يتم الباتش...
كلا، سيتم الباتش بأي رقم (يتم فحصه طبعا) والمستخدم يتحمل النتيجة السريال الخاطئ!
إقتباس :البايتات المسروقة تكون مخزنة في البرنامج نفسه
طبعا لا، فهكذا لن تكون مسروقة Smile
رقم التسجيل هو نفسه البايتات لكن مشفرة (أو مقارنة Hash)، مثال:
- البايتات المسروقة هي: E8EB6BFE
- يرسل المستخدم اسمه إلى المنتج + مبلغ $$$
- رقم التسجيل هو ناتج تشفير هذه البايتات+اسم المستخدم: 28W23-27N14-21Q17
- يدخل المستخدم اسمه ورقم تسجيله
-> يتم تشفير الرقم واستخراج اسم المستخدم والبايتات
-> مقارنة اسم المستخدم المدخل مع الاسم المستخرج من رقم التسجيل
-> إذا تطابقا يتم حقن البياتات وتسجيل البرنامج...
إقتباس :- Polymorphic Code سوف يسبب لك المشاكل لانك تعتمد على عناوين ثابتة Offsets للتعديل على بايتات الخصائص.
أخشى أن يثير بعض AV أيضا...
إذا البحث والاستبدال (Search & Replace)
ما رأيك بتنفيها من عنوانين عشوائية!، مثال:
كود :
...
procedure RunHexCode(I1, I2: Integer;P1, P2: Pointer);
begin
  asm
    push I1
    push I2
    push P1
    Push P2
    call Code
  end;
end;

...
  Randomize;
  I := RandomRange(50, 400);
  for N := I to Length(S)+I do begin
    Code[N] := S[N-I+1];
  end;
  RunHexCode(StrToInt(Edit1.Text), StrToInt(Edit2.Text), @MsgYes, @MsgNo);
end;

إقتباس :- البصمة HardwareID طريقة جيدة لمنع عدم تكرار استعمال مفاتيح التسجيل على اجهزة اخرى.
فيها وعليها... ماذا لو قام المستخدم بتغيير في النظام (إعادة تثبيت Windows مثلا) وأو تغيير قطعة من العتاد
أيضا المقارنات وحدها غير كافية، فهي في النهاية تصبح قفزات JNZ أو JE أو غيرها... وجميعها كما تعلمون Smile...
الرد


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


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