الدرس السادس "06":
طريقة الكسر الحي –المتحرك-؛ "إصطياد المفتاح؛ استنشاق المفتاح"
Serial (Key) Fishing ;Serial Snifing
الـــــــسلام عليـــــــكم
مـــــقدمة:
رأينا من خلال الدروس السابقة كيف نكسر البرامج بطريقة النشر الميت(الساكن)، وذلك بتغيير القفزات من نوع الــJmp .
الطريقة الثانية التي سوف ندرسها هي النشر الحي ، وغالبا ما تستعمل للبحث عن المفتاح السري Password عندما يكون مخزن من طرف البرنامج في مكان ما. وهذه الطريقة وسابقتها متكاملتان تماما.
تعتمد طريقة إصطياد المفتاح على دراسة البرنامج الضحية من خلال تشغيله مرحليا وبالتدريج ، لمعرفة منطق و طريقة عمله، حيث نحدد المؤشرات والنقاط المهمة المراد تسليط الضوء عليها ، وذلك من خلال مراحل العمل للضحية، إلى غاية وصولنا إلى المفتاح السري، أو طريقة نزيل بها الحماية.
طرق الحماية في البرامج:
عموما تختلف طرق الحماية في البرامج، وقد تطورت هذه الطرق تبعا لظهور القراصنة الكاسرين، وذلك لتجنب كسرها من طرف هؤلاء الكاسرين الذين يصطادون البرامج ويتربصون بها. من أنواع الحماية للبرامج نجد مثلا:
1- كلمة السر (المفتاح) أو معلومات تسجيل موجودة بداخل البرنامج . يقوم الضحية بمقارنتها مع معلومات تسجيله الجديدة.
2- كلمة السر (المفتاح) أو معلومات تسجيل تعطى عن طريق التسجيل من خلال الأنترنات بطريق اتصال البرنامج بدار إنتاجه وطلب الترخيص.
وكل أنواع الحماية قابلة للكسر، ولكن بعضها يكون التعامل معه أسهل من البعض الآخر.
تنبيه : الرجاء أن تحتفظوا بالنسخ الأصلية للبرامج الضحية التي نستعملها، لأننا ربما احتجناها لكسرها بطرق أخرى.
الأدواة المستعملة: المفكك 9 Win32Dasm ، و المخرج المبدِل HexDecCharEditor .
ملاحظة: الــ 9 Win32Dasm به عدة هفوات في التحريك debugging والتصريف (والبافي فلا بأس به) .
البرنامج الضحية : CkrakMe2 ، حجمه: 20Ko .
و صف البرنامج: هذا البرنامج الصغير للتمرن فقط. يحتوي على الرقم التسلسلي بداخله.
للتحـــمـيـل من هنا:
http://d.turboupload.com/d/93827/CrackMe2.rar.html
أو من هنا:
http://www.uploadtemple.com/view.php/1128834225.rar
http://www.up4arab.net/uploads/8102077439.rar
http://s53.yousendit.com/d.aspx?id=...ZO2BZ8RT1MMUUQZ
درجة الصعوبة: ســـــهل جد!.
الخطوات:
نتبع نفس خطوات الدرس الثالت : افتح البرنامج الضحية CkrakMe2 لتتعرف عليه. نافذة الضحية تظهر هكذا (الصورة):
أدخل رقم تسجيل ما، أو أي رقم تريد ، لترى رد فعل الضحية و رسائله التي يجيبنا بها. وهذا جوابه إذا كان رقم التسجيل غير صحيح (أنظر الصورة):
فهو يقولIncorrect try again ، إذا المفتاح غير صحيح. قم بتسجيل هذه العبارة أو خزنها في ذاكرتك . إياك أن تريد إعادة التجربة مرات عديدة لتقع بالصدفة على الرقم السري
. فهذا لا يؤمن به العقلاء (لا يؤمن به إلا القائلين بالصدفة ؛ من أصحاب الجاهل "دارويين")، وإن شئت ذلك فربما تفني عمرك كله من دون أن تجده... إن استطعت التسجيل فأنت أكثر من محظوظ ، بل إنك مستجاب الدعوات... .
![]()
المطلوب هو : - كسر الضحية ، بحيث تحصل على الإجابة التالية(انظر الصورة) :
- البحث عن المفتاح الأصل و الصحيح الذي يسمح بكسر الحماية و ظهور نافذة النجاح أعلاه.
تنبيه :
قبل كل شيئ قم بعمل نسخة إحتياطية للبرنامج الضحية، واحفظها في مكان آمن. .
فــهيا بنا إلى القرصنة والكــــسر،....بعد هذا لنأخذه إلى "غرفة الإستنطاق" المفكك 9 Win32Dasm ، و نبدئ في إستنطاقه وبحثه. إتبعوا نفس خطوات الدروس السابقة (3 و 5)، ولا بأس بالتذكير بها مرة أخرى:
إفتح البرنامج الضحية داخل الـمفكك 9 Win32Dasm بالضغط على الزر "OpenFile to Desassemble "،إحفظ المشروع بالضغط على الزر " Save Desassembly Text File and Creat Project "، وهذا حتى يتسنى لك اعادة فتح الملف مرة أخرى بسرعة. . ثم الزر
،ثم
،أنظر إلى نافذة " List of String Data items " و سترى قائمة النصوص لرسائل الضحية كما يلي:
نختار نص الرسالة التي ظهرت لنا عندما طلب منا المفتاح"Enter Registration Number"،أو رسالة أخرى تتناسب وحالة إدخال المفتاح. . إصعد قليلا ، وستقع هنا:
![]()
من هنا انزل نحو الأسفل قليلا، سوف تقع هنا:
مفاجئة، أنظر ماذا وجدنا...إنهما الدالتان lstrlenA و lstrcmpA ، التي رأيناهما في الدرس السابق. وقلنا عنهما ما يلي: (...وظيفتيهما هما فحص طول سلسلة حرفية و القيام بمقارنات .... كلتا الدالتين Lstr***A متبوعتان بتعليمتي مقارنة Test لقيمتي المسجل EAX ، وتعليمات قفز... ) . رائع جدا.
لاحظ أن نص الرسالة "Enter Registration Number" يقع بين هاتين التعليمتين.
إذا ما نفهمه هو: أن البرنامج بعد ما يطلب منك التسجيل وتدخل مفتاح تسجيلك فإنه يقوم بإستدعاء Call ، ويقارن المفتاح الذي أدخلته مع قيمة المفتاح المسجل لديه.
بعد المقارنة نجد تعليمة الــــقفز الشرطية بعدم المساواة jne . وهذا مفاده ؛ إذا كانت مقارنة المفتاحين سلبية (أي أن المفتاح المدخل لا يطابق المفتاح المخزن ) فإن البرنامج يقفز إلى رقم التعليمة 004015AD . لننفذ القفزة ونرى ماذا بعد وهذا بالضغط على الزر رقم 9 " Jump to " ، ستقع هنا (كما بالصورة):
فـــــ ( 004015AD (c هي تابعة لقفز مشروط وهي تحمل مرجع Conditionel ، بعدها يأتي نص الرسالة:"Incorrect try again!!" ، وقبلها نجد نص الرسالة التي تقول أن المفتاح صحيح، أي أن القفزة تكون فوقها.
إذا ممكن أن تقول لي: إنتهى الأمر، لأننا نكسر البرنامج بوضع نوبة 9090 =nopnop ( أو بــ 7416 =JE ) بدل القفزة 7516=JNE . و هذا صحيح . إذا نقوم بالتبديل كما تعلمنا سابقا:
بواسطة المخرج HexDecCharEditor ، ابحث عن 85C0 7516 6A40 ، ثم عوض 7516 بـ (في حالة النوبة) 9090. احفظ الضحية بإسم مغاير مثل Crackme2_A.exe . شغل الضحية المكسور لترى إن كان كسر... نــــعم إنه كذلك..
--ابتداء من الآن سوف نتعلم طريقة الـــ OFFSET ، للبحث عن موقع التعليمة، بدل الطريقة السابقة التي قد تكون مملة:
ما هو الــ Offset؟؟. هو العنوان (في القاعدة السادس العشرية ) للبيت "Byte" أو ما أسميناه 8خانات (الدرس 4) .
لماذا نهتم به؟؟ . لنفس السبب الذي نستعمله في الطريقة القديمة (لتحديد التعليمة بالضبط، وتجنب الخطأ لتكرارها).
أين نجد هذا الــ Offset؟؟ . لحسن الحظ هو معطى في محيط نافذة المفكك ، في الأسفل، كما في الصورة التالية:
فنرى مثلا أن رقم الــ Offset عندما نضغط على سطر القفزة 7516 ، يعطينا00001595h . حرف الـh ؛هو أول حرف في كلمة سادس عشري بالأعجمية، والأصفار في اليسار لا تهمنا ولا نعتبرها.
إذا هل 1595 هذا هو رقم الـ Offset لــ 7516؟؟؟. أقول لك لا..... لأن الــ Offset هو العنوان (في القاعدة السادس العشرية ) للبيت "Byte". بمعنى : أن 1595 هو رقم الـ Offset لـ 75 وحدها و وحدها فقط ( 7 و 5 تشغلان 4 خانات كلتيهما). فيتبع كلامنا بأن رقم الـ Offset لـ 16 هو 1596.
لتتأكد من ذلك إرجع للمفكك، اضغط على سطر القفزة : 004015957516 jne 004015AD سوف ترى الـ Offset 1595 لـ 75، ثم اضغط على السطر الذي يليه، سوف ترى الـ Offset يتغير إلى 1597 ، وهكذا....![]()
بعد أن عرفنا ماهية رقم الـ Offset، لنجربه. نفتح الضحية من جديد في المخرج HexDecCharEditor ونضغط على التركيبة Ctrl+T . للبحث ، ثم أدخل 1595 للبحث عنjne ، ولاحظ أنك تقع تماا على 75. قم مباشرة بتغيير 7516 (jne ) بعاكستها 7416 (je )، واحفظ الضحية بإسم مغاير...
وهكذا نكون قد كسرنا الضحية بطريقتين. -- لكن أين هو المفتاح الحقيقي؟؟؟. لماذا نريد المفتاح الحقيقي؟، لأن بعض البرامج تحرر لنا خاصيات option جديدة، أو تعطينا التسجيل الكامل بكل فوائده، وقد يوفر علينا مشقة دراسة البرنامج بالنشر الميت...
------------------------------------يتبع قريب جدا----------------------------