• 0
The Hidden Ghost

~| تعلم كيف تصنع الباتش للبرامج بلغة السي |~

سؤال

02.png

السلام عليكم ورحمة الله تعالى وبركاته

إن الحمد لله نحمده ونستعينه ونستغفره ، ونعوذ بالله من شرور أنفسنا وسيئات أعمالنا ، من يهده الله فلا مضل له ومن يضلل

فلا هادي له ، وأشهد أن لا إلـه إلا الله وحده لا شريك له وأشهد أن محمـدا عبده ورسوله صلى الله عليه وعلى آله وصحبه

وسلم تسليما كثيرا إلى يوم الدين .

أما بعد ، فأهدي سلامي لكل أعضاء وزوار منتدنا الحبيب laugh.gif .

شاهدوا هذا البرنامج المسكين الذي يطلب منك إدخال السريال ، ألا تجدونه مملا ؟

Kx87H.png

عندما تدخل سريالا خاطئا تظهر لك هذه الرسالة المزعجة :

P6Mkt.png

ما رأيكم في أن نبرمج لهذا البرنامج باتشا قاتلا ؟ يجعله يتمنى لو لم يبرمجه حمزة

إذا هيا بنا ، أول خطوة علينا أن نقوم بفتح الOLLY

smile.gif :

wSeDP.png

تظهر لنا تعليمات البرنامج بالأسمبلي ، علينا أن نذهب إلى هذا العنوان :

L2OSv.png

العنوان هو : 00401360

قبل هذا العنوان هناك التعليمة cmp وهي تعليمة تقارن ما أدخلته أنت أي السريال مع السريال الذي يطلبه البرنامج

بعد هذه المقارنة ، نجد التعليمة jnz أو jne وهي تعني "إقفز إذا كان لا يساوي" ، أي سيتم القفز إلى الميساج الذي سوف يعرض

لك في حالة ما إذا أدخلت سريالا صحيحا أو خاطئا .

يا ترى كيف سنستطيع تغيير هذه التعليمة لكي يتم قبول أي سريال يدخله المستخدم ؟

بالنسبة للطريقة فهناك حلين يدوين يمكن تحويلهما إلى برمجة طبعا :

  • الحل 1 : هو تغيير التعليمة jnz إلى jz أو je أي " إقفز إذا كان يساوي "

  • الحل 2 : تغيير التعليمة jnz إلى nop أي "لا تعمل أي شيء" وبالتالي تخطي تعليمة المقارنة وعرض رسالة التسجيل.

e72GW.png

إلى حد الآن كل شيء واضح ، لكن بقي علينا معرفة الأوفسيت offset لكي نبرمج الباتش .

نفتح هذا البرنامج :

C0gpp.png

نذهب إلى العنوان الذي استخرجناه بواسطة olly :

AcEqJ.png

لاحظوا أنه أعطانا رقم الأوفسيت والذي هو :760 بالهكس.

بقي شيء واحد لم أذكره ، بعدها سنبرمج الباتش . قلنا سابقا أننا سنستعمل التعليمة nop ولكي نتمكن من استعمال هذه التعليمة في برنامجنا

يجب علينا تحويل هذه التعليمة إلى الهكس أو الديسيمال أي النظام العشري :

nop ==> 90h ==> 144D

هي 90 بالهكس و 144 بالديسمال .

كود سورس الباتش بلغة السي :

[/center]

[center]#include <stdio.h> // مكتبة ضرورية
// Patch for Serial-Program By Hamza Qdider
int main()
{
char data[]={0x90};// nop التعليمة
int offset=0x760; // رقم الأوفسيت
FILE *Patch; // نصرح بملف
if((Patch=fopen("SerialProgram.exe","r+b"))!=NULL)
{ // نقوم بفتح البرنامج الضحية في وضعية القراءة + البيناري لكي نقوم بالكتابة فيه
fseek(Patch,offset,SEEK_SET);
// هنا نذهب إلى الأوفسيت لكي ندخل التعليمة مع وضع مؤشر القراءة في البدابة
fwrite(data,sizeof(data),sizeof(data),Patch);
// هنا نقوم بكتابة التعليمة في البرنامج
fclose(Patch); // نغلق البرنامج لكي يتم حفظ التغييرات
printf("Patched By Hamza Qdider !!!");
getchar();
}
else{ // في حالة ما إذا تعذر فتح البرنامج أو كان هذا البرنامج غير موجود أصلا
printf("File Not Found !!!");
getchar();
}
return 0;
}
[/center]


[center]

كود سورس الباتش بلغة السي++ :


[center]
#include <iostream>
#include <fstream> // مكتبة ضرورية
// Patch for Serial-Program By Hamza Qdider
using namespace std;

int main()
{
ofstream patch;
char nop[1]={0x90};// nop التعليمة
int offset=0x760; //the Offset
patch.open("SerialProgram.exe",ios::in|ios::binary);
// نقوم بفتح البرنامج الضحية في وضعية القراءة + البيناري لكي نقوم بالكتابة فيه
if(patch!=NULL)
{
patch.seekp(offset,ios::beg);
// هنا نذهب إلى الأوفسيت لكي ندخل التعليمة مع وضع مؤشر القراءة في البدابة
patch.write(nop,sizeof(nop));// هنا نقوم بكتابة التعليمة في البرنامج
patch.close(); // نغلق البرنامج لكي يتم حفظ التغييرات
cout << "SerialProgram.exe is Patched"<<endl;
cin.get();

}
else{ // في حالة ما إذا تعذر فتح البرنامج أو كان هذا البرنامج غير موجود أصلا
cout<<"Oops File not Found !!!"<<endl;
cin.get();
}
return 0;
}
[/center]


[center]

[/center]

