تعريف بدوال الNative API مكتبة ntdll.dll

الناقل : elmasry | الكاتب الأصلى : احمد غريب | المصدر : www.arabteam2000-forum.com

-9
السلام عليكم

دوال الـNative API هى مكتبة هامة جداً فى الوندوز تعتمد عليها باقى المكتبات امثال user32.dll و Kernel32.dll وGDI32.dll وغيرهم الكثير...

مكتبة ntdll.dll والتى تحتوى على دوال الـNative Api لم تقم مايكروسفت بشرحها كما هو الحال بالنسبة لباقى المكتبات, ومكتبة Kernel32.dll تعتبر تغليف لمكتبة ntdll.dll..

اغلب الدوال فى مكتبة ntdll.dll تبداء بالحروف Rt او Nt و Zw ولكن هناك دوال لا تتبع هذا النهج..

كيف الوصول إلى هذه الدوال ؟

هناك برنامج dumpbin تستطيع من خلاله الاطلاع على اسماء الدوال, هذا البرنامج يعمل من سطر الاوامر console ويتطلب بعض الاضافات للوصول إلى محتويات مكتبات الـdll ..

يمكننا الاطلاع على الدوال بكتابة الامر

CONSOLE

C:\WINDOWS\system32>dumpbin ntdll.dll /exports |more
Microsoft ® COFF Binary File Dumper Version 5.12.8078
Copyright © Microsoft Corp 1992-1998. All rights reserved.


Dump of file ntdll.dll

File Type: DLL

Section contains the following exports for ntdll.dll

0 characteristics
3B7DE01E time date stamp Sat Aug 18 05:25:18 2001
0.00 version
1 ordinal base
1408 number of functions
1408 number of names

ordinal hint RVA name

8 0 0000B5D2 CsrAllocateCaptureBuffer
9 1 0000B62A CsrAllocateMessagePointer
10 2 0001AFFE CsrCaptureMessageBuffer
11 3 00012157 CsrCaptureMessageMultiUnicodeStringsInPlace
12 4 0000F91A CsrCaptureMessageString
13 5 00046F19 CsrCaptureTimeout
14 6 000034AF CsrClientCallServer
15 7 00018D38 CsrClientConnectToServer
16 8 0000B584 CsrFreeCaptureBuffer
17 9 00046F13 CsrGetProcessId
18 A 00046EA7 CsrIdentifyAlertableThread
19 B 00008A8E CsrNewThread
20 C 00046F89 CsrProbeForRead
21 D 00046F43 CsrProbeForWrite
22 E 00046ED8 CsrSetPriorityClass
-- Mer --
.....
1130 469 0002F333 ZwSetVolumeInformationFile
1131 46A 0002F343 ZwShutdownSystem
1132 46B 0002F353 ZwSignalAndWaitForSingleObject
1133 46C 0002F363 ZwStartProfile
1134 46D 0002F373 ZwStopProfile
1135 46E 0002F383 ZwSuspendProcess
1136 46F 0002F393 ZwSuspendThread
1137 470 0002F3A3 ZwSystemDebugControl
1138 471 0002F3B3 ZwTerminateJobObject
1139 472 0002F3C3 ZwTerminateProcess
1140 473 0002F3D3 ZwTerminateThread
1141 474 0002F3E3 ZwTestAlert

........


الملف يحتوي تقريباُ على 1400 دالة وكما تلاحظ فإن بعض الدوال يبداء بالحرفين Zw .
قم الان بالاطلاع على ملف Kernel32.dll لتشاهد الدوال التى تقوم المكتبة بإستيرادها من مكتبة ntdll.dll وذلك بكتابة الامر التالي..

CONSOLE

C:\WINDOWS\system32>dumpbin kernel32.dll /imports |more
Microsoft ® COFF Binary File Dumper Version 5.12.8078
Copyright © Microsoft Corp 1992-1998. All rights reserved.



Dump of file kernel32.dll

File Type: DLL

Section contains the following imports:

ntdll.dll
77E61000 Import Address Table
77ED2DF6 Import Name Table
FFFFFFFF time date stamp
FFFFFFFF Index of first forwarder reference

