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

كود برنامج Regmon

بدأه do_not_forget2008 في 21 مايو 2008 · 22 رد · 7,003 مشاهدة · في المواضيع و الدروس القيّمة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

i'am a new programmer To GamingMaster and all who can please somebody tries to explain the code of regmon and filemon where is kernel experts?

بســم الله الـرحمــن الرحيــم

[يمين]مرة سألتنى نفسى هل نستطيع هزيمة اسرائيل والبلاد المعادية للاسلام؟

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

وثانيا اذا كان معدل ما نكتبه وما يتم تطبيقه من اوراق بحثية يبلغ ضعف الدولة المراد هزيمتها

ثالثا اذا كنا امة عربية واحدة

[وسط]مواطن مسلم من الجمهورية العربية المتحدة

[/يمين] [/وسط]

#2

السلام عليكم

رجاء الكتابة بالعربية .

بالطبع لا يمكن شرح الكود بالكامل فلا تنسى اننا في أيام امتحانات !

هل لديك أي تجارب سابقة في برمجة الدرايفرز ؟؟

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

mov eax, dword ptr ds:[0xffdf0308]

jmp dword ptr [eax+0xfc]

#3

thank you for answering me,currently i'am writing in a keyboard that does not support arabic sorry for that and where i can go to read the basics you talked about??

what is the use of the following micro

#if DBG

#define DbgPrint(arg) DbgPrint arg

#else

#define DbgPrint(arg)

#endif

i know that replaces the original DbgPrint(arg) with the other one but what its use here

بســم الله الـرحمــن الرحيــم

[يمين]مرة سألتنى نفسى هل نستطيع هزيمة اسرائيل والبلاد المعادية للاسلام؟

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

وثانيا اذا كان معدل ما نكتبه وما يتم تطبيقه من اوراق بحثية يبلغ ضعف الدولة المراد هزيمتها

ثالثا اذا كنا امة عربية واحدة

[وسط]مواطن مسلم من الجمهورية العربية المتحدة

[/يمين] [/وسط]

#4

هي فقط لتشغيل الدالة DbgPrint عند العمل على بيئة الـChecked و اغلاقها عند العمل على البيئة Free

تم تعديل هذه المشاركة بواسطة GamingMasteR في 26 مايو 2008 في 12:43

mov eax, dword ptr ds:[0xffdf0308]

jmp dword ptr [eax+0xfc]

#5

Thank you addict but i have another question to make sure that i understood you mean when it is running on client machine if there is a debug statments they can not see it with debugView

بســم الله الـرحمــن الرحيــم

[يمين]مرة سألتنى نفسى هل نستطيع هزيمة اسرائيل والبلاد المعادية للاسلام؟

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

وثانيا اذا كان معدل ما نكتبه وما يتم تطبيقه من اوراق بحثية يبلغ ضعف الدولة المراد هزيمتها

ثالثا اذا كنا امة عربية واحدة

[وسط]مواطن مسلم من الجمهورية العربية المتحدة

[/يمين] [/وسط]

#6

لا لا لا ...

أنا كنت اقصد انه عند ترجمة الكود بواسطة الـddk فهناك Two Environment :

1-Free Version : مثلها مثل 'Release' Environment في مترجم الـVC العادي.

2-Checked Version : مثلها مثل 'Debug' Environment في مترجم الـVC العادي.

وبذلك يمكنك ان ترى رسائل الـdebug في النسخة الـchecked فقط ;)

تم تعديل هذه المشاركة بواسطة GamingMasteR في 26 مايو 2008 في 12:47

mov eax, dword ptr ds:[0xffdf0308]

jmp dword ptr [eax+0xfc]

#7

thank you dear brother i want to ask about IRP that device work with i read them alot and i did not understand also when writing the driverEntry which opposite to the main what is the difference between pointer to device

and pointer to driver

also the following code i did not understand while i know c free well

#ifdef ALPHA

#define FUNCTION_PTR(_Function) (*(PULONG)_Function) & 0x0000FFFF

#else

#define FUNCTION_PTR(_Function) *(PULONG)((PUCHAR)_Function+1)

#endif

بســم الله الـرحمــن الرحيــم

[يمين]مرة سألتنى نفسى هل نستطيع هزيمة اسرائيل والبلاد المعادية للاسلام؟

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

وثانيا اذا كان معدل ما نكتبه وما يتم تطبيقه من اوراق بحثية يبلغ ضعف الدولة المراد هزيمتها

ثالثا اذا كنا امة عربية واحدة

[وسط]مواطن مسلم من الجمهورية العربية المتحدة

[/يمين] [/وسط]

#8

