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

في بنية PE وبالتحديد في مقدمة ال NT ...

بدأه Adban في 8 أكتوبر 2010 · 12 رد · 1,611 مشاهدة · في أرشيف قسم الـــ Assembly
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم خبراء الأسمبلي...

اليوم كنت أتساءل عدة تساؤلات في بنية الملفات التنفيذية PE... واحد من هذه الأسألة والتي أرجو أن أجد إجابة مفصلة لها هو التالي..

في مقدمة ال PE والتي تلي مقدمة DOS ماهي القيم المميزة جدا والتي من الصعب تكررها في ملفين تنفيذيين بالصدفة ..

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

الان لو أخذت الحجم مع تاريخ انشاء الملف لحصرت الملفات أكثر .. وهكذا...

فما القيم المميزة التي يمكن بها تمييز ملف عن غيره في مقدمة NT ...أرجو أن يكون سؤالي واضحا..

#2

أى ملف تنفيذى - ذلك الذى يحتوى على PE Header - إذا كان الـ Debug Directory متاح به و بالأخص النوع Code View فإنه يتم وضع GUID لا يتكرر داخل ذلك الملف و نفس الـ GUID داخل ملف الـ PDB و ذلك حتى يستطيع الـ Debugger عمل ربط بينهم، هذا الـ GUID لا يتكرر أبدا.

و الله ولي التوفيق

1

مدونتي: C++ Tips and Tricks

#3

اخي محمد علاء الدين ...شكر الله لك ردك

في أي بايت أجد ما ذكرته ... وفي أي متغبر من أعضاء nt struct يوجد هذا المميز

من الاخر انا كنت ابحث عن مميز استطيع اضعه كتوقيع لفيروس مثلا

#4

السلام عليكم

اذا بدك اخي توخذ توقيع لملف

ممكن بطريقة سهلة توخذ الmd5 لل PE

او ممكن تفتح الملف الolly او بالhex وتختار كود مميز في قسم الcode segment للفايروس

وممكن اتطور اخذ التوقيع من الcode segment انك ابتعمل الهاتنسيق معين

طبعا لازم اتكون فاهم بنية exe file

اولا مشان تفهم بنية ملف exe شوف الرابط التالي

http://www.kutub.info/library/book/566

واذا بدك تتعامل معه كودياشوف الرابط التالي

/index.php?showtopic=226668&pid=1124723&st=0entry1124723

ولمعلومات اكثر شوف الرابط التالي

http://www.clamav.net/doc/latest/signatures.pdf

وشكرا

تم تعديل هذه المشاركة بواسطة ayash في 9 أكتوبر 2010 في 10:01

291964_260506123967115_206850989332629_1001538_45132_n.jpg

اللهم إني أعوذ بك من علم لا ينفع ، ومن قلب لا يخشع ، ومن نفس لا تشبع ، ومن دعوة لا يستجاب لها

#5

موضوع شيق!!!

أخي ayash... لا أعتقد أن برامج الحماية الحديثة والقوية والعملية تلجأ ﻷخذ كل قيم ترويسة PE كتوقيع، أو بمعنى آخر أخذ MD5 الخاص بالترويسة كتوقيع... حاول أن تأتي بتروجان - فيروس- وحرر قيمه الثناءية بمحرر هكس... وحاول أن تجد الجزء الذي يكشفه البرنامج !! ماذا سترى! سترى أن الكاسبر مثلا يختار قيم عشواءية ومتفرقة في الملف ... يعني يأخذ مثلا 8 بايتات مفرقة في الملف ويحطها كتوقيع..

وعلى فكرة لو عملنا انتي فايرس يأخذ MD5 لترويسة كاملة ﻷصبح تشفير الفايرس مرة أخرى أسهل من السهولة عينها!! يكفي فقط تغيير بايت واحد من الترويسة يخلي الانتي فايروس خبر خير!!! ولن يستطيع كشف الملف!!!

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

ربما ستكون لي عودة..

1

" إن الله كتب الإحسان على كل شيء"

::

الإرادة ... تحقق السيادة.

#6

هل اطلعت على هذا الموضوع مسبقا -- للأخ عبد الله الجمعان JAAS (تحية له)

(( الأساليب المتقدمة لبرمجة وكتابة برامج مقاومة الفايروسات AntiVirus وبرامج التجسس Anti-Spyware ))

اظنه يفيدك -- به مثال عملي عن اسنخدام ال PE كتوقيع

تم تعديل هذه المشاركة بواسطة الاخير زمانه في 9 أكتوبر 2010 في 16:52

/index.php/topic/264448-%D8%A7%D9%84%D8%A8%D8%AF%D8%A7%D9%8A%D8%A9-%D9%85%D8%B9-%D8%A7%D9%84%D8%A7%D9%86%D8%AF%D8%B1%D9%88%D9%8A%D8%AF/

 

