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

غزو الملف Packet.dll

مغلق
بدأه MSVS في 14 يناير 2006 · 4 رد · 3,158 مشاهدة · في لغة Ms Visual Basic 6 وما قبلها من إصدارات
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

الحقيقة أني في الفترة الأخيرة أصبحت مهتماً بالشبكات و طريقة عملها .

و من ذلك إهتمامي ببرامج " شم الرزم" على الشبكة و التي تسمى Sniffer .

المهم الفكرة كبرت في رأسي ، و حبيت أكتشف أكثر و أكثر .

فوجدت أنه بالإمكان إرسال و استقبال الرزم Packets بواسطة المكتبة Packet.dll و على مستوى " طبقة إيثرنت " :o

ولن تدخل في تعقيدات مكتبات الـ Socket والتي لن تعطيك بيانات (حسب علمي) إلا على مستوى " طبقة الشبكة " أي لن تتحكم ولن تستقبل رزم تخص أجهزة أخرى

الحقيقة ، الموضوع فتح شهيتي للبرمجة :D بعد أن سدتها مواضيع قواعد البيانات و القراءة من الملفات :wacko:

فبدأت أعد العدة لغـزو هذا الملف الغامض . ( و الذي لم أجد من يستخدمه في الفيجوال بيسك حسب إفادة جوجل ، أقرب أمثلة في البيسك هي في الموقع powerbasic.com )

عموماً ، هذه الروابط التي جمعتها حالياً ،

هذا أهمها :

http://www.winpcap.org/docs/man/html/group__packetapi.html

ثم البقية :

http://www.winpcap.org/install/default.htm

http://www.cswl.com/whiteppr/white/ethernet.html

http://winpcap.mirror.ethereal.com/301a/do...__packet32.html

http://www.winpcap.org/pipermail/winpcap-u...May/000050.html

http://www.cs.technion.ac.il/Labs/Lccn/lab...itor/packet.htm

http://www.mail-archive.com/winpcap-users@...t/msg01777.html

http://www.powerbasic.com/support/forums/F...TML/001663.html

وهذا موقع فيه برامج كاملة سنيفر و أنتي سنيفر :

http://www.mirrors.wiretapped.net/security/packet-capture

أنتظر دعمكم ، أو إضاءات على الطريق :)

ملاحظة : نحن نتحدث عن دوال API في المكتبة Packet.dll ، أي أن المجال مفتوح للنقاش بلغات أخرى :D

والسلام عليكم

تم تعديل هذه المشاركة بواسطة MSVS في 14 يناير 2006 في 00:22

أخي سوف تبكي عليك العيون * * * وتـسـأل عـنك دمـوع المـئـين

فإن جف دمعي سيبكي الغمام * * * يـرصـع قـبرك بــالـياسـمـيـن

أخـي مـا يـأسـنـا ولـن نيـأسـا * * * وما طال في القلب لبث الأسى

ومـا حـل أفــئــدة الــمــــؤمـن * * * سـوى أمـل في الـجنـان رسـى

أخي فانتظر ولتعش في غـد * * * سـيـنـبـثـق الأمـل الـسـرمـد

فـإن مـزقـتـنـا سني الــحـيـاة * * * فإنـا مع الـنصـر فـي مـوعــد

#2

السلام عليكم

مازلنا في طور تجميع المعلومات .

