بسم الله الرحمن الرحيم و الصلاة على أشرف المرسلين محمد ابن عبد الله الصادق الأمين اما بعد: متطلبات الدرس: - يتطلب فهم مباديء لغة الأسمبلي والتعامل مع البرامج عن طريق برامج التنقيح و بالأخص OllyDbg. درسنا اليوم يتحدث عن التحليل الفيروسات و التروجانات و سنبدأ إن شاء الله بــ: Trojan-Dropper قبل أن أبدا في الدرس يجب ان أشرح بعض الأشياء المهمة التي يجب ان يفهمها القاريء لكي يستوعب الدرس. دوال API: واجهات برمجة التطبيقات API :Application Programming Interface هي مجموعة من الدوال أو الوظائف موجودة في ملفات ربط ديناميكية DLL يمكن للمبرمج إستخدامها في برامجه وتتيح هذه الأخير الإستفادة من وظائف نظام التشغيل ويمكن إستدعائها من برامج كثيرة وفي نفس الوقت. وهذه الدوال مقسمة على ملفات الــ(DLL) كل على حسب وظيفته مثلا : دوال Process ,Threading تجدها في Kernel32.dll دوال التعامل مع المستخدم من رسائل و سائط ، تجدها في User32.dll دوال الرسم تجدها في GDI32.dll ما هو Trojan Dropper: هي عبارة عن برامج تقوم بدمج التروجان مع برنامج اخر لأغراض أهمها خداع المستخدم ثم بعد ذلك التطفل و التجسس على جهازه. وعلى سبيل المثال يقوم هذا النوع من البرمجيات بدمج تروجان مع برنامج ما كما هو مثالنا اليوم دمج حصان طروادة مع برنامج يدعون انه يتجسس على المايك الخاص بالطرف الأخر في محادثة الياهو. نبدا بعون الله. البرنامج المراد تحليله موجود في المرفقات. Yahoo Micإسم البرنامج نفتح البرنامج بـــPEid كما هو موضح في الصورة البرنامج مضغوط بال MEW 11 1.2 ولن نقوم بفكه ببرنامج فك الضغط الخاص به بل سنقوم بفكه بأنفسنا يعني يدويا(طبعا ليس بذلك القدر من الفك لكن عملية بسيطة جدااا) - درس فك الضغط هو عبارة عن فيديو . سوف تجـدون كل الأدوات بنهاية الموضوع ملاحظة اخرى ربما يشكل عليك و انت تقرأ الكود في Olly فإذا نزلت للأسفل وجدت اكواد غير مفهومة و تجد كلمة FSG و عبارات اخرى ربما يتبادر الى ذهنك أن عملية فك الضغط ناقصة. اقول لك ستجد الإجابة بعد قليل. أظن أن المهم شغلنا عن الأهم لا تخف ها قد عدنا. الأن سنتناول تحليل البرنامج بالتفصيل الممل لكي يتسنى لنا التعامل مع مثله مرة أخرى. إفتح ال Trojan Dropper المفكوك في Olly File<Open ستظهر لك هذه الصورة. هذا هو كود البرنامج الكامل. هذا البرنامج يتكون من مجموعة من دوال API اغلبها تخص القرائة و الكتابة من وإلى الملفات. هنالك شيء غيرب الم تلاحظه....البرنامج إعتمد على دوال أخرى خاصة بالقرائة و الكتابة من المفروض أنه يستعمل CreateFile و WriteFile لكنه إستعمل دوال أخرى. من الممكن أن السبب هو أن المبرمج اراد أن يجعل لبرنامجه سماحية اكثر في أنظمة أخرى أو ان الأمر منوط به والبيئية الذي يجيد البرمجة فيها او المترجم الذي يستخدمه. من الصورة نجد أن البرنامج يستدعي دالة lcreat_ وهذه الدالة مخصصة لأنظمة 16-bit و تعمل على انظمة 32 Bit وتقبلها الدالة CreateFile في 32 bit تأخذ هذه الدالة 2 برامتر:
1-Attribute=خصائص إنشاء الملف2-FileNmae=مسار الملفالبارمتر الأولى لها أربع حالات:0=Normalقبل للقرائة و الكتابة و التعديل و غير مخفي.1=Read Onlyللقرائة فقط.2=Hidenمخفي.4=Systemملف نظام و هو يشمل جميع المواصفات ما عدى Normal
1-BufSize=حجم البايانات المراد كتابتها.2-Buffer=المكان الذي يحتوي البيانات المراد كتابتها في الملف.3-hfile=مقبض الملف أو Object.
isShown(ShowCmd)=وضعية الظهور وبها عدة حالات منهاSW_HIDE SW_MAXIMIZE.SW_MINIMIZEوأظن أن 5 هي في حالة SW_HIDE.DefDir=المجلد الإفتراضي للبرنامج.Parameters=من الممكن ان تكون CmdLine فمثلا إذا كنت تتعامل مع برنامج ما و هذا البرنامج يعتمد في تشغيله على CommandLine سوف تضعها هنالك.FileName=واضح من اسمه.Operation=العملية المطبقة على الملف و تأخذ 3 حالات:Open: لفتح ملف تنفيذيPrint: لطبع الملف وهذه الخاصية بالمستندات document fileExplore: وتستعمل هذه الخاصية مع المجلدات.[color="#0000FF"]الدالة ExitProcess[/color]تقوم بإغلاق الملف ولها بارميتر واحد:ExitCode=إذاكنت مبرمج اسمبلي إجلها 1.
PUSH 0 //دفع البارميتر 0 للدالةPUSH Unpacked.00463495 //دفع مسار الدروبر للمكدسCALL DWORD PTR DS:[<&ke rnel32._lcreat>] //إستدعاء الدالة لإنشاء الملفMOV EBX,EAX //كما قلنا مسبقا الدالة الاخير تخزن المقبض في المسجل //EAX //تقوم هذه التعليمة بنقل المقبض من //EAX to EBX//لكي يتم إستخدامها بعد قليلPUSH 62449 //دفع حجم البفر للمكدس القيمة تكون بالهكسPUSH Unpacked.0040104C // دفع عنوان البفر المراد كتابتها أي الدروبر الثاني //ntlcs.exePUSH EBX //إستعمال المقبض قي عملية الكتابة وهذا ما يفسر التعليمة فوقCALL DWORD PTR DS:[<&ke rnel32._hwrite>] //إستدعاء دالة الكتابة//لن أكمل كل شيء راح يكون واضح دفع و إستدعاء دفع و إستدعاء.PUSH EBXCALL DWORD PTR DS:[<&kernel32._lclose>]PUSH 5PUSH 0PUSH 0PUSH Unpacked.00463495PUSH Unpacked.00401047PUSH 0CALL DWORD PTR DS:[463537]PUSH 0CALL DWORD PTR DS:[<&kernel32.ExitProces]
aoxdof98=kernel32IfeyoBkdnfo=CloseHandleIxok~oLcfoK=CreateFileAMo~LcfoYcpo=GetFileSizeMo~^ogzZk~bK=GetTempPathAXoknLcfo=ReadFileYo~LcfoZecd~ox=SetFilePointer]cdOroi=WinExec]xc~oLcfo=WriteFile
BufSize=حجم مسار الملف التنفيذيPathBuffer=مؤشر لعنوان المسارhModul=في حالتنا الموديل هو null و في هذه الحالة سيتم إرجاع مسار الملف التنفيذي الذي طلب دالة GetModuleFileName
1 TEST 1 = 11 TEST 0 = 00 TEST 1 = 00 TEST 0 = 0