0% found this document useful (0 votes)
22 views

API Hoking

يوفر هذا المستند معلومات حول تقنية API hooking التي تسمح للبرامج باعتراض دوال API وتنفيذ كود آخر قبل تنفيذ الكود الأصلي. يناقش المستند طرق مختلفة لتحقيق API hooking مثل استخدام مكتبات DLL أو تعديل جدول IAT.

Uploaded by

Otman Simo
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
22 views

API Hoking

يوفر هذا المستند معلومات حول تقنية API hooking التي تسمح للبرامج باعتراض دوال API وتنفيذ كود آخر قبل تنفيذ الكود الأصلي. يناقش المستند طرق مختلفة لتحقيق API hooking مثل استخدام مكتبات DLL أو تعديل جدول IAT.

Uploaded by

Otman Simo
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 5

‫باسم اهلل انرحمان انرحيم‬

‫ع‪ٛ‬ف ٔزىٍُ ا‪ ْ٢‬إْ شبء اهلل ػٓ ِف‪.API hoking َٛٙ‬‬

‫لجً أْ ٔجذأ أ‪ٚ‬د أْ اػشف ة ‪API‬‬

‫وّب ٔؼٍُ فبْ ٔظبَ ٌ‪ٕ٠ٛ‬ذ‪ٚ‬ص ‪٠‬سز‪ ٞٛ‬ػٍ‪ ٝ‬اٌؼذ‪٠‬ذ ِٓ ِىزجبد اٌشثػ اٌذ‪ٕ٠‬بِى‪١‬خ ‪ ٚ‬اٌز‪ ٟ‬رسز‪ ٞٛ‬ثذ‪ٚ‬س٘ب ػٍ‪ٝ‬‬
‫ِدّ‪ٛ‬ػخ ِٓ األ‪ٚ‬اِش أ‪ٌٕ ٚ‬مً اٌذ‪ٚ‬اي ٘ذٖ اٌذ‪ٚ‬اي ٘‪ ٟ‬د‪ٚ‬اي ‪ ٚ API‬اٌز‪ ٟ‬رغ‪ ًٙ‬ػٍ‪ ٝ‬اٌّجشِد‪ ٓ١‬اٌزؼبًِ ِغ إٌظبَ‬
‫‪ٚ‬اٌّغزؼًّ ‪ ٚ‬ػذَ اٌٍد‪ٛ‬ء إٌ‪ ٝ‬ثٕبء اٌجشاِح ِٓ اٌصفش ‪.‬‬
‫ف‪ ٟ‬اٌسم‪١‬مخ فبْ د‪ٚ‬اي ‪ API‬رّٕر ٌٍّجشِح اٌؼذ‪٠‬ذ ِٓ اإلِىبٔ‪١‬بد اٌز‪٠ ٟ‬غزؽ‪١‬ؼ‪ ْٛ‬ث‪ٛ‬اعؽز‪ٙ‬ب رسم‪١‬ك اٌىث‪١‬ش ِٓ األِ‪ٛ‬س‬
‫ثغ‪ٌٛٙ‬خ فً ٔبخذ وّثبي اٌذاٌخ اٌجغ‪١‬ؽخ اٌز‪٠ ٟ‬ؼشف‪ٙ‬ب اٌىً ‪ MessageBox‬ف‪ ٟٙ‬ع‪ٍٙ‬خ االعزذػبء‬
‫‪٠‬ىف‪ ٟ‬دفغ اٌجبساِزشاد ٌ‪ٙ‬ب ‪ ٟ٘ٚ‬رم‪ َٛ‬ثبٌجبل‪ِ ٟ‬ثال ف‪ ٟ‬االعّجٍ‪:) Masm Syntax ) ٟ‬‬
‫‪Invoke MessageBox, HandleOfWindow, TextToShownTheBox, TitleOfBox, ButtonsInTheBox‬‬

‫ٌىٕ‪ٙ‬ب ف‪ ٟ‬خ‪٘ٛ‬ش٘ب ف‪١ٌ ٟٙ‬غذ ث‪ٙ‬زٖ اٌغ‪ٌٛٙ‬خ ف‪ٕٙ‬بن دس‪ٚ‬ط خبصخ رششذ فمػ رؼم‪١‬ذد ثشاِزشار‪ٙ‬ب ‪......‬‬
‫‪ّ٠‬ىٓ االؼالع ػٓ ٘ذٖ اٌذ‪ٚ‬اي ف‪ٍِ ٟ‬ف اٌّغبػذح ‪Win 32.hlp‬‬