الـIRP عبارة عن structure يمثل الرسائل التي يتم ارسالها للدرايفر لتنبيهه بشئ معين , كما انها قد تكون محملة ببعض البيانات وافضل الطرق لفهمها اكثر و الاعتياد عليها هو كتابة اكواد اكثر فأكثر :wink:

 #ifdef ALPHA
#define FUNCTION_PTR(_Function) (*(PULONG)_Function) & 0x0000FFFF
#else
#define FUNCTION_PTR(_Function) *(PULONG)((PUCHAR)_Function+1)
#endif

تستخدم هذه الماكرو لجلب الـDWORD الواقعة بعد 1 بايت من العنوان المحدد (عنوان الـFunction) , بأي حال هي تستخدم لمعرفة الـService Index لبعض روتينات النظام البادئة بـZw لأن جميعهم يبدأ بكود مثل هذا :

mov eax, xxx

أول بايت هو الـopcode لتعليمة mov اما الـDWORD التابع له فهو الـService Index الخاص بهذا الروتين ...

هل فهمت ؟؟

تم تعديل هذه المشاركة بواسطة GamingMasteR في 26 مايو 2008 في 12:53

mov eax, dword ptr ds:[0xffdf0308]

jmp dword ptr [eax+0xfc]

#9

thank you bro i know i'am asking too many dump question but truely i wanna learn about your final answer i understood the part of asm but the code in c he tries to reach SSDT right to the pointer that holds the address of specific function then he got this address anding it to only hold the value that he wants as you mentioned

i want to what is _Function can you put an example to make the things more clearer

بســم الله الـرحمــن الرحيــم

[يمين]مرة سألتنى نفسى هل نستطيع هزيمة اسرائيل والبلاد المعادية للاسلام؟

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

وثانيا اذا كان معدل ما نكتبه وما يتم تطبيقه من اوراق بحثية يبلغ ضعف الدولة المراد هزيمتها

ثالثا اذا كنا امة عربية واحدة

[وسط]مواطن مسلم من الجمهورية العربية المتحدة

[/يمين] [/وسط]

#10

This :

#define FUNCTION_PTR(_Function) (*(PULONG)_Function) & 0x0000FFFF

is not for x86 machines , not really sure ... but the used one is :

#define FUNCTION_PTR(_Function) *(PULONG)((PUCHAR)_Function+1)

------------------------

Example:

if you want to hook OpenProcess which is interface to ZwOpenProcess in the kernel then you have 1st to get it's service number,ZwOpenProcess routine looks like this :

  MOV EAX,0x7A
  LEA EDX,DWORD PTR [ESP+0x4]
  PUSHFD 
  PUSH 0x8
  CALL 0x0406D36
  RET 0x10

the 1st byte is the opcode for the mov instruction as i said which is 0xb8, the followed DWORD is the Service number which is 0x7a in XP OS ...

the KeServiceDescriptorTable is a pointer to SERVICE_DESCRIPTOR_TABLE structure with contains 4 members , one of them is ServiceTable which is a pointer to array that holds every service address....

using the number we got from ZwOpenProcess we can patch it's corresponding element in that array with our own alternative function .

mov eax, dword ptr ds:[0xffdf0308]

jmp dword ptr [eax+0xfc]

#11

اتمنى ان تتبع قوانين المنتدى وتكون المشاركات بالغة العربية

amdvsintel22.jpg

--i use AMD--

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

أستعن بالله و لا تعجز

تابعنى على تويتر

***

#12

صحيح أسف على ذلك , فور الانتهاء سأقوم بترجمة جميع المشاركات !

mov eax, dword ptr ds:[0xffdf0308]

jmp dword ptr [eax+0xfc]

#13

الى الاخ addict or gamingMaster انا فهمت الاسمبلى والشرح الاكثر من رائع الذى يليها ولكن اريد شرح الماكرو المكتوب بالسى بالتفصيل لو سمحتم

بســم الله الـرحمــن الرحيــم

[يمين]مرة سألتنى نفسى هل نستطيع هزيمة اسرائيل والبلاد المعادية للاسلام؟

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

وثانيا اذا كان معدل ما نكتبه وما يتم تطبيقه من اوراق بحثية يبلغ ضعف الدولة المراد هزيمتها

ثالثا اذا كنا امة عربية واحدة

[وسط]مواطن مسلم من الجمهورية العربية المتحدة

[/يمين] [/وسط]

#14

اخوتى بعد طول بحث وجدت الاتى كمثال نريد عمل hooking to native API Like NtCreateFile() التى هى interface for CreateFile API

لعمل hooking على الدالة الNative نجلب العنوان من الملف ntdll.dll