اني وان كنت الاخير زمانه ---- لأتِ بما لم تستطعه الاوائلُ

#9

أشكر كل من رد!! معلومات قيمة جدا!!

انتضر جواب اخي علاء

تم تعديل هذه المشاركة بواسطة Adban في 9 أكتوبر 2010 في 17:37

#10
اقتباس
في أي بايت أجد ما ذكرته ... وفي أي متغبر من أعضاء nt struct يوجد هذا المميز

مثال بلغة السى: (هذا المثال سيحضر لك الـ GUID الخاص بالملف التنفيذى الذى سيكون هذا الكود داخله)

#include <Windows.h>

extern IMAGE_DOS_HEADER __ImageBase;

typedef struct _PDB_LINK
{
	DWORD sign;
	GUID  guid;
	DWORD age;
	CHAR  fileName[];
} PDB_LINK;

int main(int argc, char *argv[])
{
	IMAGE_NT_HEADERS* nt = (IMAGE_NT_HEADERS*)((int)&__ImageBase + __ImageBase.e_lfanew);
	IMAGE_DATA_DIRECTORY* dbgData = &nt->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_DEBUG];
	IMAGE_DEBUG_DIRECTORY* dbgDir = NULL;
	PDB_LINK* PDB = NULL;
	INT i = 0;

	if (dbgData->VirtualAddress == 0) return 1;

	dbgDir = (IMAGE_DEBUG_DIRECTORY*)(nt->OptionalHeader.ImageBase + dbgData->VirtualAddress);

	if (dbgDir->Type != IMAGE_DEBUG_TYPE_CODEVIEW) return 1;

	PDB = (PDB_LINK*)(nt->OptionalHeader.ImageBase + dbgDir->AddressOfRawData);

	printf("Current GUID is ");
	printf("%X-", PDB->guid.Data1);
	printf("%X-", PDB->guid.Data2);
	printf("%X-", PDB->guid.Data3);
	for(;i<2;i++)
		printf("%X", PDB->guid.Data4);
	printf("-");
	for(;i<8;i++)
		printf("%X", PDB->guid.Data4);
	printf("\n");
}

و الله ولي التوفيق

تم تعديل هذه المشاركة بواسطة محمد علاء الدين في 9 أكتوبر 2010 في 20:48

2

مدونتي: C++ Tips and Tricks

#11

في المرفق تجربة بسيطة لكتابة برنامج يحاكي برامج مقاومات الفيروسات ... يقوم البرنامج بالمسح في المجلد :c\windows بحثا عن الملف التنفيذي لبرنامج الرسام المرفق مع ويندووز 7 وعند ايجاده يقوم بتنبيه المستخدم... اخترت 3 قيم عشواءية في ملف برنامج الرسام ولم نعثر على أي ملف شبيه يحوي نفس قيم الرسام في العناوين نفسها بعد عملية المسح ... يعني التوقيع مميز هع happy.gif

هذه صورة للتجربة

post-87237-038480000 1287772240_thumb.pn

والملف binary مرفق...

ولأي مهتم يمكنني ارفاق الكود كاملا لمن أراد...smile.gif

simpleAV.rar

المرفقات
AVs.PNG

" إن الله كتب الإحسان على كل شيء"

::

الإرادة ... تحقق السيادة.

#12

شكرا جزيلا لك أخي محمد علاء الدين..

أخي A.S Hack

ما نوع المشروع الذي استخدمته!

وكيف كتبت دالة تقوم بعمل scan!

وكيف علمت أن برامج مضادات الفيروسات الحديثة تستخدم التواقيع المتفرقة لكشف الفيروسات!!

وطبعا أريد الكود لو سمحت

وأحيرا شكرا لك جزيل الشكر

#13
Adban كتب:

شكرا جزيلا لك أخي محمد علاء الدين..

أخي A.S Hack

ما نوع المشروع الذي استخدمته!

وكيف كتبت دالة تقوم بعمل scan!

وكيف علمت أن برامج مضادات الفيروسات الحديثة تستخدم التواقيع المتفرقة لكشف الفيروسات!!

وطبعا أريد الكود لو سمحت

وأحيرا شكرا لك جزيل الشكر

لم أفهم المقصود بنوع المشروع..

بالنسبة للدالة التي تقوم بعمل scanning فيمكنك كتابتها استفادة من دوال الAPI الخاصة بوندوز، يمكنك مراجعة الدالتين FiindFirstFile و FindNextFile في مكتبة MSDN

أما كيف علمت أن كاسبرسكاي يختار قيم عشواءية.. ببساطة حاول اكتشاف القيم التي يكشفها لفيروس معين .. ولكي أتعبك wub.gif حرر قيم الفيروس الثناءية وغيرها بايتا بايتا حتى تحصل على القيم المكشوفة..

" إن الله كتب الإحسان على كل شيء"

::

الإرادة ... تحقق السيادة.

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