‫إرْ ِٓ ٕ٘ب ٔغزٕزح إْ ٕ٘بن ارصبي ث‪ ٓ١‬اٌجشٔبِح ‪ ٚ‬اٌّىزجبد اٌذ‪ٕ٠‬بِ‪١‬ى‪١‬خ ِٓ ٕ٘ب ثشصد إِىبٔ‪١‬خ اػزشاض‬
‫٘ذ االرصبٌ‪ٛ‬ػًّ ‪( HOOK‬ص‪١‬ذ) ٌزس‪ ً٠ٛ‬اٌجشٔبِح إٌ‪ ٟ‬رٕف‪١‬ز و‪ٛ‬د آخش ػ‪ٛ‬ض و‪ٛ‬د ‪ٚ API function‬دٌه‬
‫ػٍ‪ ٝ‬إٌس‪ ٛ‬ا‪٢‬ر‪: ٟ‬‬

‫‪ ِٕٗٚ‬فبٌ‪ٛٙ‬ن ٌ‪١‬ظ ع‪ ٜٛ‬ػٍّ‪١‬خ اػزشاض ٌالعزذػبء ‪ٚ‬إػبدح ر‪ٛ‬خ‪ ٗٙ١‬إٌ‪ ٝ‬و‪ ٛ‬د ِٓ اخز‪١‬بسٔب ثس‪١‬ث ‪ٕ٠‬فذ‬
‫٘زا اٌى‪ٛ‬د ف‪ ٟ‬وً ِشح ‪٠‬زُ ف‪ٙ١‬ب اعزذػبء اٌذاٌخ اٌّشرجؽخ ثٗ ‪.‬‬
‫‪ٌٚ‬ؼًّ اٌ‪ٛٙ‬ن ٕ٘بن ػذح ؼشق ٔخص ِٕ‪ٙ‬ب ثبٌزوش ‪:‬‬

‫‪1-API function redirection via Dll emulation‬‬


‫‪2-API function redirection via IAT patch.‬‬
‫‪3-API function redirection via Inline Patch.‬‬

‫‪1-API function redirection via Dll emulation.‬‬

‫‪1‬‬
‫‪ -1‬إػبدح ر‪ٛ‬خ‪ ٗ١‬ػٓ ؼش‪٠‬ك رّ‪DLL ٗ٠ٛ‬‬

‫رشرىض ٘ذٖ اٌؽش‪٠‬مخ ػٍ‪ ٝ‬رجذ‪ Dll ً٠‬اٌز‪ ٟ‬رسز‪ ٞٛ‬ػٍ‪ ٝ‬اٌذاٌخ أ‪ ٚ‬اٌذ‪ٚ‬اي اٌّشاد رس‪ٍٙ٠ٛ‬ب ثٍّف آخش ‪٠‬عُ‬
‫االو‪ٛ‬اد اٌز‪ٔ ٟ‬ش‪٠‬ذ رٕف‪١‬ز٘ب ف‪ِ ٟ‬ىبْ اٌذ‪ٚ‬اي اٌز‪ٔ ٟ‬ش‪٠‬ذ ػًّ ‪ٌٙ hook‬ب ٘ذٖ اٌؽش‪٠‬مخ ٘‪ ٟ‬اٌؽش‪٠‬مخ االِزً ٌىٓ ٌألعف‬
‫ف‪ ٟٙ‬رزؽٍت إػبدح ثٕبء ٌٍّىزجبد وٍ‪١‬ب ‪٘ٚ‬ذا إْ ٌُ ‪٠‬ىٓ غ‪١‬ش ِّىٓ ف‪١ٌ ٛٙ‬ظ ِزبزب ٌٍدّ‪١‬غ ‪ٚ‬دٌه‬
‫ٌٍصؼ‪ٛ‬ثخ اٌز‪ ٟ‬رفشظ‪ٙ‬ب ٘ذٖ اٌؽش‪٠‬مخ ‪ ٟ٘ٚ ‬الرٕفغ ف‪٘ ٟ‬ذٖ اٌسبٌخ ‪ API hoking‬الْ اٌّىزجبد اٌز‪ٟ‬‬
‫ٔزؼبًِ ِؼ‪ٙ‬ب خذ ظخّخ ‪.‬‬
‫لذ ‪ّ٠‬ىٓ اعزغالٌ‪ٙ‬ب ِغ ِىزجبد اٌجشاِح اٌصغ‪١‬شح اٌز‪ ٟ‬رسز‪ ٞٛ‬ػٍ‪ ٝ‬ثؼط اٌذ‪ٚ‬اي ِٓ اخً ػًّ ٘‪ٛ‬ن ٌجشٔبِح ِؼ‪. ٓ١‬‬