1-step 1 API GetModuleHandle function returns a module handle for the specified module if the file has been mapped into the address space of the calling process.

HMODULE hmod=GetModuleHandle("ntdll.dll");

2-step2 API FARPROC GetProcAddress(HMODULE hModule,LPCSTR lpProcName) function returns the address of the specified exported dynamic-link library (DLL) function

note i don't know what is the hell FARPROC is so i will store the address in a plain dword pointer var

my guess is that maybe pointer to function but i'm too lazy to search for it

dword tempvar=1+(dword)GetProcAddress(hmod,"NtCreateFile");

as we know from addict or gamingmaster explaining that the service index of these function stored in five bytes the first byte is an op code to mov eax instruction then the followed four bytes are the address of this paritcular function then we wanna know the address of function NtCreateFile but after one byte adding to get it write or we can simply read the five bytes but neglect the first of them

3-step 3 last step we need the tempvar to be stored in a pointer to be easily manipulated so

dword *pfinal=&tempvar;

this is my last statement plz someone tell if what i explained is write or not

thanks in advance

Apro

تم تعديل هذه المشاركة بواسطة do_not_forget2008 في 7 أغسطس 2008 في 02:42

بســم الله الـرحمــن الرحيــم

[يمين]مرة سألتنى نفسى هل نستطيع هزيمة اسرائيل والبلاد المعادية للاسلام؟

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

وثانيا اذا كان معدل ما نكتبه وما يتم تطبيقه من اوراق بحثية يبلغ ضعف الدولة المراد هزيمتها

ثالثا اذا كنا امة عربية واحدة

[وسط]مواطن مسلم من الجمهورية العربية المتحدة

[/يمين] [/وسط]

#15

خلّي غيرك يستفيد واكتب بالعربية ...

mov eax, dword ptr ds:[0xffdf0308]

jmp dword ptr [eax+0xfc]

#16

اخى الفاضل لو تعلم عذابى للكتابة بالعربية ولكن ما رايك فيما كتبت

بســم الله الـرحمــن الرحيــم

[يمين]مرة سألتنى نفسى هل نستطيع هزيمة اسرائيل والبلاد المعادية للاسلام؟

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

وثانيا اذا كان معدل ما نكتبه وما يتم تطبيقه من اوراق بحثية يبلغ ضعف الدولة المراد هزيمتها

ثالثا اذا كنا امة عربية واحدة

[وسط]مواطن مسلم من الجمهورية العربية المتحدة

[/يمين] [/وسط]

#17

هل هناك احد مازال لديه اهتمام بالموضوع لا ارى اى تعليقات الا من الاخ GamingMaster

بســم الله الـرحمــن الرحيــم

[يمين]مرة سألتنى نفسى هل نستطيع هزيمة اسرائيل والبلاد المعادية للاسلام؟

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

وثانيا اذا كان معدل ما نكتبه وما يتم تطبيقه من اوراق بحثية يبلغ ضعف الدولة المراد هزيمتها

ثالثا اذا كنا امة عربية واحدة

[وسط]مواطن مسلم من الجمهورية العربية المتحدة

[/يمين] [/وسط]

#18

ليس لدي وقت حالياً حتى لقراءة مشاركتك , لخّص ما تريده في سطرين وبالعربي كي يستفيد غيرك وان شاء الله لن يتأخر عليك من يعرف .

mov eax, dword ptr ds:[0xffdf0308]

jmp dword ptr [eax+0xfc]

#19

حسنا هناك خطأ عندك في النقطة الثالثة .

لمعرفة عنوان Native Service لابد من معرفة : الـIndex لهذه الـService و عنوان الـService Table او KeServiceDescriptorTable .

لمعرفة الـIndex :

هي الـdword بعد 1 byte من عنوان الـZwXxx .

مثلا ZwCreateFile تحت Xp :

mov eax,0x25
mov edx,0x7ffe0300
call dword ptr [edx]
ret 0x2c

كما ترى فإن اول تعليمة تتكون من شقين :

1- الـOpcode لتعليمة mov eax .

2- الـdestination وهو الـIndex الذي نريد الحصول عليه .

بالسي :

