الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

التحليل الشامل للبرامج الضارة بالكمبيوتر -trojan Dropper-

بدأه DATA_SNIPER في 5 سبتمبر 2008 · 11 رد · 9,489 مشاهدة · في قسم أمن المعلومات العام
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

بسم الله الرحمن الرحيم و الصلاة على أشرف المرسلين محمد ابن عبد الله الصادق الأمين اما بعد:

متطلبات الدرس:

- يتطلب فهم مباديء لغة الأسمبلي والتعامل مع البرامج عن طريق برامج التنقيح و بالأخص OllyDbg.

درسنا اليوم يتحدث عن التحليل الفيروسات و التروجانات و سنبدأ إن شاء الله بــ:

Trojan-Dropper

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

دوال API:

واجهات برمجة التطبيقات

API :Application Programming Interface

هي مجموعة من الدوال أو الوظائف موجودة في ملفات ربط ديناميكية DLL يمكن للمبرمج إستخدامها في برامجه وتتيح هذه الأخير الإستفادة من وظائف نظام التشغيل

ويمكن إستدعائها من برامج كثيرة وفي نفس الوقت.

وهذه الدوال مقسمة على ملفات الــ(DLL) كل على حسب وظيفته

مثلا : دوال Process ,Threading تجدها في Kernel32.dll

دوال التعامل مع المستخدم من رسائل و سائط ، تجدها في User32.dll

دوال الرسم تجدها في GDI32.dll

ما هو Trojan Dropper:

هي عبارة عن برامج تقوم بدمج التروجان مع برنامج اخر لأغراض أهمها خداع المستخدم ثم بعد ذلك التطفل و التجسس على جهازه.

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

نبدا بعون الله.

البرنامج المراد تحليله موجود في المرفقات.

Yahoo Micإسم البرنامج

نفتح البرنامج بـــPEid

1.png

كما هو موضح في الصورة البرنامج مضغوط بال MEW 11 1.2 ولن نقوم بفكه ببرنامج فك الضغط الخاص به بل سنقوم بفكه بأنفسنا يعني يدويا(طبعا ليس بذلك القدر من الفك لكن عملية بسيطة جدااا) -

درس فك الضغط هو عبارة عن فيديو .

سوف تجـدون كل الأدوات بنهاية الموضوع

ملاحظة اخرى ربما يشكل عليك و انت تقرأ الكود في Olly فإذا نزلت للأسفل وجدت اكواد غير مفهومة و تجد كلمة FSG و عبارات اخرى ربما يتبادر الى ذهنك أن عملية فك الضغط ناقصة.

اقول لك ستجد الإجابة بعد قليل.

أظن أن المهم شغلنا عن الأهم لا تخف ها قد عدنا.

الأن سنتناول تحليل البرنامج بالتفصيل الممل لكي يتسنى لنا التعامل مع مثله مرة أخرى.

إفتح ال Trojan Dropper المفكوك في Olly

File<Open

ستظهر لك هذه الصورة.

2.jpg

هذا هو كود البرنامج الكامل.

هذا البرنامج يتكون من مجموعة من دوال 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: وتستعمل هذه الخاصية مع المجلدات.
الدالة ExitProcess
تقوم بإغلاق الملف ولها بارميتر واحد:
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_ نذهب إليها، سنرى الموجود في الصورة.

شاهد الصورة

3.jpg

ويبدا ب MZ بمذا تذكرك هذه العبارة اه تذكرة بمقدمة الملفات التنفيذية و هي إختصار لإسم مخترعها و هو Mark Zibikowsky.

ثم يقوم بتشغيله في وضع الإخفاء ثم يغلق البرنامج.

اذا اردت التعمق و التتبع اكثر انصحك أن تتوقف عند دالة lclose_ لأنك إذا اكملت سوف ترى ما لا يحمد عقباه.

ماذا نفعل الأن......

سنذهب لتحليل الدروبر الثاني و هو الأهم لأنه هو الذي يقوم بنشر السيرفر في جهاز الضحية + تشغيل برنامج YahooMic.

نفحص البرنامج بال PEiD سنجده مضغوط بال FSG يجب عليك أن تستعمل الطريقة التي وضحتها في الفيديوا ولا تتعب نفسك بعمل Dump له واصل من هنالك وستكمل الدرس بشكل عادي.

الدروبر الثاني مصمم بالدالفي.

شاهد صورة ال Dropper في Olly

4.jpg

تمثل الصورة بداية الشيفرة الخاصة بال 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 بعد روتين فك التشفير.

شاهد معي الصورة

5.jpg

هل ترى تعليمة

XOR EAX,EAX

تعمل على تصفير المسجل EAX او بمعنى اخر تهيئته لإستقبال البيانات.

هنالك بعدها مباشرة تعليمة Call ياترى ما ذا يوجد بداخلها تعالوا ندخل إليها ونقوم بتحليلها إضغط F7 ستجد نفسك هنا.