للأسف هناك خبر غير سار ، وهو أن المكتبة WinPCap لا تدعم الفيجول بيسك :( انظر للرابط :

http://www.winpcap.org/misc/faq.htm#Q-9

و أنا أقول ليش يطلع لي Bad DLL calling convention :unsure:

على العموم لا مشكلة ، فأنت مبرمج في بي و كثير من الناس يشاركك همومك . هناك ActiveX طور لأجلك :D

انظر لهذه الروابط :

http://www.beesync.com/products.html

http://packetvb.sourceforge.net

http://www.lorenzocerulli.tk

حتى الآن

جاري البحث عن معلومات أكثر . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

والسلام عليكم

أخي سوف تبكي عليك العيون * * * وتـسـأل عـنك دمـوع المـئـين

فإن جف دمعي سيبكي الغمام * * * يـرصـع قـبرك بــالـياسـمـيـن

أخـي مـا يـأسـنـا ولـن نيـأسـا * * * وما طال في القلب لبث الأسى

ومـا حـل أفــئــدة الــمــــؤمـن * * * سـوى أمـل في الـجنـان رسـى

أخي فانتظر ولتعش في غـد * * * سـيـنـبـثـق الأمـل الـسـرمـد

فـإن مـزقـتـنـا سني الــحـيـاة * * * فإنـا مع الـنصـر فـي مـوعــد

#3

رائع أخى MSVS

موضوع الشبكات و الباكيتز موضوع مهم

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

لا تراجع و لا إستسلام

#4

حياك الله يا أخي / net_code

بانتظار مشاركتك في هذا الموضوع .

خلاصة ما توصله له حتى الآن ، أن الدوال الموجودة في المكتبة Packet.dll هي 29 دالة على النحو التالي :

PacketAllocatePacket
PacketCloseAdapter
PacketFreePacket
PacketGetAdapterNames
PacketGetNetInfo
PacketGetNetInfoEx
PacketGetNetType
PacketGetReadEvent
PacketGetStats
PacketGetStatsEx
PacketGetVersion
PacketInitPacket
PacketIsDumpEnded
PacketLibraryVersion
PacketOpenAdapter
PacketReceivePacket
PacketRequest
PacketSendPacket
PacketSendPackets
PacketSetBpf
PacketSetBuff
PacketSetDumpLimits
PacketSetDumpName
PacketSetHwFilter
PacketSetMinToCopy
PacketSetMode
PacketSetNumWrites
PacketSetReadTimeout
PacketStopDriver

أول ما نستخدم من هذا الملف هي :

الدالة PacketGetVersion

وظيفتها :

معرفة إصدار المكتبة التي تعمل ، فهناك إصداران للمكتبة :

الأول يعمل في Windows 95/98/ME

والثاني يعمل في Windows NT/2000/XP

إعلانها :

PCHAR PacketGetVersion  ()

القيمة المعادة :

مؤشر متغير نصي

إن الإصدار الأول (القديم) للمكتبة يستخدم ترميز ASCII بينما الثاني يستخدم UNICODE طبعاً سنعلم فائد معرفة نوع الترميز في الدوال التالية .

و بعد معرفة الإصدار تأتي :

الدالة PacketGetAdapterNames

وظيفتها :

الحصول على قائمة ببطاقات الشبكة المثبتة في النظام ، مع وصف لكل بطاقة (كرت)

إعلانها :

BOOLEAN PacketGetAdapterNames  (  PTSTR    pStr,  
  PULONG    BufferSize 
 )

الوسائط :

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

الوسيط الثاني : مؤشر رقم طويل يمثل طول الوسيط الأول (السلسلة النصية التي ستحمّل بالبيانات) .

القيمة المعادة :

صفر في حال الفشل ، و غير الصفر في حال النجاح .

Warning: the result of this function is obtained querying the registry, therefore the format of the result in Windows NTx is different from the one in Windows 9x. Windows 9x uses the ASCII encoding method to store a string, while Windows NTx uses UNICODE. After a call to PacketGetAdapterNames in Windows 95x, pStr contains, in succession:

a variable number of ASCII strings, each with the names of an adapter, separated by a ""
a double ""
a number of ASCII strings, each with the description of an adapter, separated by a "". The number of descriptions is the same of the one of names. The fisrt description corresponds to the first name, and so on.
a double "".
In Windows NTx, pStr contains: the names of the adapters, in UNICODE format, separated by a single UNICODE "" (i.e. 2 ASCII ""), a double UNICODE "", followed by the descriptions of the adapters, in ASCII format, separated by a single ASCII "" . The string is terminated by a double ASCII "".

a variable number of UNICODE strings, each with the names of an adapter, separated by a UNICODE ""
a double UNICODE ""
a number of ASCII strings, each with the description of an adapter, separated by an ASCII "".
a double ASCII "".

ملاحظة :

كل ما استدعي هذه الدالة في الفيجوال بيسك يظهر لي رسالة Bad Dll Calling .

حاولت الإلتفاف عليها و فتحت الملف Packet.dll بالـ OllyDbg و راقبة الدالة فوجدت أنها تقرأ القيم من الرجستري ، تحديداً في هذا الموضع :

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E972-E325-11CE-BFC1-08002bE10318}

