تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
كسر برنامج iWisoft Flash
#1
كسر برنامج iWisoft Flash SWF to Video Converter
البرنامج يعمل على بيئة x32
البرنامج غير محمي
لغة برمجته: C++
المنقح المستخدم : x64dbg
رابط موقع البرنامج : http://flash-swf-converter.com
لنقم بتشغيل البرنامج لنرى رسالة خطأ التسجيل عندما ندخل سيريال خاطئ
[صورة مرفقة: POOOR2O.png]
نحمل البرنامج في المنقح
نبحث عن رسالة الخطا
[صورة مرفقة: 1U7qD7B.png]
سنراها عند العنوان 004391A8 وسنلاحظ في قسم التعليقات يخبرنا المنقح بانه هنالك قفزة تقفز اليها
Jump from sub_439070+E1
وسنلاحظ قبل القفزة هنالك فحص قيمة AL اذا كان 0 فسيقفز وان لم يكن كذلك فلن يقفز وسينفذ رسالة التسجيل نجح
اذا قمنا بعكس القفزة سنلاحظ انه يعطي رسالة السجل نجح ولكن لن يكون مسجل بالفعل بالنبة للدوال الاخرى التي تتحقق من تسجيل البرنامج لانها لا تستخدم هذه الدالة للتحقق
[صورة مرفقة: 296B3tr.png]
حسنا لنقم بالدخول بالاستدعاء الذي قبل القفزة الذي يستدعي دالة التحقق من التسجيل
[صورة مرفقة: 3jskgIj.png]
نرى انه يتحق من قيمة AL ايضا ولا يوجد شيئ يؤثر في قيمة AL في هذه الدالة لذا لنجرب الدخول بالدالة التي تستدعيها هذه الدالة عند العنوان 004151AC

نلاحظ اول تحقق ياتي في هذه الدالة هو طول السيريال 18 محول من  hex الى نظام العد العشري نجد انها تساوي 24
اذا كان  24  حرف فسيقفز وان لم يكن كذلك فسينفذ التعليمات التي اسفل القفزة والتي سنرى ان هناك ايضا تحقق بعد هذا يقفز اليه
اذا جربنا تتبع هذه التعليمات عند العنوان  00414A22سنراها ترجع قيمة AL = 0
حسنا الان اما ان نعيد كتابة سيريال ب 24 حرف او تغير نوع القفزة من jge الى jmp
[صورة مرفقة: RCr4hEX.png]
بالنزول قليلا
سنلاحظ تعليمة فحص al ذا كان 0 ام لا
نلاحظ انه يستدعي دالة قبل ذلك هذه الدالة تقوم بفحص اول حرفين ادخلناهم بالسيريال الحقيقي اذا كانو خطا فسترجع AL=0
في حال القفز سنرى تحقق يتلو التحقق السابق عند العنوان  00414AB5 هذا التحقق يتحقق من قيمة al
اذا كان فيمة al = 0 فسيقفز وان لم يكن كذلك فسنرى انه سيقفز الى 00414A22 وهي نفسها االتعليمات التي ذكرتها سابقا ( تعليمات تؤدي الى ارجاع 0 ل AL)
ايضا هنا لنقم بتغير نوع القفزة الى JMP   عند العنوان 00414AB5
[صورة مرفقة: ryJVQAG.png]

حسنا الان لنقم بالنزول للاسفل
نرى انه هناك الكثير من القفزات لا داعي لاعطائها اهمية لانها لاتحتوي على قفزة لتلك التعليمات  التي ترجع AL=0
اثناء نزولنا سنرى تعليمة مقارنة
00414D96 | 395424 38                | cmp dword ptr ss:[esp+38],edx      |
وسنرى قبلها استدعاء لدالة عند العنوان 00414D80
هذه الدالة لا داعي للتعمق فيها فهي تتحقق من السيريال الصحيح وتقارنه بالخطأ
سنلاحظ القفزة بعد تعليمة المقارنة لن تؤخذ في حالتنا السيريال خطأ
وسنلاحظ هذه القفزة الوحيدة التي تتخطى القفزة الاجبارية التي تقود الى ارجاع AL=0
لذا سنغيرها الى JMP
[صورة مرفقة: ewq2YuU.png]

بعد ان  نقفز سنرى انه هناك ايضا تحقق ثاني وقفزة ونرى انه في حال عدم القفز سيقودنا لتلك التعليمات التي تجعل من البرنامج غير مسجل
 وفي حالتنا لن يقفز لذلك سنغيرها ل JMP
 [صورة مرفقة: sZLdjSR.png]
ثم سنلاحظ انه ارجع قيمة AL>0 مما يعني ان اي دالة ستستدعي دالة التحقق سيرجع للدالة AL>0 مما يعني ان البرنامج سيكون مسجل بالنسبة لجميع الدوال .

[صورة مرفقة: SkTaghD.png]

[صورة مرفقة: MFKjSoQ.png]
( وَفِىٓ أَنفُسِكُمْ ۚ أَفَلَا تُبْصِرُونَ )
أعضاء أعجبوا بهذه المشاركة : Cyperior , mohamad , PowerUser , the9am3 , muhmath2002
#2
السلام عليكم ورحمة الله وبركاته
بارك الله فيك اخي الكريم
من الافضل ان تجعل الشرح على شكل PDF وترفعه في المرفقات حتى لا يكون الموضوع مخالف لقوانين المنتدى الجديدة
أعضاء أعجبوا بهذه المشاركة :


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


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