6.jpg

كما تشاهد في الصورة توجد هنالك دالة وحيدة فقط و هي GetModuleFileName

تقوم هذه الدالة بإرجاع المسار الكامل للملف التنفيذي.

تأخذ هذه الدالة 3 براميتر:

BufSize=حجم مسار الملف التنفيذي
PathBuffer=مؤشر لعنوان المسار
hModul=في حالتنا الموديل هو null و في هذه الحالة سيتم إرجاع مسار الملف التنفيذي الذي طلب دالة GetModuleFileName

نبدا بشرح التعليمات ,على كل حال, كل شيء واضح ولكن أشرح للتوضيح اكثر.

شاهد الصورة

7.jpg

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 من مسجل لمسجل لأغراض خاصة بالبرنامج.

شاهد صورة المسجلات

8.jpg

بعد ذلك قفزة يليها الرجوع إلى ماكان عليه البرنامج من قبل.

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

شاهد هذه الصورة

9.jpg

هنا يقوم البرنامج بإنشاء مقبض لنفسه عن طريق الدالة CreateFileA

ثم يقوم بتغير مؤشر القرائة عن طريق الدالة SetFilePointer ليبدا بقرائة نفسه وإستخراج المعلومات.

الأن وبعد هذا كله الDropper يبدا بإستعمال خوارزمية لفك تشفير إسم البرنامجين ال Trojan و الياهو مايك عن طريق حلقة تكرارية كبيرة بها حلاقة تكرارية صغيرة .

الحلقة التكرارية تدور 105 مرة و الحلقة التكرارية الكبير تدور مرتين مرة لبرنامج YahooMic ومرة ل Trojan.

إذهب إلى العنوان التالي 00403C8C ضع نقطة توقف كالمعتاد, تتبع بالضغط على F8 إلى ان تصل إليها او قم بالضغط على F9 لتشغيل الدروبر وسيتوقف Olly عندها.

إبدأ بالتتبع سترى بعض الدوال المعتاد عليها مثل ReadFile و Set FilePointer وتقوم تلك الدوال بقرائة Dropper و بدية استخراج البيانات الفعلية من اعماق البرنامج.

واصل التتبع إلى أن تصل للعنان التالي 00403D04 هنا تبدأ عملية الفك.

شاهد الصورة

10.jpg

بعد إكمال الحلقتين و إستخراج إسم البرنامجين إذهب ل هذا العنوان 00403D5C وستجد في بعض الدوال منها:

GetSystemDirectoryA

التي تقوم بإستخراج مسار system32 لديك لكي يقوم بنسخهما إلى هنالك.

الأن هنالك حلقة تكرارية اخرى تقوم بفك شيفرة برنامج YahooMic وهي موجودة في العنوان التالي 00403E1C تتبعها كما كنا نفعل من قبل وانظر إلى الأسفل ستجد البيانات تتغير وفي تلك اللحظة يتم فك التشفير.

لاحظ الصورة

11.jpg

بعد ذلك يستدعي دالة ShellExecuteA لتشغيل YahooMic واصل وشغل البرنامج لا ضير في تشغيله لن يصيبك شيء.

الان مازال الـ Trojan لم يتم تشغيله وفك تشفيره

بعد عملية فك تشفير YahooMic وتشغيله ويقوم ببعض التعليمات يقوم بإستخراج كلمة Server.exe وإستعمالاها في نفس الحلقة , الحلقة السابقة الذكر التي تقوم بفك شيفرة البرنامج.

شاهد الصورة

12.jpg

13.jpg

الصورة مكتوب بها الشرح كل شيء واضح أنصحك بعدم الإكمال من تلك الدالة ShellExecuteA لأنك ستوف تخترق بعد غضون ثواني -_-

الأن هل تريد البرنامج إذهب وقم بنسخه من system32 و احذف Server.exe.

وللعلم لقد حملت برنامج YahooMic المدموج مع ال Trojan من منتدى عربي الله يغفر لإخوانان ولما ترى مثل هذه التراهات تجد أن المستوى لهؤلاء الأشخاص مازال منحط.

لقد تم إكمال الدرس بفضل من الله ومنة واسف على الشرح السريع في الأخير لأني اردت ترك العملية لكم لكي تبحثوا بأنفسكم.

وأخيرا أرجو من الله أن ينفعنا بما علمنا و أن يزدنا علما.

ما كان من خطأ فمني و من الشيطان و ما كان من توفيق فمن الله وحده .

وارجوا من الإخوة تنبيهي باي خطا أو سهو في الموضوع.

واختم كلامي بما بدات به اللهم صلي على سيدنا محمد و على اله وصحبه وسلم تسليما كثيرا سبحانك اللهم وبحمدك نشهد ان لا إله أنت نستغفرك ونتوب إليك.