لمزيد من المعلومات ، انظر الشيفرة المصدرية للملف Packet.c في السطر 01353

http://www.winpcap.org/docs/man/html/Packe...rce.html#l01353

بعد الحصول على اسماء بطاقات الشبكة المثبتة في النظام نحدد أحدى هذه البطاقات لنفتحها بواسطة :

الدالة PacketOpenAdapter

وظيفتها :

إنشاء كائن محول (مكيف) لأحد بطاقة الشبكة المستخرجة من الدالة PacketGetAdapterNames

إعلانها :

LPADAPTER   PacketOpenAdapter(LPTSTR AdapterName)

الوسائط :

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

(سبق عرض بطاقات الشبكة المثبته على النظام بواسطة الدالة PacketGetAdapterNames)

القيمة المعادة :

قيمة مؤشر كائن ADAPTER .

تركيبة الكائن ADAPTER ، هي كالتالي :

typedef struct _ADAPTER  { 
    HANDLE hFile;               
    CHAR  SymbolicLink[MAX_LINK_NAME_LENGTH]; 
    int NumWrites;              
    HANDLE ReadEvent;           
    UINT ReadTimeOut;           
}  ADAPTER, *LPADAPTER;

بالفيجوال بيسك

Type ADAPTER
    hFile                  As Long
    SymbolicLink     As string * MAX_LINK_NAME_LENGTH
    NumWrites        As Long
    ReadEvent        As Long
    ReadTimeOut    As Long
End Type

حيث أن MAX_LINK_NAME_LENGTH = 64

سيتم ملئ هذه التركيبة ببيانات المحول (المكيف)

و لإغلاق الاتصال نستخدم :

الدالة PacketCloseAdapter

وظيفتها:

إغلاق محول (مكيف) كرت شبكة مفتوح

إعلانها :

VOID PacketCloseAdapter  (  LPADAPTER    lpAdapter  )

الوسائط :

مؤشر كائن Adapter الذي نريد أن نغلقه .

القيمة المعادة:

لا يوجد

بعدما فتحنا المحول/المكيف (Adapter) نستخدم :

الدالة PacketSetHwFilter

وظيفتها :

وضع مرشح للرزم الملتقطة .

إعلانها :

BOOLEAN PacketSetHwFilter  (  LPADAPTER    AdapterObject,  
  ULONG    Filter 
 )

الوسائط :

الوسيط الأول : مؤشر كائن المحول (ADAPTER) المراد وضع الفلتر له .

الوسيط الثاني : رقم معرف الفلتر ، و يأخذ أحد الثوابت التالية :

NDIS_PACKET_TYPE_PROMISCUOUS " يلتقط عشوائياً أي رزمة قادمة .

NDIS_PACKET_TYPE_DIRECTED " يلتقط أي رزمة تخص الجهاز الذي يعمل عليه البرنامج

NDIS_PACKET_TYPE_BROADCAST " يلتقط رزم البث broadcast فقط

NDIS_PACKET_TYPE_MULTICAST " يلتقط الرزم multicast الخاصة بالمجموعة التي الجهاز الحالي أحد أعضائها .

NDIS_PACKET_TYPE_ALL_MULTICAST " يلتقط كل رزم multicast

NDIS_PACKET_TYPE_ALL_LOCAL " يلتقط جمع الرزم المحلية .

القيمة المعادة :

صفر في حال الفشل ، و غير الصفر في حال النجاح .

للحديث بقية إن شاء الله :D

أخي سوف تبكي عليك العيون * * * وتـسـأل عـنك دمـوع المـئـين

فإن جف دمعي سيبكي الغمام * * * يـرصـع قـبرك بــالـياسـمـيـن