‫‪2-API function redirection via IAT patch.‬‬


‫‪ -2‬إػبدح ر‪ٛ‬خ‪ ٗ١‬ثبٌزؼذ‪ ً٠‬ػٍ‪ ٝ‬خذ‪ٚ‬ي ‪IAT‬‬

‫‪ .1‬خذ‪ٚ‬ي ‪IAT‬‬
‫وّب ٔؼٍُ فبْ د‪ٚ‬اي ‪ API‬رى‪ِ ْٛ‬غ اٌ‪ٕ٠ٛ‬ذ‪ٚ‬ص ‪١ٌٚ‬ظ ِغ اٌجشٔبِح ‪ ٚ‬اٌجشٔبِح ‪٠‬م‪ َٛ‬ثؼٍّ‪١‬خ اعز‪١‬شاد ٌ‪ٙ‬ذٖ اٌذ‪ٚ‬اي‬
‫ِٓ ِىزجبد اٌشثػ اٌذ‪ٕ٠‬بِ‪١‬ى‪ ٟ‬اٌّ‪ٛ‬خ‪ٛ‬دح ف‪ٍِ ٟ‬فبد اي ‪. system‬‬
‫ٌى‪٠ ٟ‬زُ اعزخذاَ ٘ذٖ اٌذ‪ٚ‬اي ف‪ ٟ‬اٌجشٔبِح ‪٠‬زُ اٌزصش‪٠‬ر ث‪ٙ‬ب ثؼذ دفغ ل‪ ُ١‬اٌجبساِزشاد اال اْ ٘ذا اٌزصش‪٠‬ر ف‪ ٟ‬اٌسم‪١‬مخ‬
‫ٌ‪١‬ظ ع‪ ٜٛ‬لفضح إٌ‪ ٝ‬داخً اٌّىزجخ اٌز‪ ٟ‬رسز‪ ٞٛ‬ػٍ‪ ٝ‬اٌذاٌخ ‪ٚ‬خّ‪١‬غ اٌجشاِح اٌز‪ ٟ‬رض‪ٚ‬د ثدذا‪ٚ‬ي ‪ IAT‬أرٕبء ػٍّ‪١‬خ‬
‫و‪ِٛ‬جٍشٓ (‪ )COMPILATION‬زز‪٠ ٝ‬زّىٓ األخ‪١‬ش ِٓ اٌ‪ٛ‬ص‪ٛ‬ي اٌ‪ ٝ‬اٌؼٕب‪ ٓ٠ٚ‬اٌسم‪١‬م‪١‬خ ٌذ‪ٚ‬اي داخً اٌّىزجبد‬
‫‪ِٚDLL‬دّ‪ٛ‬ع ٘ذٖ اٌمفضاد ‪ّ٠‬ثً ‪IAT‬‬
‫‪ ٟ٘ٚ‬ػبدح ِب رى‪ ْٛ‬ف‪ ٟ‬آخش اٌجشٔبِح أرٕبء اٌزٕم‪١‬ر وّب ‪ٛ٠‬ظر اٌشىً اٌزبٌ‪: ٟ‬‬

‫‪ ٚ‬ثبٌزبٌ‪ ٟ‬فبْ وً ٔذاء ٌذاٌخ ‪ّ٠ API‬ش ِٓ خذ‪ٚ‬ي ‪ IAT‬لجً أْ ‪٠‬زُ اعزذػبء ٘ذٖ اٌذ‪ٚ‬اي‪.....‬‬

‫‪ .2‬اعزغالي ‪IAT‬‬

