كسر برنامج iWisoft Flash SWF to Video Converter
البرنامج يعمل على بيئة x32
البرنامج غير محمي
لغة برمجته: C++
المنقح المستخدم : x64dbg
رابط موقع البرنامج : http://flash-swf-converter.com
لنقم بتشغيل البرنامج لنرى رسالة خطأ التسجيل عندما ندخل سيريال خاطئ
نحمل البرنامج في المنقح
نبحث عن رسالة الخطا
سنراها عند العنوان 004391A8 وسنلاحظ في قسم التعليقات يخبرنا المنقح بانه هنالك قفزة تقفز اليها
Jump from sub_439070+E1
وسنلاحظ قبل القفزة هنالك فحص قيمة AL اذا كان 0 فسيقفز وان لم يكن كذلك فلن يقفز وسينفذ رسالة التسجيل نجح
اذا قمنا بعكس القفزة سنلاحظ انه يعطي رسالة السجل نجح ولكن لن يكون مسجل بالفعل بالنبة للدوال الاخرى التي تتحقق من تسجيل البرنامج لانها لا تستخدم هذه الدالة للتحقق
حسنا لنقم بالدخول بالاستدعاء الذي قبل القفزة الذي يستدعي دالة التحقق من التسجيل
نرى انه يتحق من قيمة AL ايضا ولا يوجد شيئ يؤثر في قيمة AL في هذه الدالة لذا لنجرب الدخول بالدالة التي تستدعيها هذه الدالة عند العنوان 004151AC
نلاحظ اول تحقق ياتي في هذه الدالة هو طول السيريال 18 محول من hex الى نظام العد العشري نجد انها تساوي 24
اذا كان 24 حرف فسيقفز وان لم يكن كذلك فسينفذ التعليمات التي اسفل القفزة والتي سنرى ان هناك ايضا تحقق بعد هذا يقفز اليه
اذا جربنا تتبع هذه التعليمات عند العنوان 00414A22سنراها ترجع قيمة AL = 0
حسنا الان اما ان نعيد كتابة سيريال ب 24 حرف او تغير نوع القفزة من jge الى jmp
بالنزول قليلا
سنلاحظ تعليمة فحص al ذا كان 0 ام لا
نلاحظ انه يستدعي دالة قبل ذلك هذه الدالة تقوم بفحص اول حرفين ادخلناهم بالسيريال الحقيقي اذا كانو خطا فسترجع AL=0
في حال القفز سنرى تحقق يتلو التحقق السابق عند العنوان 00414AB5 هذا التحقق يتحقق من قيمة al
اذا كان فيمة al = 0 فسيقفز وان لم يكن كذلك فسنرى انه سيقفز الى 00414A22 وهي نفسها االتعليمات التي ذكرتها سابقا ( تعليمات تؤدي الى ارجاع 0 ل AL)
ايضا هنا لنقم بتغير نوع القفزة الى JMP عند العنوان 00414AB5
حسنا الان لنقم بالنزول للاسفل
نرى انه هناك الكثير من القفزات لا داعي لاعطائها اهمية لانها لاتحتوي على قفزة لتلك التعليمات التي ترجع AL=0
اثناء نزولنا سنرى تعليمة مقارنة
00414D96 | 395424 38 | cmp dword ptr ss:[esp+38],edx |
وسنرى قبلها استدعاء لدالة عند العنوان 00414D80
هذه الدالة لا داعي للتعمق فيها فهي تتحقق من السيريال الصحيح وتقارنه بالخطأ
سنلاحظ القفزة بعد تعليمة المقارنة لن تؤخذ في حالتنا السيريال خطأ
وسنلاحظ هذه القفزة الوحيدة التي تتخطى القفزة الاجبارية التي تقود الى ارجاع AL=0
لذا سنغيرها الى JMP
بعد ان نقفز سنرى انه هناك ايضا تحقق ثاني وقفزة ونرى انه في حال عدم القفز سيقودنا لتلك التعليمات التي تجعل من البرنامج غير مسجل
وفي حالتنا لن يقفز لذلك سنغيرها ل JMP
ثم سنلاحظ انه ارجع قيمة AL>0 مما يعني ان اي دالة ستستدعي دالة التحقق سيرجع للدالة AL>0 مما يعني ان البرنامج سيكون مسجل بالنسبة لجميع الدوال .
البرنامج يعمل على بيئة x32
البرنامج غير محمي
لغة برمجته: C++
المنقح المستخدم : x64dbg
رابط موقع البرنامج : http://flash-swf-converter.com
لنقم بتشغيل البرنامج لنرى رسالة خطأ التسجيل عندما ندخل سيريال خاطئ
نحمل البرنامج في المنقح
نبحث عن رسالة الخطا
سنراها عند العنوان 004391A8 وسنلاحظ في قسم التعليقات يخبرنا المنقح بانه هنالك قفزة تقفز اليها
Jump from sub_439070+E1
وسنلاحظ قبل القفزة هنالك فحص قيمة AL اذا كان 0 فسيقفز وان لم يكن كذلك فلن يقفز وسينفذ رسالة التسجيل نجح
اذا قمنا بعكس القفزة سنلاحظ انه يعطي رسالة السجل نجح ولكن لن يكون مسجل بالفعل بالنبة للدوال الاخرى التي تتحقق من تسجيل البرنامج لانها لا تستخدم هذه الدالة للتحقق
حسنا لنقم بالدخول بالاستدعاء الذي قبل القفزة الذي يستدعي دالة التحقق من التسجيل
نرى انه يتحق من قيمة AL ايضا ولا يوجد شيئ يؤثر في قيمة AL في هذه الدالة لذا لنجرب الدخول بالدالة التي تستدعيها هذه الدالة عند العنوان 004151AC
نلاحظ اول تحقق ياتي في هذه الدالة هو طول السيريال 18 محول من hex الى نظام العد العشري نجد انها تساوي 24
اذا كان 24 حرف فسيقفز وان لم يكن كذلك فسينفذ التعليمات التي اسفل القفزة والتي سنرى ان هناك ايضا تحقق بعد هذا يقفز اليه
اذا جربنا تتبع هذه التعليمات عند العنوان 00414A22سنراها ترجع قيمة AL = 0
حسنا الان اما ان نعيد كتابة سيريال ب 24 حرف او تغير نوع القفزة من jge الى jmp
بالنزول قليلا
سنلاحظ تعليمة فحص al ذا كان 0 ام لا
نلاحظ انه يستدعي دالة قبل ذلك هذه الدالة تقوم بفحص اول حرفين ادخلناهم بالسيريال الحقيقي اذا كانو خطا فسترجع AL=0
في حال القفز سنرى تحقق يتلو التحقق السابق عند العنوان 00414AB5 هذا التحقق يتحقق من قيمة al
اذا كان فيمة al = 0 فسيقفز وان لم يكن كذلك فسنرى انه سيقفز الى 00414A22 وهي نفسها االتعليمات التي ذكرتها سابقا ( تعليمات تؤدي الى ارجاع 0 ل AL)
ايضا هنا لنقم بتغير نوع القفزة الى JMP عند العنوان 00414AB5
حسنا الان لنقم بالنزول للاسفل
نرى انه هناك الكثير من القفزات لا داعي لاعطائها اهمية لانها لاتحتوي على قفزة لتلك التعليمات التي ترجع AL=0
اثناء نزولنا سنرى تعليمة مقارنة
00414D96 | 395424 38 | cmp dword ptr ss:[esp+38],edx |
وسنرى قبلها استدعاء لدالة عند العنوان 00414D80
هذه الدالة لا داعي للتعمق فيها فهي تتحقق من السيريال الصحيح وتقارنه بالخطأ
سنلاحظ القفزة بعد تعليمة المقارنة لن تؤخذ في حالتنا السيريال خطأ
وسنلاحظ هذه القفزة الوحيدة التي تتخطى القفزة الاجبارية التي تقود الى ارجاع AL=0
لذا سنغيرها الى JMP
بعد ان نقفز سنرى انه هناك ايضا تحقق ثاني وقفزة ونرى انه في حال عدم القفز سيقودنا لتلك التعليمات التي تجعل من البرنامج غير مسجل
وفي حالتنا لن يقفز لذلك سنغيرها ل JMP
ثم سنلاحظ انه ارجع قيمة AL>0 مما يعني ان اي دالة ستستدعي دالة التحقق سيرجع للدالة AL>0 مما يعني ان البرنامج سيكون مسجل بالنسبة لجميع الدوال .
( وَفِىٓ أَنفُسِكُمْ ۚ أَفَلَا تُبْصِرُونَ )