PBYTE ZwCreateFile [color= #000000;]= [color= #000000;](PBYTE[color= #000000;])GetProcAddress[color= #000000;](LoadLibrary[color= #000000;]([color= #A31515;]"ntdll.dll"[color= #000000;]), [color= #A31515;]"ZwCreateFile"[color= #000000;]);

DWORD Id [color= #000000;]= [color= #000000;]*[color= #000000;](PDWORD[color= #000000;])[color= #000000;](ZwCreateFile [color= #000000;]+ [color= #ff0000;]1[color= #000000;]);

حسناً انتهينا من الجزء الأول , بعد ذلك نريد كمثال ان نعرف عنوان الدالة في الـkernel + كيفية عمل hook لها من جدول الـSDT .

جدول الـSSDT مم يتكون ؟؟

هو عبارة عن Structure تركيبه كالتالي :

[color= #0000ff;]typedef [color= #0000ff;]struct _SERVICE_DESCRIPTOR_TABLE [color= #000000;]{

    PVOID   [color= #000000;]*ServiceTable;

    PULONG  CounterTable;

    ULONG   TableSize;

    PUCHAR  ArgumentTable;

[color= #000000;]} SERVICE_DESCRIPTOR_TABLE, [color= #000000;]*PSERVICE_DESCRIPTOR_TABLE;

ما يهمنا هو ServiceTable , كما ترى فهو عبارة عن مؤشر الى مصفوفة Array من PVOIDs تشير كل واحدة فيهم الى عنوان الـService مناظرا لرقم الـIndex .

فإذا اردنا معرفة عنوان NtCreateFile في الـKernel فما علينا إلا ان نقوم بجلب العنصر المناظر للـIndex = 37 او 0x25 , جدول الـSSDT يتم تصديره من ntoskrnl باسم KeServiceDescriptorTable :

PVOID NtCreateFile [color= #000000;]= KeServiceDescriptorTable[color= #000000;]-[color= #000000;]>ServiceTable[color= #000000;][Id[color= #000000;]];

وبالمثل اذا اردت عمل patch للـSSDT فستقوم بمساواة العنصر المناظر للـIndex بعنوان الدالة الـhandler الجديدة ... ولا تنسى الاحتياطات .

mov eax, dword ptr ds:[0xffdf0308]

jmp dword ptr [eax+0xfc]

#20

لا أعرف أين اختفى زر الشكر ،

شرح رائع أخي GamingMasteR

لعمل HOOK على دالة في الSSDT ممكن أستخدام المايكروات الجاهزة و وضعها داخل الدرايفر ،

هذا سيسهل الامر

/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/

 

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

#21

اخى الفاضل يعجز لسانى عن الشكر

بســم الله الـرحمــن الرحيــم

[يمين]مرة سألتنى نفسى هل نستطيع هزيمة اسرائيل والبلاد المعادية للاسلام؟

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

وثانيا اذا كان معدل ما نكتبه وما يتم تطبيقه من اوراق بحثية يبلغ ضعف الدولة المراد هزيمتها

ثالثا اذا كنا امة عربية واحدة

[وسط]مواطن مسلم من الجمهورية العربية المتحدة

[/يمين] [/وسط]

#22

معلش يبدو ان فهمى ثقيل نوعا ما ولكن فى هذا السطر

dword id=*(PDWORD)(ZwCreateFile+1);

هنا نضيف 1بايت الى العنوان مفهومة ولكن ان نعمل كاست(cast)الى pointer to Dword ثم ناتى بمحتويات هذا العنوان

what is pointed to by this address

تم تعديل هذه المشاركة بواسطة do_not_forget2008 في 10 أغسطس 2008 في 23:57

بســم الله الـرحمــن الرحيــم

[يمين]مرة سألتنى نفسى هل نستطيع هزيمة اسرائيل والبلاد المعادية للاسلام؟

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

وثانيا اذا كان معدل ما نكتبه وما يتم تطبيقه من اوراق بحثية يبلغ ضعف الدولة المراد هزيمتها

ثالثا اذا كنا امة عربية واحدة

[وسط]مواطن مسلم من الجمهورية العربية المتحدة

[/يمين] [/وسط]

#23

عملت تنقيح بالvc++

byte *tempvar=((byte *)GetProcAddress(hmod,"ZwCreateFile")+1);
	int funid=*(tempvar);

يودى نفس الوظيفة

شكر خاص لمن يتابع الموضوع وشكرا جزيلا لGamingMaster

تم تعديل هذه المشاركة بواسطة do_not_forget2008 في 11 أغسطس 2008 في 06:32

بســم الله الـرحمــن الرحيــم

[يمين]مرة سألتنى نفسى هل نستطيع هزيمة اسرائيل والبلاد المعادية للاسلام؟

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

وثانيا اذا كان معدل ما نكتبه وما يتم تطبيقه من اوراق بحثية يبلغ ضعف الدولة المراد هزيمتها

ثالثا اذا كنا امة عربية واحدة

[وسط]مواطن مسلم من الجمهورية العربية المتحدة

[/يمين] [/وسط]

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