‫أظٓ أْ اٌؽش‪٠‬مخ ‪ٚ‬اظسخ وّب أعٍفذ اٌزوش فبْ ٌىً داٌخ لفضح ف‪ ٚ IAT ٟ‬ثبٌزبٌ‪ٌ ٟ‬ؼًّ ٘‪ٛ‬ن ٌ‪ٙ‬ذٖ اٌذاٌخ‬
‫‪٠‬ىف‪ ٟ‬رغ‪١١‬ش ٘ذٖ اٌمفضح ِٓ اٌؼٕ‪ٛ‬اْ اٌسم‪١‬م‪ ٟ‬إٌ‪ ٝ‬ػٕ‪ٛ‬اْ اٌى‪ٛ‬د اٌّشاد رٕف‪١‬زٖ ( ع‪ٍٙ‬خ أٌ‪١‬ظ وزاٌه ‪.)‬‬
‫إال أْ ٘ذٖ اٌؽش‪٠‬مخ ٘‪ ٟ‬األخش‪١ٌ ٜ‬غذ ػٍّ‪١‬خ و‪ٙٔٛ‬ب ال رّىٓ ِٓ ػًّ ٘‪ٚٛ‬ن إال ٌٍذ‪ٚ‬اي اٌز‪ ٟ‬ر‪ٛ‬خذ‬
‫ة ‪........... IAT‬‬

‫‪3-API function redirection via Inline Patch.‬‬


‫‪ -3‬إػبدح ر‪ٛ‬خ‪ ٗ١‬ثبٌزؼذ‪ ً٠‬اٌّجبشش‬

‫رشرىض ٘زٖ اٌؽش‪٠‬مخ ػض‪٠‬ض‪ ٞ‬اٌمبسئ ػٍ‪ ٝ‬رؼذ‪ِ ً٠‬جبشش ٌٍذاٌخ اٌّشاد ػًّ ٘‪ٛ‬ن ٌ‪ٙ‬ب أ‪ِ ٚ‬ب‪٠‬غّ‪ ٝ‬ثجبرش‬
‫ز‪١‬ذ ٔم‪ َٛ‬ثزغ‪١١‬ش األ‪ٚ‬اِش األ‪ ٌٝٚ‬ف‪ ٟ‬ف‪ ٟ‬اٌذاٌخ ِٓ اخً ر‪ٛ‬خ‪ ٗ١‬ع‪١‬ش اٌجشٔبِح ٔس‪ ٛ‬اٌى‪ٛ‬د اٌز‪ ٞ‬اخزشٔبٖ‬

‫‪2‬‬
‫رُ إػبدح اٌزسىُ ٌٍجشٔبِح ‪ِّٚ‬ب ‪٠‬جذ‪ ٚ‬أٔ‪ٙ‬ب اوزش ظّبٔب ِٓ إٌ‪ٛ‬ػ‪ ٓ١‬األ‪ٚ‬ي ‪ٚ‬اٌزبٔ‪ٚ ٟ‬األع‪ ًٙ‬ثؽج‪١‬ؼخ اٌسبي‬
‫ٌذا عأسوض ػٍ‪ٙ١‬ب ف‪ِ ٟ‬ب رجم‪ ِٓ ٝ‬اٌذسط الْ اعزؼّبالر‪ٙ‬ب ِزؼذدح ف‪ِ ٟ‬دبي اٌ‪ٕٙ‬ذعخ اٌؼىغ‪١‬خ ف‪ّ١‬ىٓ‬
‫اعزؼّبٌ‪ٙ‬ب ِٓ اخً ػًّ ‪ٌ inline patch‬جشرىزش ِب ‪ٚ‬اْ شبء اهلل ع‪ٛ‬ف ٔأر‪ ٟ‬ػٍ‪ ٝ‬رؽج‪١‬ك ٌ‪ٙ‬ذا ف‪ٟ‬‬
‫فه زّب‪٠‬خ ازذ اٌجشاِح ‪.‬‬
‫وّب لٍٕب ِٓ لجً ‪٠‬دت ‪ٚ‬ظغ لفضح رُ إػبدح اٌزسىُ ٌٍجشٔبِح ثؼذ ػٍ‪ ٝ‬إٌس‪ ٛ‬اٌّج‪ ٓ١‬ف‪ ٟ‬اٌشعُ أعفٍٗ‪:‬‬

‫‪ ٚ‬الثذ أه ثؼذ ِؼب‪ٕ٠‬زه ٌٍشعُ ارعسذ اٌفىشح اوزش ٌىٓ ٕ٘بن ثؼط األش‪١‬بء اٌز‪ِ ٟ‬بصاٌذ ٌُ ر‪ٛ‬ظر‪:‬‬

