مثال لإستعمال سوفتايس .
سنقوم بمثالنا على برنامج Ver 2.3 winpack.exe وهو برنامج للباك مثل الوينزيب ولكنه يمكن أن يفتح مختلف
الملفات zip rar etc.. لكن ليس هدا الدي يهمنا الان. والبرنامج يمكن تحميله باسم wpack32d.
أولا نثبت البرنامج بعد دلك نقوم بنسخ البرنامج winpack.exe ودلك احتياطا إدا ما قمنا بخطئ ما تكون عندنا النسخة الأصلية لكي نرجعها إدا دعت الضرورة لدلك.
نشغل البرنامج ونلاحض أنه يشتغل في شكل شيروير ليس مشكلا فهدا ما كنا نريده. نقفل برنامجنا هدا ونغير توقيت الكمبيوتر من السهل مثلا نزيد فيه سنة 2004 .
نشغل البرنامج من جديد وهنا نلاحض أنه يعطينا إنذار بأننا لم نسجل البرنامج وحين ننقر OK الكل راح يا حسرتاه فما العمل إذن.
دعنا الآن وقبل البدء نعطي بعض المعلومات والتوضيحات.
إن برامج الوندوز تعتمد على API بكل اختصار فهي عبارة عن برامج توجد في مكتبات الوندوز(dll ) مثل
Kernel32.dll user32.dll gdi32.dll أو غيرها ومن مميزات softice أنه يمكننا التوقف عند أي
Api فمثلا الإنذار الدي يعطينا البرنامج هو من نوع MessageBox إذن لو استطعنا أن نتوقف في المكان الدي يعطينا هدا الإنذار ربما نستطيع أن نغير مسرى البرنامج لصالحنا. لكي نقوم بوضع نقطة التوقف نقوم كما يلي.
CTRL + D حتى تضهر النافدة السوداء لسوفتايس بعد دلك نكتب
Bpx name_of_the_function
Bpx تعني لسوفتايس break point أو نقطة توقف
Name_of_the_function اسم API التي نريد أن نتوقف عندها ففي مثالنا هدا سنكتب.
Bpx messageboxa لاحضوا a في الأخير فهدا يعني أننا في 32bit فهدا لا يهمنا الان.
مادا تعني bpx messageboxa يعني أن سوفتايس سيتوقف إدا ما قام أي برنامج باستدعاء MessageBoxA أو بطريقة أخرى قبل أن تعرض وندوز أي إندار من نوع MessageBox.
إن سوفتايس لديه عدة Commands لا يمكنني سردها كلها وسنعطي بعضها الان :
BPX name_of_function or number_address
نقطة التوقف متبوعة باسم API أو رقم عنوان الداكرة التي نريد أن نتوقف عندها
BL (BreakPoint List)
BL تعطينا لائحة نقط التوقف التي أنجزناها .الأول يحمل رقم 0 الثاني 1 الخ...
BC number_of_breakpoint (BreakPoint Clear)
BC تقوم بمسح التوقف الدي لا نرغب فيه. مثلا إدا أردنا أن نمسح التوقف رقم 0 و 4 و 7 نكتب مرة
واحدة bc 0 4 7 ويمكننا كتابة bc * وهدا الأخير سيمسح الكل.
BD number_of_breakpoint (BreakPoint Disable)
BE number_of_breakpoint (BreakPoint Enable)
Bd توقف عمل التوقف الدي نريد . التوقف دائما موجود لكن غير شغال والعكس
BE يعيد تشغيل التوقف ثانية وفي كلتا الحالتين يمكننا استعمال * .
نكتفي بهدا القدر الدي سيهمنا الان ويمكن لأي أحد أن يتعرف على البقية في ملف المساعدة.
من الأفضل لمن أراد أن يتمكن أحسن في عالم الكراك أن يعرف برمجة Assembler وهده البرمجة هي الأقرب إلى لغة الأرقام التي يفهمها الحاسوب. في هدا المثال أفترض أن الشخص ليست له دراية بهده البرمجة
(Assembler) لكنه يعرف بعض المبادئ الأساسية للبرمجة, بعض المعلومات عن Basic مثلا أو غيره.
إن الأسمبلر يعتمد على eax,ebx,eip etc Registers وهؤلاء نشاهدهم في النافدة العليا لسوفتايس والدي يهمنا في هدا المثال هو EIP وهو يعطي رقم عنوان التعليمة التي سيقوم الحاسوب بإنجازها والحاسوب يقوم بتعليمة ثم التي بعدها ثم بعدها إلا في بعض التعليمات .
Jmp number (jump to the address number . Inconditionnal jump)
حين يصل إلى هده التعليمة فإن الحاسوب وكيفما كانت الضروف ينتقل إلى التعليمة المتواجدة في الداكرة رقم number فهى مثل التعليمة GoTo في البازيك.
Jx number (conditionnal jump to number- jz-jnz-ja – jb –jl – jg – je – etc…)
هنا x حرف أو حرفان مثل jz ja إلخ وهده التعليمة تعني أن الحاسوب قام بعملية أو مقارنة ما وحسب نوع x فإن الحاسوب سيدهب إلى التعليمة number أو لا حسب نتيجة المقارنة فهده العملية هي مثل
If (xxxx) then goto في البازيك وهده مهمة جدا في الكراك لأن في غالب الأحيان فإن البرنامج يقوم باختبار تاريخ الحاسوب ليرى إن تمت حصة التجريب أم لا زال.
Cmp date,date1
Jl good_date
Date_ finish
في هدا المثال يقوم البرنامج بمقارنة التاريخ date مع التاريخ date1 فإدا كان أصغر فهو يعتبر أن مرحلة التجريب لم تتم بعد ويشتغل البرنامج وفي الحالة الثانية يكف البرنامج عن التشغيل فمثلا لو نبدل jl ب jmp
بما أن jmp هي عملية قفز بدون شروط فإن البرنامج وفي جميع الحالات وكيفما كان التاريخ سيدهب إلى good_date ويبقى دائما شغال ففي معظم الحالات الكراك يقوم حول عملية من نوع jx.
في مثالنا نكتفي بهدا وأنصحكم كثيرا بتعلم الأسمبلر.
بعد هده الدورة النظرية نرجع إلى برنامجنا WinPack .
CTRL + D تظهر نافدة سوفتايس نكتب في النافدة السفلى :
bpx messageboxa
-طبعا أي command نكتبها في سوفتايس تتبع ب Enter –
نضغط f5 بعد دلك نقوم بتشغيل برنامجنا WinPack . اه مادا نرى ظهرت نافدة سوفتايس لوحدها وقد توقفت عند العنوان
User32|MessageBoxA
017F :BFF5412E
لقد قام سوفتايس بما أمرناه فقد توقف عند MessageBoxA التي توجد في user32.dll وعنوانها هو
:BFF5412E 017F وباللون الأخظر في الأسفل نقرأ user32 هدا يعني أننا الان موجودون في user32 فهي لا تهمنا لأننا لا نريد تغييرها. نضغط F12 وهنا نرى نافدة البرنامج ننقر ما يمكن نقره وسوفتايس يظهر من جديد. في هده المرة نرى :
017F :004F4270 Mov [ESI] , EBX
دعنا نعطي بعض التوضيحات 017F وهو ما يسمى ب Descriptor or segment حسب نوع البرنامج وفي الحقيقة ليس لنا به شغل فلتكن نتيجته ما شاء.
004F4270 عنوان الداكرة ب Hexadecimal وهدا الرقم هو العنوان التي توجد بها المعلومات التي سيقوم الحاسوب بإنجازها ونلاحظ أنه نفس الرقم في EIP في أعلى النافدة.
Mov [ESI] , EBX هده هي المعلومة(Instruction) بلغة الأسمبلر مثلا هنا يأمر الحاسوب بوضع مقدار EBX في العنوان المشار إليه في ESI وإن لم نفهم هدا ليس مشكلا.
نضغط مرتين على F12 لنجد أنفسنا في
017F :004EBF7D Test eax , eax
004EBF7F jnz 004EBF96
نحن الان في المعلومة 004EBF7D والحاسوب سيقوم بعملية Test حتى إدا لم نعرفها لا يهم بعدها نرى
jnz 004EBF96 إدا كانت النتيجة غير صفر يقفز البرنامج إلى العنوان 004EBF96 .ها نحن نقترب.
الان نضغط على F10 وهدا يمكننا من تشغيل البرنامج خطوة خطوة أو تعليمة بتعليمة ونرى أن EIP تحول إلى
004EBF7F إدن التعليمة التالية وهنا نرى في الأيمن NoJump هدا يعني أن نتيجة Test لا تمكنه من القفز إلى العنوان 004EBF96 إدن سيمر إلى التعليمة الموالية. ننقر فوق العنوان 004EBF7F ونتأكد أن Cursor هو الان في هدا السطر هنا نضغط على F9 و F9 تقوم بوضع نقطة توقف في العنوان الدي يوجد به Cursor ننجز BL لنتأكد أن الان عندنا نقطتين توقف 0 و 1 .
نتمشى الان بالضغط كل مرة على F10 حتى نصل إلى 4EBF8A هنا نضغط على F10 مرة أخرى وفي نفس الوقت نلاخظ أن نافدة WinPack قد اختفت من وراء سوفتايس هدا يعنى أن WinPack قد بدأ في الإغلاق وهدا لم نكن نريده فنحن نريد أن يبقى مشتغلا وهنا نقول ليتنا لم نمر بهدا الطريق بعد دلك وفي العنوان
4EBF94 jmp 4EBF9D هنا يقفز البرنامج الى العنوان المدكور ونلاحظ أنه يقفز على 004EBF96 الدي كان سيؤدينا إليه jnz 004EBF96 أعلاه وفي نفس الوقت يجنبنا الطريق التي لم تعجبنا من قبل.
هنا نضغط F5 مع خيبة أملنا لأننا لم نحقق شيئ ونقوم مرة أخرى بتشغيل البرنامج مثل الأول يقف سوفتايس في MessageBoxA ننقر الإندار نضغط F5 وهنا يقف عند النقطة 004EBF7F jnz 004EBF96 التي كنا اخترناها من قبل ونرى دائما في اليمين NoJump هنا سنغير المجرى العادي للبرنامج هو في الحقيقة لا يقفز إلى العنوان المدكور لكن نحن سنرغمه.
نجر الماوس إلى EIP=004EBF7F أعلى النافدة وننقر 7 لنجعل Cursor فوق هدا الرقم هنا نتأكد من أن زر الأرقام (Verr num) شاعل ونكتب فوق 7 96 ليصبح EIP=004EBF96 يعنى العنوان الدى كان قد يؤدينا إليه لو تم القفز من قبل.
هنا نشد أعيننا ونضغط F5 , دعوة صغيرة , ونفتح أعيننا ومادا نرى إن البرنامج المسكين شغالا وكأن شيئ لم يكن.
سنكتفي بهدا القدر في هده الحصة حتى أرى ما هي اراء الإخوة والمرة القادمة سنرى كيف ومادا نبدل في البرنامج ليشتغل بدون سوفتايس لأن الان عرفنا مادا يقع بعجالة افتحوا WinPack في أي برنامج HexEditor مثل WinHex hexWorkShop etc.. ادهبوا إلى Offset EB37F ستكون هناك الأرقام اتالية 75 15 8b etc.. بدلوا الرقم 75 بالرقم EB وسجلوه تحت اسم WinPack_Cr1 أوقفوا البرنامج هدا وشغلوا WinPack_Cr1 إدا كانت نقط التوقف لسوفتايس لا زالت شغالة فقوموا مثل الأول ولكن هده المرة ستلاحظون أت التعليمة jnz قد تبدلت إلى jmp وهدا ما كان هدفنا حيث أن 75 هي رقم التعليمة jnz و EB هي Jmp الان CTRL D and BC* لنمسح جميع نقط التوقف F5 ونشغل برنامجنا الجديد.وإن ظهرت أي مشاكل أخرى لهدا البرنامج لا يهمنا أمره لأن هده مجرد تجربة أولى . وفي الحصة القادمة أيضا سنرى أيضا كيف يمكننا أن نتخلص من الإندار الدي يظهر في البداية حتى يكون عندنا برنامج شغال مية مية.
هناك مثلا برنامج Update ل Norton حمل مثلا اخر Update وإدا لم يشتغل بحيث يقول أن الوقت انتهى أو إدا أردت زد في تارىخ حاسوبك حتى لا يشتغل Update وقم بكراكه فهو شبيه بمثالنا هدا إد يعتمد على MessageBoxA فقط.
حظ سعيد للجميع في انتظار ارائكم أو أسئلتكم.