77F54B99 52B _wcsnicmp
77F7E8F3 9F NtFsControlFile
77F7E603 6E NtCreateFile
77F516F8 18A RtlAllocateHeap
77F51597 238 RtlFreeHeap
77F7EAF3 BF NtOpenFile
77F7ED23 E3 NtQueryInformationFile
77F7ECE3 DF NtQueryEaFile
77F610D6 2A1 RtlLengthSecurityDescriptor
77F7EE33 F5 NtQuerySecurityObject
77F7F153 128 NtSetEaFile
77F7F283 13B NtSetSecurityObject
77F7F1B3 12E NtSetInformationFile
77F534AF 6 CsrClientCallServer
77F7E7D3 8D NtDeviceIoControlFile
77F7E543 62 NtClose
77F7F5DF 26D RtlInitUnicodeString
77F5FAF7 574 wcscspn
77F52611 339 RtlUnicodeToMultiByteSize
77F51901 575 wcslen
77FAF94A 518 _memicmp
77F81165 550 memmove
77F7EEC3 FE NtQueryValueKey
77F7EB23 C2 NtOpenKey
77F7E8A3 9A NtFlushKey
77F7F323 145 NtSetValueKey
77F7E643 72 NtCreateKey
77F51220 2BA RtlNtStatusToDosError
77F52599 23D RtlFreeUnicodeString
77F657DB 1FB RtlDnsHostNameToComputerName
77F52916 578 wcsncpy
-- Mer --



نلاحظ ان هناك العديد من الاوامر التى يتم إستيرادها من ملف ntdll.dll, من إسم الدالة نستطيع ان نستنتج طريقة عملها ولكن بما انه لا يوجد اى شرح من مايكروسفت, فهناك ثلاثة طرق لمعرفة عمل الدالة..

الاولى الاستنتاج والتجربة

نقوم بإستنتاج عمل الدالة من خلال إسمها ومن ثم نقوم بترجبة بعض الشفرة وإستدعاء الدالة ومشاهدة ما تقوم به, مشكلة هذا الطريقة هى انك لا تعرف بالظبط ما الذى يحدث خلف الكواليس, وربما تعمل الطريقة معى كود معين بدون خلل وعندما تقوم بتطبيقها فى كود اخر تكتشف ان إستنتاجاتك كانت خاطئة او تجاهلت جزئية هامة, والمشكلة الثانية هى انه هناك دوال متعلقة ببعضها وإذا جربت جالة معينه ربما تفشل رغم تكرار المحاولة بمعطيات مختلفة وذلك لانك لم تستدعى الدالة المتعلقة بها اولاً..

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

الثالثة هندسة عكسية
كلمة مخيفة ولكن فى بعض الاحيان شر لا بد منه, الهندسة العكسية هى مسئلة تعود, وإحتراف الهندسة العكسية يتطلب ممارسة وصبر, تستطيع فتح الملف فى برنامج مثل ollydbg ومتابعته الدالة التى تريد التعرف عليها سطر بسطر ومحاولة معرفة ما يحدث, ولكن انصح ان تبحث فى جوجل اولاً لان بعض الدوال معقدة جداً وتتطلب معرفة ليس فقط بالهندسة العكسية ولكن بالـdata structure وكل ما له علاقة بالخوارزميات, لقد حاولت فى مرة متابعة احد هذا الدوال وبعد عدة ايام من المتابعة اكتشفت انه يستخدم hash table, الشفرى كانت تقفز من عنوان إلى عنوان من ما جعل متابعة ما يحدث صعب جداً, لذلك إذا وجدت ان هناك اشياء غريبة فى الشفرة مثل القفز المتكرر اعلم انه يستخدم data structure معين ويجب عليك فى هذه الحالة محاولة إستنتاج نوع الخوارزمية التى تستخدمها الدالة ومن ثم متابعة الشفرة لترى إذا كان تحليلك مظبوط..


ملاحظة اخيرة

نلاحظ فى نهاية الـexports لملف الـntdll.dll مجموعة من الدوال المعروفة والتى طالما استخدمناها فى لغة مثل السي.

CONSOLE

1368 557 0005FD27 sscanf
1369 558 0003150D strcat
1370 559 000315FD strchr
1371 55A 000316B9 strcmp
1372 55B 000314FD strcpy
1373 55C 0003173E strcspn
1374 55D 0003177B strlen
1375 55E 000317F4 strncat
1376 55F 00031917 strncmp
1377 560 0003194F strncpy
1378 561 00031A4D strpbrk
1379 562 00031A86 strrchr
1380 563 00031AAD strspn
1381 564 00031AEA strstr
1382 565 0005FD61 strtol
1383 566 0002D61C strtoul
1384 567 0000B2CA swprintf


إذا اردت ان تجرب تستطيع إستدعاء هذه الدوال دون الاعتماد على مكتبة kernel32.dll او ملف windows.h وستلاحظ انها نفس الدوال...


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