‫‪-1‬كيفيت إيجاد عىىان اندانت انمراد عمم هىك نها ؟‬

‫ِٓ اخً إ‪٠‬دبد ػٕ‪ٛ‬اْ اٌذاٌخ اٌز‪ٔ ٟ‬ش‪٠‬ذ اٌؼًّ ػٍ‪ٙ١‬ب ٕ٘بن ؼش‪٠‬مزبْ أِب اٌؽش‪٠‬مخ األ‪ ٌٝٚ‬فزشرىض ػٍ‪ٝ‬‬
‫اعزؼّبي اٌذاٌخ ‪ ِٓ GetModuleHandle‬خٍت ِمجط اٌجشٔبِح رُ اعزؼّبي اٌذاٌخ‪GetProcAdresss‬‬
‫‪٘ٚ‬ذٖ اٌؽش‪٠‬مخ ال رٕفغ دائّب الْ اٌذاٌخ ‪ GetModuleHandle‬ال رؼًّ إال إْ وبٔذ اٌّىزجخ ِسٍّخ‬
‫‪ِٚ‬ؼٕ‪ٔٛ‬خ ف‪ِٕ ٟ‬ؽمخ اٌؼٕ‪ٔٛ‬خ ف‪ ٟ‬اٌزاوشح ‪ٚ‬اْ ٌُ ‪٠‬ىٓ ف‪ ٟٙ‬رؼ‪ٛ‬د ثم‪ّ١‬خ ‪ ٚ NULL‬ثبٌزبٌ‪ ٟ‬ف‪١ٌ ٟٙ‬غذ‬
‫ػٍّ‪١‬خ ف‪ ٟ‬زبٌزٕب ٌزا ع‪ٛ‬ف ٍٔدأ إٌ‪ ٝ‬اٌؽش‪٠‬مخ اٌثبٔ‪١‬خ ‪ ٚ‬اٌز‪ ٟ‬رزّثً ف‪ ٟ‬اعزؼّبي اٌذاٌخ ‪LoadLibrary‬‬
‫ِٓ اخً خٍت ِمجط ٍِف ‪( DLL‬ع‪ٛ‬اء وبْ ِسّال أَ ٌُ ‪٠‬ىٓ ) رُ ٔغزؼ‪ ٓ١‬ة ‪ِٓ GetProcAdresss‬‬
‫اخً خٍت ػٕ‪ٛ‬اْ اٌذاٌخ‪ ( .‬زٍذ اٌّشىٍخ األ‪) ٌٝٚ‬‬
‫‪-2‬كيفيت ايجاد مكان وضع انقفزة وحى انهىك ؟‬

