بتـــــاريخ : 2/26/2011 1:50:35 AM
الفــــــــئة
  • الحـــــــــــاسب
  • التعليقات المشاهدات التقييمات
    0 1420 0


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

    الناقل : elmasry | العمر :42 | الكاتب الأصلى : احمد غريب | المصدر : 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 وستلاحظ انها نفس الدوال...


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

     

    كلمات مفتاحية  :

    تعليقات الزوار ()