-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 ..
يمكننا الاطلاع على الدوال بكتابة الامر
 
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 وذلك بكتابة الامر التالي..
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 مجموعة من الدوال المعروفة والتى طالما استخدمناها فى لغة مثل السي.
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 وستلاحظ انها نفس الدوال...
والسلام عليكم