‫ِٓ اخً ظّبْ رسمك اٌمفضح ٔس‪ ٛ‬اٌ‪ٛٙ‬ن ِ‪ّٙ‬ب وبٔذ اٌظش‪ٚ‬ف ع‪ٛ‬ف ٔ‪ٛ‬ظف اٌمفضح اٌغ‪١‬ش ششؼ‪١‬خ (الرشرجػ‬
‫ثششغ ِغجك ن ‪ test‬ا‪ٚ (cmp ٚ‬اٌز‪ ٟ‬رسزً ‪ 5‬ثب‪٠‬ذ ِٓ اٌذاوشح وّب ر‪ٛ‬ظر اٌص‪ٛ‬سح ‪:‬‬

‫‪3‬‬
‫ٔالزظ ف‪ ٟ‬رّز‪ ً١‬اٌ‪١ٙ‬ىظ ‪ E9‬ربثزخ ف‪ ٟ‬وً اٌسبالد ث‪ّٕ١‬ب اٌؼٕ‪ٛ‬ا‪ ٓ٠‬رزغ‪١‬ش ادْ ِٓ اٌ‪ٛ‬اظر اْ رّز‪ ً١‬اٌمفضح‬
‫ف‪ ٟ‬اٌ‪ٙ‬ىظ ٘‪ E9 xxxxxٛ‬ز‪١‬ذ ‪ xxxxx‬رّزً ػٕ‪ٛ‬اْ اٌمفض ‪ ٚ‬ف‪ ٟ‬زبٌزٕب ثذا‪٠‬خ اٌ‪ٛٙ‬ن ‪.‬‬
‫ِٓ اخً ا‪٠‬دبد ػٕ‪ٛ‬اْ اٌمفض ٔس‪ ٛ‬داٌخ االػزشاض ‪ٚ‬اٌ‪ٛٙ‬ن عٕسزبج اٌ‪ِ ٝ‬ؼشفخ ػٕ‪ٛ‬اْ ‪ٚ api‬لذ عجك‬
‫اٌزؼشض اٌ‪ ٝ‬و‪١‬ف‪١‬خ رٌه عبثمب رُ ٔع‪١‬فٗ اٌ‪ ٝ‬خّظ ثب‪٠‬زبد اٌخبصخ ثبٌمفضح ٌٕؽشذ اٌىً ِٓ ػٕ‪ٛ‬اْ داٌخ‬
‫االػزشاض ا‪ ٚ‬اٌ‪ٛٙ‬ن ‪ٚ‬ثبٌزبٌ‪ٔ ٟ‬ىزت اٌؼاللخ اٌزبٌ‪١‬خ ‪:‬‬

‫)‪JumpAdress = hookAdress - (API adress +5‬‬


‫مهحىظت‬
‫يمكه استعمال انكىد انتاني عىض انقفزة انمباشرة ‪:‬‬
‫‪push xxxxx‬‬
‫‪ret‬‬
‫فهى اكتر تمىيها مه االول غير اوه يحتم اكتر مه خمست بايتاث (‪ 6‬بايتاث )‪.‬‬

‫‪-3‬كيفيت تىفيد انهىك واعادة انتحكم نهبروامج ؟‬


‫أ‪-‬رٕف‪١‬ذ اٌ‪ٛٙ‬ن ‪:‬‬

‫ثّب إٔب ‪ٚ‬ظؼٕب لفضح ف‪ ٟ‬ا‪ٚ‬ي رؼٍ‪ّ١‬بد ‪API‬فبْ اٌجشٔبِح ع‪١‬ز‪ٛ‬خٗ ِجبششح ٔس‪ ٛ‬اٌ‪ٛٙ‬ن ‪ٕ٠ ٚ‬فذ اال اْ اٌغؤاي‬
‫اٌذ‪٠ ٞ‬ؽشذ ٔفغٗ ٘‪ ٛ‬و‪١‬ف‪١‬خ اػبدح اٌزسىُ ٌٍجشٔبِح ‪ٚ‬وبْ ش‪١‬ئب ٌُ ‪٠‬مغ ؟‬
‫ال رمٍك اٌسً ِ‪ٛ‬خ‪ٛ‬د ‪:‬‬
‫اْ اٌمفضح اٌز‪ ٟ‬رٕفذ رسزً ِىبْ اٌى‪ٛ‬د االصٍ‪ٚ ٟ‬ثبٌزبٌ‪ٌ ٝ‬زٕف‪١‬ذ اٌى‪ٛ‬د االصٍ‪ٚ ٟ‬خت ػٍ‪ٕ١‬ب ا‪ٚ‬ال زفظ اٌزؼٍ‪ّ١‬بد االصٍ‪١‬خ‬
‫رُ اٌشخ‪ٛ‬ع اٌ‪ِ ٝ‬ىبٔ‪ٙ‬ب ‪ٚ‬رٕف‪١‬ذ٘ب ثؼذ رٕف‪١‬ذ اٌ‪ٛٙ‬ن ‪ٚ‬دٌه ػً إٌس‪ ٛ‬االر‪: ٟ‬‬

‫‪ : Jmp1 ‬رّزً اٌمفضح اال‪ٔ ٌٝٚ‬س‪ ٛ‬داٌخ اٌ‪ٛٙ‬ن ا‪ ٚ‬االػزشاض‪.‬‬


‫‪ : Jmp2 ‬رّزً اٌمفضح اٌزبٔ‪١‬خ ٔس‪ ٛ‬داٌخ ‪ API‬اٌز‪ ٟ‬رُ ػًّ ٘‪ٛ‬ن ٌ‪ٙ‬ب ‪.‬‬

‫ة‪-‬زفظ اٌزؼٍ‪ّ١‬بد االصٍ‪١‬خ‪:‬‬


‫ِٓ اخً زفظ اٌزؼٍ‪ّ١‬بد االصٍ‪١‬خ ع‪ٛ‬ف ٔغزؼًّ ‪ٚ STUB‬دٌه ثبالػزّبد ػٍ‪ ٝ‬اٌذاٌخ ‪RtlMoveMemory‬‬

‫‪4‬‬
‫ز‪١‬ذ ع‪١‬زُ رّش‪٠‬ش اٌى‪ٛ‬د ثؼذ رغ‪١١‬ش ‪ٚ‬ظؼ‪١‬خ اٌسّب‪٠‬خ ثبعزؼّبي اٌذاٌخ ‪VirtualProtect‬‬

‫مهحىظت ‪2‬‬

‫ف‪ ٟ‬اٌذاٌخ ‪ٕ٠ virtualProtect‬جغ‪ ٟ‬ػذَ اّ٘بي اٌجبساِزش االخ‪١‬ش الٔٗ ِ‪ ُٙ‬خذا ‪...‬‬

‫ِٓ اٌّالزظ ف‪ ٟ‬اٌذاٌز‪ ٓ١‬اٌّغزؼٍّز‪ ٓ١‬أٗ ‪٠‬ز‪ٛ‬خت ادخبي اٌسدُ إٌّبعت ٌٍى‪ٛ‬د زز‪ ٝ‬رزُ اٌؼٍّ‪١‬خ ثٕدبذ ادا وٕب‬
‫ٔؼشف اٌذاٌخ فغٕسغت ز‪١‬ض ثشاِزشار‪ٙ‬ب ‪ٌٚ‬ىٓ ادا وبْ االِش ‪٠‬زؼٍك ثؼذح د‪ٚ‬اي ا‪ ٚ‬داٌخ رزغ‪١‬ش ثبساِزشار‪ٙ‬ب‬
‫فغٕسزبج اٌ‪ ٝ‬اٌ‪١‬خ ٌسغبة زدُ اٌى‪ٛ‬د ‪.‬‬
‫٘زا ِب ر‪ٛ‬فشٖ ٌٕب ػذح ِىزجبد ِز‪ٛ‬اخذح ػٍ‪ ٝ‬إٌذ اٌّف‪٠ َٛٙ‬صؽٍر ػٍ‪ ٗ١‬ة ‪Length Disassembler Engine‬‬
‫‪ ٟ٘ٚ‬ػجبسح ػٓ اٌ‪١‬بد رم‪ َٛ‬ثسغبة زدُ اٌى‪ٛ‬د ‪ ِٓٚ‬اُ٘ االِزٍخ ٔدذ ‪ Mlde32 ٚ catchy32‬ثبالظبفخ‬
‫اٌ‪ LDE64 ٝ‬ثبٌٕغجخ اٌ‪ٌ ٝ‬غخ االعّجٍ‪. ٟ‬‬
‫اِب ٌؼشبق ‪ C++‬ا‪ C ٚ‬ف‪ٕٙ‬بن ‪٠ L.D.E‬ذػ‪ ٚ ZOMBIE ٝ‬غ‪١‬شٖ وز‪١‬ش ‪....‬‬
‫ف‪ ٟ‬اٌّشفمبد ردذ اٌؼذ‪٠‬ذ ِٕ‪ٙ‬ب ‪.‬‬
‫ج‪ -‬زغبة ‪ ( Jmp2‬اٌؼ‪ٛ‬دح اٌ‪ API ٝ‬االصٍ‪١‬خ) ‪:‬‬

‫ثّب أٗ رُ اٌزؼذ‪ ً٠‬ػٍ‪ api ٝ‬ثبظبفخ ‪ٚ stub‬خّظ ثب‪٠‬زبد اٌخبصخثبٌمفضح فبٔٗ ِٓ اخً اٌشخ‪ٛ‬ع اٌ‪ ٝ‬اٌذاٌخ االصٍ‪١‬خ‬
‫‪ٚ‬خت اصاٌخ اٌزؼذ‪٠‬الد أ‪ ٚ stub ٞ‬اٌمفضح ػٍ‪ ٝ‬إٌس‪ ٛ‬اٌزبٌ‪: ٟ‬‬

‫)‪Jmp2 = API adress - ( Stub +5‬‬

‫اٌسّذ هلل زٍذ خّ‪١‬غ اٌّشبوً ِبدا رجم‪ٝ‬؟ ُّّ٘ ‪ٔ ......‬ؼُ اٌزؽج‪١‬ك أزمً اٌ‪ ٝ‬اٌذسط اٌفالش‪ ٟ‬اٌّشفك‬
‫عزدذ ِب رش‪٠‬ذٖ ‪....‬‬

‫‪5‬‬

You might also like