ضع الباتش قرب البرنامج أي في نفس مسار البرنامج الضحية، ثم اضغط على الباتش

عد إلى البرنامج ثم أدخل أي سريال و لاحظ هذه الرسالة الجميلة

laugh.gif ،،،

7nS2H.png

أتمنى أن يعجبكم الموضوع

laugh.gif ،،،

السلام عليكم ورحمة الله تعالى وبركاته ،،،

smile.gif

4

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

13 إجابة على هذا السؤال .

  • 0

رااائع أخي حمزة ...يبدو أنك تعرفت على عالم الهندسة العكسية أخيراً ....؟

لا تنس الطريقة الثالثة ..وهي الأهم : أن تعرف كلمة السر ذاتها ...وقد وجدت أنها 233 wink.gifتحياتي

__________

سبب التعديل : كلمة "وقد".

تم تعديل بواسطه مصطفى 36a2
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

أهلا مصطفىsmile.gif ، كلمة السر ليست 233 لأنني أعرفها فأنا الذي برمجت البرنامج الضحية laugh.gif

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

ما رأيك أن تتأكد من ذلك ؟ثم تعيد التفكير في برنامجك wink.gifwink.gifwink.gifwink.gif

__________________________________

أو ربما يبدو أنني وجدت ثغرة في برنامجك laugh.giflaugh.gif

تم تعديل بواسطه مصطفى 36a2
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

حسنا ، سأتأكد من هذا الذي تقوله smile.gif أخي مصطفى ،،،

آه ، أنت تقصد كلمة السر الأصلية بدون كسر . نعم هي 233 + لقد رأيت ذلك من خلال السورس أليس كذلك ؟ laugh.gif

int correctSerial=233;

تم تعديل بواسطه Hamza+C+ASM
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

ماشاء الله دائما متألق

شكرا علي الموضوع.

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

أهلا أخي حبيب smile.gif ،،، اشتقنا إليك أخي laugh.gif + لن و لن أرقى إلى مستواك أخي حبيبwink.gif

فأنت أحسن مني بألف درجة happy.gif ،،،

كلمة المتألق حكر على الأستاذ أحمد ، لا ينبغي أن ينادى بها شخص غيره . هي اسم على

مسمى و الأستاذ أحمد أحق بها مني smile.gif

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

انقطع الاتصال البارحة عندما كنت اريد الرد عليك ... بانني لم أقرأ الsource ...

آه ، أنت تقصد كلمة السر الأصلية بدون كسر . نعم هي 233 + لقد رأيت ذلك من خلال السورس أليس كذلك

وقد عرفت كلمة السر من هنا :

post-256536-026747300 1348035315_thumb.j

بالتوفيق

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

يعني أن الأمر أسهل مما كنت أتوقع huh.gif

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

ذلك لأن مستوى الأمن في برنامجك ..صفر تقريباً ... ربما لو كانت كلمة السر عبارة محرفية .. ربما كان أصعب قليلاً ... ولو قمت بوضع عدة كلمات سر .. أو عدة شروط معاً ...لكان أصعب ...

مثلاً ...يجب أن يكون أول حرف كذا ... وثالث حرف كذا ... وأن لا يكون الحرف الأخير كذا ... وهكذا ,,, تزيد صعوبة كسرها ...

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

إذا كنت مهتما بالموضوع ....

ما رأيك لو تضع برنامج وتتحدى من يعرف كلمة السر wink.gifسيكون الأمر مسليا ...

بالتوفيق

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

توجد برامج متخصصة في فك الضغط و كسر الحماية مثل Quick Unpack , VMunpacker , RL!depacker

أما التحليل فعادة ما يتم باستخدام برنامج الــ Olly. أيضا, توجد طرق أخرى للفك اليدوي.

بالإضافة إلى ما سبق, تختلف طرق فك البرامج وكسر الحماية من برنامج الى آخر, حسب اللغة التي تمت بها البرمجة, فمثلاً البرامج المبرمجة بالــ .Net تُكسر بالــ Dotnet Reflector

والدلفي بــ DeDe و هكذا ..

توجد أيضا برامج أخرى تُمكنك من معرفة السورس كود للبرنامج الهدف.

الخوارزميه المُستخدمه فى التحقق من السريال المُدخل تكون دائما موجوده داخل الملف التنفيذى فإن استطعت الوصول لها يمكنك عكسها لتوليد السريال, و بشكل إفتراضي سيكون السريال المولد صحيح. الصعوبه تكون فى إيجاد الخوارزميه و محاولة عكسها.

@مصطفى

يمكنك التدرب على برامج الــ Crackme :)

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0
@مصطفى

يمكنك التدرب على برامج الــ Crackme

لا أريد أن أتدرب ... أريد أن أتسلى ببرامج حمزة laugh.giflaugh.giflaugh.gif

أمزح ...

صار عندي الكثير من المشاريع ... منذ حوالي 3 شهور تدربت على القليل من الهندسة العكسية ...

ولكن من شدة انبهاري بلغة الآلة وتحليل البرامج ... لم أرد أن أتابع فقد تعمقت كثيراً في بعض هذه الأمور .... إن شاء الله سأتابع بعد الانتهاء من بعض الأعمل ....

حالياً أحاول تعلم cracking ... 051.gif

أشعر أن عليّ واجباً أؤديه wink.gif....

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

البرمجة بحر كل مجال ينسيك في الآخر ، الله يستر wacko.gif

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

السلام عليكم

ممكن برمجة باتش فيجول بيسك دوت نت

-1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

من فضلك سجل دخول لتتمكن من التعليق

ستتمكن من اضافه تعليقات بعد التسجيل



سجل دخولك الان

  • يستعرض القسم حالياً   0 members

    لا يوجد أعضاء مسجلين يشاهدون هذه الصفحة .