بتـــــاريخ : 2/26/2011 6:12:21 AM
الفــــــــئة
  • الحـــــــــــاسب
  • التعليقات المشاهدات التقييمات
    0 1927 0


    التحليل الشامل للبرامج الضارة بالكمبيوتر -trojan Dropper- تحليل مفصل لأحد أنواع Malware

    الناقل : elmasry | العمر :42 | الكاتب الأصلى : DATA_SNIPER | المصدر : www.arabteam2000-forum.com

    كلمات مفتاحية  :

    بسم الله الرحمن الرحيم و الصلاة على أشرف المرسلين محمد ابن عبد الله الصادق الأمين اما بعد:
    متطلبات الدرس:
    - يتطلب فهم مباديء لغة الأسمبلي والتعامل مع البرامج عن طريق برامج التنقيح و بالأخص OllyDbg.
    درسنا اليوم يتحدث عن التحليل الفيروسات و التروجانات و سنبدأ إن شاء الله بــ:
    Trojan-Dropper
    قبل أن أبدا في الدرس يجب ان أشرح بعض الأشياء المهمة التي يجب ان يفهمها القاريء لكي يستوعب الدرس.
    دوال API:
    واجهات برمجة التطبيقات
    API :Application Programming Interface
    هي مجموعة من الدوال أو الوظائف موجودة في ملفات ربط ديناميكية DLL يمكن للمبرمج إستخدامها في برامجه وتتيح هذه الأخير الإستفادة من وظائف نظام التشغيل
    ويمكن إستدعائها من برامج كثيرة وفي نفس الوقت.
    وهذه الدوال مقسمة على ملفات الــ(DLL) كل على حسب وظيفته
    مثلا : دوال Process ,Threading تجدها في Kernel32.dll
    دوال التعامل مع المستخدم من رسائل و سائط ، تجدها في User32.dll
    دوال الرسم تجدها في GDI32.dll
    ما هو Trojan Dropper:
    هي عبارة عن برامج تقوم بدمج التروجان مع برنامج اخر لأغراض أهمها خداع المستخدم ثم بعد ذلك التطفل و التجسس على جهازه.
    وعلى سبيل المثال يقوم هذا النوع من البرمجيات بدمج تروجان مع برنامج ما كما هو مثالنا اليوم دمج حصان طروادة مع برنامج يدعون انه يتجسس على المايك الخاص بالطرف الأخر في محادثة الياهو.
    نبدا بعون الله.
    البرنامج المراد تحليله موجود في المرفقات.
    Yahoo Micإسم البرنامج
    نفتح البرنامج بـــPEid
    Posted Image
    كما هو موضح في الصورة البرنامج مضغوط بال MEW 11 1.2 ولن نقوم بفكه ببرنامج فك الضغط الخاص به بل سنقوم بفكه بأنفسنا يعني يدويا(طبعا ليس بذلك القدر من الفك لكن عملية بسيطة جدااا) -
    درس فك الضغط هو عبارة عن فيديو .
    سوف تجـدون كل الأدوات بنهاية الموضوع
    ملاحظة اخرى ربما يشكل عليك و انت تقرأ الكود في Olly فإذا نزلت للأسفل وجدت اكواد غير مفهومة و تجد كلمة FSG و عبارات اخرى ربما يتبادر الى ذهنك أن عملية فك الضغط ناقصة.
    اقول لك ستجد الإجابة بعد قليل.
    أظن أن المهم شغلنا عن الأهم لا تخف ها قد عدنا.
    الأن سنتناول تحليل البرنامج بالتفصيل الممل لكي يتسنى لنا التعامل مع مثله مرة أخرى.
    إفتح ال Trojan Dropper المفكوك في Olly
    File<Open
    ستظهر لك هذه الصورة.
    Posted Image
    هذا هو كود البرنامج الكامل.
    هذا البرنامج يتكون من مجموعة من دوال 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

    ترجع الدالة lcreat_ مقبض الملف وتخزنه في المسجل EAX
    الدالة _lwrite
    ويقابلها WriteFile في 32bit
    تأخذ هذه الدالة 3 بارميتر:
    1-BufSize=حجم البايانات المراد كتابتها.
    2-Buffer=المكان الذي يحتوي البيانات المراد كتابتها في الملف.
    3-hfile=مقبض الملف أو Object.

    الدالة lclose_
    تقوم هذه الدالة بإغلاق الملف بعد اكمال عمليات الإنشاء و القرائة.
    الدالة ShelExecute
    هذه الدالة تابعة لأنظمة 32bit
    تقوم ببعض العمليات منها تشغيل الملفات التنفيذية.
    تأخذ 6 بارميتر:
    isShown(ShowCmd)=وضعية الظهور وبها عدة حالات منها
    SW_HIDE
    SW_MAXIMIZE.
    SW_MINIMIZE
    وأظن أن 5 هي في حالة SW_HIDE.
    DefDir=المجلد الإفتراضي للبرنامج.
    Parameters=من الممكن ان تكون CmdLine فمثلا إذا كنت تتعامل مع برنامج ما و هذا البرنامج يعتمد في تشغيله على CommandLine سوف تضعها هنالك.
    FileName=واضح من اسمه.
    Operation=العملية المطبقة على الملف و تأخذ 3 حالات:
    Open: لفتح ملف تنفيذي
    Print: لطبع الملف وهذه الخاصية بالمستندات document file
    Explore: وتستعمل هذه الخاصية مع المجلدات.
    [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.exe
    PUSH EBX   //إستعمال المقبض قي عملية الكتابة وهذا ما يفسر التعليمة فوق
    CALL DWORD PTR DS:[<&ke rnel32._hwrite>] //إستدعاء دالة الكتابة
    //لن أكمل كل شيء راح يكون واضح دفع و إستدعاء دفع و إستدعاء.
    PUSH EBX
    CALL DWORD PTR DS:[<&kernel32._lclose>]
    PUSH 5
    PUSH 0
    PUSH 0
    PUSH Unpacked.00463495
    PUSH Unpacked.00401047
    PUSH 0
    CALL DWORD PTR DS:[463537]
    PUSH 0
    CALL DWORD PTR DS:[<&kernel32.ExitProces]

    ماذا نستنتج من هذا كله:
    يقوم البرنامج بإنشاء Dropper ثاني بعد ذلك يقوم بكتابة الكود بداخله, انتظر ماذا قلنا فوق عن الأكواد المبهمة و عبارة FSG وووو هنا يتضح الأمر
    تلك الأكواد هي خاصة ب Dropper الثاني ntlcs.exe و اذا اكملت معنا ستجد أن البرنامج مضغوط بال FSG.
    تعلو سنلقي على الكود نظرة سريعة.
    كيف سنلفي عليه نظرة لا حظ هذه التعليمة.
    PUSH Unpacked.0040104C
    وهي القيمة التي دفع على شكل عنوان لمحتويات لل Dropper الثاني لدالة lwrite_ نذهب إليها، سنرى الموجود في الصورة.
    شاهد الصورة
    Posted Image
    ويبدا ب MZ بمذا تذكرك هذه العبارة اه تذكرة بمقدمة الملفات التنفيذية و هي إختصار لإسم مخترعها و هو Mark Zibikowsky.
    ثم يقوم بتشغيله في وضع الإخفاء ثم يغلق البرنامج.
    اذا اردت التعمق و التتبع اكثر انصحك أن تتوقف عند دالة lclose_ لأنك إذا اكملت سوف ترى ما لا يحمد عقباه.
    ماذا نفعل الأن......
    سنذهب لتحليل الدروبر الثاني و هو الأهم لأنه هو الذي يقوم بنشر السيرفر في جهاز الضحية + تشغيل برنامج YahooMic.
    نفحص البرنامج بال PEiD سنجده مضغوط بال FSG يجب عليك أن تستعمل الطريقة التي وضحتها في الفيديوا ولا تتعب نفسك بعمل Dump له واصل من هنالك وستكمل الدرس بشكل عادي.
    الدروبر الثاني مصمم بالدالفي.
    شاهد صورة ال Dropper في Olly
    Posted Image
    تمثل الصورة بداية الشيفرة الخاصة بال Dropper هل شاهدت تلك الطلاسم الموضوعة في إيطار ياترى ماهي و ماذا يفعل بها البرنامج.
    أعرف أن الامر يحيرك كما حيرني لكن الأمر وبكل بساطة هي عبارات مشفرة و مرمزة, ياترى ما هي تلك العبارات, لن أدخل في شرح كيفية فك هذه العبارات لأننا سنخرج عن سياق الموضوع وندخل في مجال فك خوارزمية التشفير الفعلية في الأسمبلي لذلك لقد قمت بإيجاد مكان الخوارزمية لكي يتسنى لك تحليلها.
    وإذاكنت تريد فك الخوارزمية انصحك بالبدا من هذا العنوان 00403FC5 والغوص في اعماق البرنامج ما بين Calls و Rets وانصحك ان تتبع كل Calls على حدى وان وجدت Calls أخرى ادخل إليها و أكمل التتبع منها بالتوفيق.
    هل اكملت فك الخوارزمية على كل حال إذا إختلط عليك الأمر إذهب إلى هذا العنوان 00402538 وستجد ما يسرك وإن اردت الحل خذ هذا العناون 00402572 هنا سيتم نقل الحرف المقابل لكل حرف مشفر إلى سلسلة نصية ما.
    على كل فك عن نفسك العناء فلقد اردت منك التعمق و التحليل لكي تتمرن على مثل هذه الأمور و اذا واجهتك مثل هذه الخوارزميات مرة اخرى ستعتاد على حلها.
    اذهب إلى هذا العنوان 00403FC5 وستجد تعليمة Call في ذلك العنوان تبدا عملية فك التشفير بعده تماما يوجد تعليمة MOV تقوم بنقل العبارة الأصلية من المكدس إلى المسجل EAX وتحتها العبارة المشفرة في المسجل ECX وهكذا مع كل العبارات المشفرة, أرأيتم بسيطة لكن لولا المعلومات الموجودة في الأعلى لما عرفت أن العبارة الموجودة في EAX هي نفسها الموجودة في ECX ولكنها مشفرة.
    طبعا إذا أردت رؤية الكلمة الأصلية و المشفرة في المسجلان EAX و ECX إذهب إلى عنوان Call المذكور في الأعلى و اضغط F7 ثم F8 وستراهما.
    وهذه قائمة بالعبارة المشفرة و كلماتها الأصلية:
    aoxdof98=kernel32
    IfeyoBkdnfo=CloseHandle
    Ixok~oLcfoK=CreateFileA
    Mo~LcfoYcpo=GetFileSize
    Mo~^ogzZk~bK=GetTempPathA
    XoknLcfo=ReadFile
    Yo~LcfoZecd~ox=SetFilePointer
    ]cdOroi=WinExec
    ]xc~oLcfo=WriteFile

    ارايتم البرنامج يهيأ هذه الدوال لعمل ما، دعونا نكمل لنعرف ما هو.
    الأن ضع نقطة توقف على العنوان التالي 004040D1 إضغط F9 سيتوقف Olly بعد روتين فك التشفير.
    شاهد معي الصورة
    Posted Image
    هل ترى تعليمة
    XOR EAX,EAX
    تعمل على تصفير المسجل EAX او بمعنى اخر تهيئته لإستقبال البيانات.
    هنالك بعدها مباشرة تعليمة Call ياترى ما ذا يوجد بداخلها تعالوا ندخل إليها ونقوم بتحليلها إضغط F7 ستجد نفسك هنا.
    Posted Image
    كما تشاهد في الصورة توجد هنالك دالة وحيدة فقط و هي GetModuleFileName
    تقوم هذه الدالة بإرجاع المسار الكامل للملف التنفيذي.
    تأخذ هذه الدالة 3 براميتر:
    BufSize=حجم مسار الملف التنفيذي
    PathBuffer=مؤشر لعنوان المسار
    hModul=في حالتنا الموديل هو null و في هذه الحالة سيتم إرجاع مسار الملف التنفيذي الذي طلب دالة GetModuleFileName

    نبدا بشرح التعليمات ,على كل حال, كل شيء واضح ولكن أشرح للتوضيح اكثر.
    شاهد الصورة
    Posted Image
    1-مجموعة من التعليمات تعمل على تهيئمة المسجلات بالقيم المناسبة ثم تليها تعليمة إتصال Call هذا الإتصال يقوم بطلب كود من ال Dropper يعمل على التحقق من بعض الشروط ثم تليها تعليمة Test المنطقية وكما تعلمنا من دروس الأسمبلي أن التعليمة المنطقية لها جدول حقيقة,وهو ممثل هنا:
    1 TEST 1 = 1
    1 TEST 0 = 0
    0 TEST 1 = 0
    0 TEST 0 = 0

    هذه التعليمة تؤثر على الرايات إذا كانت النتيجة من العملية المنطقية تساوي صفر يتم جعل قيمة ZF=0 و العكس صحيح.
    بعدها التعليمة JNZ ونعلم أن هذه التعليمة تتأثر بالراية ZF فإذا كان ZF=0 فإن التعليمة ستنفذ ويقفز البرنامج ولكن ESI يساوي 0 نطبق عليها العملية المنطقية فنجد انها تساوي 0 وبذلك سيتم جعل ZF=1 ولن يقفز البرنامج.
    2-التعليمات واضحة دفع البرارميتر للدالة ثم إستدعائها.
    تعليمات MOV الثلاثة بمثابة نقل المسار التابع للDropper من مسجل لمسجل لأغراض خاصة بالبرنامج.
    شاهد صورة المسجلات
    Posted Image
    بعد ذلك قفزة يليها الرجوع إلى ماكان عليه البرنامج من قبل.
    بعد هذا كله لن يكون الشرح بالتفصيل فيما يخص الدوال و التعليمات ستكون رؤس اقلام و سأترك لك حرية البحث و التنقيب عن الدوال في جوجل و اي سؤال انا موجود.
    شاهد هذه الصورة
    Posted Image
    هنا يقوم البرنامج بإنشاء مقبض لنفسه عن طريق الدالة CreateFileA
    ثم يقوم بتغير مؤشر القرائة عن طريق الدالة SetFilePointer ليبدا بقرائة نفسه وإستخراج المعلومات.
    الأن وبعد هذا كله الDropper يبدا بإستعمال خوارزمية لفك تشفير إسم البرنامجين ال Trojan و الياهو مايك عن طريق حلقة تكرارية كبيرة بها حلاقة تكرارية صغيرة .
    الحلقة التكرارية تدور 105 مرة و الحلقة التكرارية الكبير تدور مرتين مرة لبرنامج YahooMic ومرة ل Trojan.
    إذهب إلى العنوان التالي 00403C8C ضع نقطة توقف كالمعتاد, تتبع بالضغط على F8 إلى ان تصل إليها او قم بالضغط على F9 لتشغيل الدروبر وسيتوقف Olly عندها.
    إبدأ بالتتبع سترى بعض الدوال المعتاد عليها مثل ReadFile و Set FilePointer وتقوم تلك الدوال بقرائة Dropper و بدية استخراج البيانات الفعلية من اعماق البرنامج.
    واصل التتبع إلى أن تصل للعنان التالي 00403D04 هنا تبدأ عملية الفك.
    شاهد الصورة
    Posted Image
    بعد إكمال الحلقتين و إستخراج إسم البرنامجين إذهب ل هذا العنوان 00403D5C وستجد في بعض الدوال منها:
    GetSystemDirectoryA
    التي تقوم بإستخراج مسار system32 لديك لكي يقوم بنسخهما إلى هنالك.
    الأن هنالك حلقة تكرارية اخرى تقوم بفك شيفرة برنامج YahooMic وهي موجودة في العنوان التالي 00403E1C تتبعها كما كنا نفعل من قبل وانظر إلى الأسفل ستجد البيانات تتغير وفي تلك اللحظة يتم فك التشفير.
    لاحظ الصورة
    Posted Image
    بعد ذلك يستدعي دالة ShellExecuteA لتشغيل YahooMic واصل وشغل البرنامج لا ضير في تشغيله لن يصيبك شيء.
    الان مازال الـ Trojan لم يتم تشغيله وفك تشفيره
    بعد عملية فك تشفير YahooMic وتشغيله ويقوم ببعض التعليمات يقوم بإستخراج كلمة Server.exe وإستعمالاها في نفس الحلقة , الحلقة السابقة الذكر التي تقوم بفك شيفرة البرنامج.
    شاهد الصورة
    Posted Image
    Posted Image
    الصورة مكتوب بها الشرح كل شيء واضح أنصحك بعدم الإكمال من تلك الدالة ShellExecuteA لأنك ستوف تخترق بعد غضون ثواني -_-
    الأن هل تريد البرنامج إذهب وقم بنسخه من system32 و احذف Server.exe.
    وللعلم لقد حملت برنامج YahooMic المدموج مع ال Trojan من منتدى عربي الله يغفر لإخوانان ولما ترى مثل هذه التراهات تجد أن المستوى لهؤلاء الأشخاص مازال منحط.
    لقد تم إكمال الدرس بفضل من الله ومنة واسف على الشرح السريع في الأخير لأني اردت ترك العملية لكم لكي تبحثوا بأنفسكم.
    وأخيرا أرجو من الله أن ينفعنا بما علمنا و أن يزدنا علما.
    ما كان من خطأ فمني و من الشيطان و ما كان من توفيق فمن الله وحده .
    وارجوا من الإخوة تنبيهي باي خطا أو سهو في الموضوع.
    واختم كلامي بما بدات به اللهم صلي على سيدنا محمد و على اله وصحبه وسلم تسليما كثيرا سبحانك اللهم وبحمدك نشهد ان لا إله أنت نستغفرك ونتوب إليك.
    ملاحظة:
    لا تستغرب من ظهور تحذير من طرف Anti-Virus لأنك تتعامل مع Malware

    ntlcs=الدروبر الثاني
    yahoomic =البرنامج المدموج مع التروجان
    Unpacked=البرنامج بعد فك التشفير
    فيديو شرح طريقة فك التشفير بخاصية Trace Real Entry Point في OllyDBG
    Unpacking-MEW11 1.2.rar
     
    ملف مرفق(ملفات)
     
    • ملف مرفق  Unpacked.rar (722.4كيلو )
      عدد مرات التحميل : 798
    • ملف مرفق  yahoomic.rar (355.72كيلو )
      عدد مرات التحميل : 828
    • ملف مرفق  ntlcs.rar (354.06كيلو )
      عدد مرات التحميل : 835

    كلمات مفتاحية  :

    تعليقات الزوار ()