أخـي مـا يـأسـنـا ولـن نيـأسـا * * * وما طال في القلب لبث الأسى

ومـا حـل أفــئــدة الــمــــؤمـن * * * سـوى أمـل في الـجنـان رسـى

أخي فانتظر ولتعش في غـد * * * سـيـنـبـثـق الأمـل الـسـرمـد

فـإن مـزقـتـنـا سني الــحـيـاة * * * فإنـا مع الـنصـر فـي مـوعــد

#5

السلام عليكم

توقفنا عند تحديد نوع المرشح "الفلتر" للرزم التي ستلتقط من الشبكة .

بعد هذا تأتي

الدالة PacketSetBuff

وظيفتها :

تحديد حجم المخزن المؤقت الموجود في مستوى النواة (kernel-level) و الذي سيحتوي زرم الشبكة

إعلانها :

BOOLEAN PacketSetBuff  (  LPADAPTER    AdapterObject,  
  int    dim 
 )

الوسائط :

الأول : مؤشر كائن محول / مكيف ADAPTER

الثاني : حجم المخرن المطلوب حجزه بالكيلو بايت

القيمة المعادة :

صفر في حال الفشل (عدم كفاية المخزن) ، و غير الصفر في حال النجاح

ملاحظة :

في حال تم تعيين حجم جديد للمخزن فإن البيانات ستفقد و كذلك ترتيب الرزم .

الدالة PacketRequest

وظيفتها :

(وضع أو قراءة) بيانات من المتغير الداخلي لسائق كرت الشبكة

إعلانها :

 BOOLEAN PacketRequest  (  LPADAPTER    AdapterObject,  
  BOOLEAN    Set,  
  PPACKET_OID_DATA    OidData 
 )

الوسائط :

الأول : من نوع تركيبة "كائن" مكيف ADAPTER الذي سيتم عليه تنفيذ الطلب .

الثاني : من نوع بولياني (صح أو خطأ) ، لتحديد نوع الطلب الذي تنفذة الدالة ، True = لوضع البيانات في المتغير الداخلي لسائق كرت الشبكة ، False = لقراءة البيانات من المتغير الداخلي لسائق كرت الشبكة .

الثالث : من نوع تركيبة PACKET_OID_DATA وهو الذي سيحتوي على البيانات سواءً المراد إرسالها أو استقبالها .

تركيبة PACKET_OID_DATA كالتالي :

struct _PACKET_OID_DATA {
	ULONG Oid;                  
	ULONG Length;               
	UCHAR Data[1];              
}; 
typedef struct _PACKET_OID_DATA PACKET_OID_DATA, *PPACKET_OID_DATA;

بالفيجوال بيسك تكون كالتالي :

TYPE PACKET_OID_DATA
    Oid           AS Long
    Length       AS Long
    Data_(0)     AS Byte    
END TYPE

أعضاء التركيبة :

الأول Oid : من نوع رقم طويل ، يمثل رمز الـ OID ، انظر لوثائق مايكروسوفت للـ DDK أو انظر للملف ntddndis.h للحصول على قائمة بالرموز المتاحة .

الثاني Length : من نوع رقم طويل ، يمثل طول البيانات التي ستوضع في الحقل .

الثالث Data : من نوع بايت ، متغير سيحمل البيانات سواء المرسلة لسائق كرت الشبكة أو القادمة منه .

لنا لقاء قريب :D

السلام عليكم

أخي سوف تبكي عليك العيون * * * وتـسـأل عـنك دمـوع المـئـين

فإن جف دمعي سيبكي الغمام * * * يـرصـع قـبرك بــالـياسـمـيـن

أخـي مـا يـأسـنـا ولـن نيـأسـا * * * وما طال في القلب لبث الأسى

ومـا حـل أفــئــدة الــمــــؤمـن * * * سـوى أمـل في الـجنـان رسـى

أخي فانتظر ولتعش في غـد * * * سـيـنـبـثـق الأمـل الـسـرمـد

فـإن مـزقـتـنـا سني الــحـيـاة * * * فإنـا مع الـنصـر فـي مـوعــد

هذا الموضوع مغلق.

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