ملاحظة:

لا تستغرب من ظهور تحذير من طرف Anti-Virus لأنك تتعامل مع Malware

ntlcs=الدروبر الثاني

yahoomic =البرنامج المدموج مع التروجان

Unpacked=البرنامج بعد فك التشفير

فيديو شرح طريقة فك التشفير بخاصية Trace Real Entry Point في OllyDBG

Unpacking-MEW11 1.2.rar

Unpacked.rar

yahoomic.rar

ntlcs.rar

تم تعديل هذه المشاركة بواسطة DATA_SNIPER في 6 سبتمبر 2008 في 12:57

infected.png

مدونة علوم الحاسب

#3

بارك الله فيك

#4

جزاك الله خير

ودرس شيق ومفيد

وذكرتنا بدروس الاستاذ / JAAS

لكن فيه سؤال ممكن يكون له ارتباط قليل بالموضوع

حسب معلوماتي ان المعالج مايشغل اي برنامج الا بعد مايفك تشفيره يعني يشغل البرنامج بالكود الاصلي

لأني قريت في احد الكتب ان البرنامج المشفر يأتي معه كود لفك تشفيره لكي يعمل على المعالج

نفرض ان عندنا فايروس مشهور او تروجان مشهور نقول مثلاً الـ Prorat

وقمنا بتشفير السيرفر الخاص به ومر على برنامج الحمايه بدون مايكتشف السيرفر

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

وشكرً

(وقل ربي زدني علما)

#5

السلام عليكم.

Djug وفيك بارك الله.

اقتباس
حسب معلوماتي ان المعالج مايشغل اي برنامج الا بعد مايفك تشفيره يعني يشغل البرنامج بالكود الاصلي

بضم الياء، نعم، يتم ذلك عن طريق كود او خوارزمية فك التشفير التي تسمى Decryption Routine ومن ثم يتم القفز للكود الأصلي وتشغيله.

اقتباس
وقمنا بتشفير السيرفر الخاص به ومر على برنامج الحمايه بدون مايكتشف السيرفر

لماذا لا يكتشف برنامج الحمايه البرنامج المشفر عندما يقوم المعالج بتشغليه لأن تشفيره قد فك

بل تكشفه،برامج الحماية تأتي مع خاصية تسمى Memory Scan هذه الخاصية تمكنها من كشف الTrojan حتى ولو كان مشفر لأنه في النهاية سيتم فك تشفيره في الذاكرة.

تم تعديل هذه المشاركة بواسطة DATA_SNIPER في 6 سبتمبر 2008 في 00:40

infected.png

مدونة علوم الحاسب

#6

مقال وشرح جيد جداً، تابع في هذه المقالات وفقك الله ربما تجلب اهتماماً بالقسم :happy:

3lazizi كتب:
نفرض ان عندنا فايروس مشهور او تروجان مشهور نقول مثلاً الـ Prorat

وقمنا بتشفير السيرفر الخاص به ومر على برنامج الحمايه بدون مايكتشف السيرفر

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

وشكرً

برامج المكافحة لديها طرق خاصة في تنفيذ الملفات أو أجزاء منها في جزء محمي من الذاكرة كي لا ينتشر الجزء الفيروسي في النظام، حتى يتم فك التشفير لو وجد مثلا، ثم تقوم بفحص الذاكرة وليس الملف على القرص.

Do as I say, not as I do

We are Anonymous. We are Legion. We don't forgive. We don't forget

#7
اقتباس
مقال وشرح جيد جداً، تابع في هذه المقالات وفقك الله ربما تجلب اهتماماً بالقسم

إن شاء الله.

اقتباس
برامج المكافحة لديها طرق خاصة في تنفيذ الملفات أو أجزاء منها في جزء محمي من الذاكرة كي لا ينتشر الجزء الفيروسي في النظام، حتى يتم فك التشفير لو وجد مثلا، ثم تقوم بفحص الذاكرة وليس الملف على القرص.

هذا مايسمى بالــ Code Emulation.

infected.png

مدونة علوم الحاسب

#8

ليس لدي وقت لأقرا ، لكن من خلال رؤيتي للدرس بشكل عام (دوال الـ API و صور olly فيبدو لي ان الدرس على مستوى عالي من الاحتراف...شكرا لمجهودك في نشر العلم..

#9

السلام عليكم

درس شيق ان شاء الله نستفيد من المعلومه الموجوده ونحاول التطبيق

وشكرا على مجهودك

لا اله الا الله محمد رسول الله

شبكة شباب IT

http://www.shababit.net

shababit.gif

#10

ممتاز جدا جزاك الله خيرا , انتظر اسالتي بعد مشاهدتي للدرس :)

#11

موضوع و شرح جيدين....جزاك الله خيرا

#12

الله يعطيك العافية

ولي رجعة بس خلني استوعب الدرس

مواضيع مشابهة