Зачем загрузчик проверяет секции .aspack и др.

Тема в разделе "WASM.RESEARCH", создана пользователем V0ldemAr, 11 дек 2007.

  1. V0ldemAr

    V0ldemAr New Member

    Публикаций:
    0
    Регистрация:
    28 июл 2005
    Сообщения:
    31
    Адрес:
    Ukraine
    Вот такой интересный код нашел в ntdll.dll ( XP SP2 , Vista, остальные не проверял ),
    незнаю поднималась тема ранее поиск ничего не показал :)
    Может кто-то уже разбирался и знает, просто стало интересно,
    а времени не особо есть, так что отпишитесь.
    Да и что за секция ".pcle"?

    Пример с XP SP2 English:
    Код (Text):
    1. 7C91D4D5    8BFF               mov     edi, edi
    2. 7C91D4D7    55                 push    ebp
    3. 7C91D4D8    8BEC               mov     ebp, esp
    4. 7C91D4DA    83EC 0C            sub     esp, 0C
    5. 7C91D4DD    53                 push    ebx
    6. 7C91D4DE    56                 push    esi
    7. 7C91D4DF    8B75 08            mov     esi, dword ptr [ebp+8]
    8. 7C91D4E2    8B5E 18            mov     ebx, dword ptr [esi+18]
    9. 7C91D4E5    57                 push    edi
    10. 7C91D4E6    53                 push    ebx
    11. 7C91D4E7    E8 5D33FFFF        call    7C910849                         ; RtlImageNtHeader
    12. 7C91D4EC    8365 FC 00         and     dword ptr [ebp-4], 0
    13. 7C91D4F0    8BF8               mov     edi, eax
    14. 7C91D4F2    66:837F 06 00      cmp     word ptr [edi+6], 0
    15. 7C91D4F7    8B46 1C            mov     eax, dword ptr [esi+1C]
    16. 7C91D4FA    8945 F4            mov     dword ptr [ebp-C], eax
    17. 7C91D4FD    0FB747 14          movzx   eax, word ptr [edi+14]
    18. 7C91D501    8D7438 18          lea     esi, dword ptr [eax+edi+18]
    19. 7C91D505    C745 08 01000000   mov     dword ptr [ebp+8], 1
    20. 7C91D50C    76 78              jbe     short 7C91D586                   ; 7C91D586
    21. 7C91D50E    837E 0C 00         cmp     dword ptr [esi+C], 0
    22. 7C91D512    74 63              je      short 7C91D577                   ; 7C91D577
    23. 7C91D514    837E 08 00         cmp     dword ptr [esi+8], 0
    24. 7C91D518    74 5D              je      short 7C91D577                   ; 7C91D577
    25. 7C91D51A    6A 08              push    8
    26. 7C91D51C    68 94D5917C        push    7C91D594                         ; ASCII ".aspack"
    27. 7C91D521    56                 push    esi
    28. 7C91D522    E8 1C57FEFF        call    7C902C43                         ; strncmp
    29. 7C91D527    83C4 0C            add     esp, 0C
    30. 7C91D52A    85C0               test    eax, eax
    31. 7C91D52C    8945 F8            mov     dword ptr [ebp-8], eax
    32. 7C91D52F    74 2A              je      short 7C91D55B                   ; 7C91D55B
    33. 7C91D531    6A 06              push    6
    34. 7C91D533    68 9CD5917C        push    7C91D59C                         ; ASCII ".pcle"
    35. 7C91D538    56                 push    esi
    36. 7C91D539    E8 0557FEFF        call    7C902C43                         ; strncmp
    37. 7C91D53E    83C4 0C            add     esp, 0C
    38. 7C91D541    85C0               test    eax, eax
    39. 7C91D543    8945 F8            mov     dword ptr [ebp-8], eax
    40. 7C91D546    74 13              je      short 7C91D55B                   ; 7C91D55B
    41. 7C91D548    6A 08              push    8
    42. 7C91D54A    68 A4D5917C        push    7C91D5A4                         ; ASCII ".sforce"
    43. 7C91D54F    56                 push    esi
    44. 7C91D550    E8 EE56FEFF        call    7C902C43                         ; strncmp
    45. 7C91D555    83C4 0C            add     esp, 0C
    46. 7C91D558    8945 08            mov     dword ptr [ebp+8], eax
    47. 7C91D55B    8B46 0C            mov     eax, dword ptr [esi+C]
    48. 7C91D55E    03C3               add     eax, ebx
    49. 7C91D560    837D 08 00         cmp     dword ptr [ebp+8], 0
    50. 7C91D564    74 29              je      short 7C91D58F                   ; 7C91D58F
    51. 7C91D566    837D F8 00         cmp     dword ptr [ebp-8], 0
    52. 7C91D56A    0F84 26F10100      je      7C93C696                         ; 7C93C696
    53. 7C91D570    C745 08 01000000   mov     dword ptr [ebp+8], 1
    54. 7C91D577    0FB747 06          movzx   eax, word ptr [edi+6]
    55. 7C91D57B    FF45 FC            inc     dword ptr [ebp-4]
    56. 7C91D57E    83C6 28            add     esi, 28
    57. 7C91D581    3945 FC            cmp     dword ptr [ebp-4], eax
    58. 7C91D584  ^ 72 88              jb      short 7C91D50E                   ; 7C91D50E
    59. 7C91D586    32C0               xor     al, al
    60. 7C91D588    5F                 pop     edi
    61. 7C91D589    5E                 pop     esi
    62. 7C91D58A    5B                 pop     ebx
    63. 7C91D58B    C9                 leave
    64. 7C91D58C    C2 0400            retn    4
     
  2. Gelios

    Gelios New Member

    Публикаций:
    0
    Регистрация:
    28 июл 2006
    Сообщения:
    16
    источник:
    http://www.virusbtn.com/pdf/conference_slides/2005/Costin_Raiu.pdf

    If any of the sections in the PE file is called “.aspack”, “.pcle” or “.sforce”, NTDLL calls ZwSetInformationProcess with a certain set of flags. This results in disabling the NX (DEP) protection for the _entire_ process. All 32-bit programs packed by ASPack do not benefit from the hardware DEP in Windows, even if enabled and enforced by the system! Same is true about applications protected by StarForce, or those with “.pcle” sections.

    NTDLL.dll
    _LdrpCheckNXCompatibility@4
    _LdrpCheckNxIncompatibleDllSection@4
     
  3. V0ldemAr

    V0ldemAr New Member

    Публикаций:
    0
    Регистрация:
    28 июл 2005
    Сообщения:
    31
    Адрес:
    Ukraine
    Вопрос закрыт, ЫЫЫ

    Код (Text):
    1. If any of the sections in the PE file is called “.aspack”,
    2. “.pcle” or “.sforce”, NTDLL calls
    3. ZwSetInformationProcess with a certain set of flags
    4. • This results in disabling the NX (DEP) protection for the
    5. _entire_ process
    6. • All 32-bit programs packed by ASPack do not benefit from
    7. the hardware DEP in Windows, even if enabled and
    8. enforced by the system!
    9. • Same is true about applications protected by StarForce, or
    10. those with “.pcle” sections
    Взято с: http://www.virusbtn.com/pdf/conference_slides/2005/Costin_Raiu.pdf
     
  4. V0ldemAr

    V0ldemAr New Member

    Публикаций:
    0
    Регистрация:
    28 июл 2005
    Сообщения:
    31
    Адрес:
    Ukraine
    Опередил (:
     
  5. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    Хорошее программное отключение DEP'a для процесса :)
     
  6. nobodyzzz

    nobodyzzz New Member

    Публикаций:
    0
    Регистрация:
    13 июл 2005
    Сообщения:
    475
    Эта пять =)) микрософт жжот =))
     
  7. PROFi

    PROFi New Member

    Публикаций:
    0
    Регистрация:
    13 июл 2003
    Сообщения:
    690
    Мда опять МS можно обвинять в предвзятом отношении к некоторым компаниям - это ведь нечестной конкуренцией попахивает.
     
  8. reverser

    reverser New Member

    Публикаций:
    0
    Регистрация:
    27 янв 2004
    Сообщения:
    615
    У Рэймонда Чена такие ситуации частенько упоминаются. Вот пример:
    http://blogs.msdn.com/oldnewthing/archive/2003/12/23/45481.aspx

     
  9. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    У Ionescu, кстати, серия статей по SDB, там много интересных вещей можно раздобыть на эту тему.
     
  10. tylerdurden

    tylerdurden New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2004
    Сообщения:
    322
    Он там еще ExecuteFlags смотрит, в sysmain.sdb
     
  11. rain

    rain New Member

    Публикаций:
    0
    Регистрация:
    22 апр 2006
    Сообщения:
    976
    это ты про что?
     
  12. spa

    spa Active Member

    Публикаций:
    0
    Регистрация:
    9 мар 2005
    Сообщения:
    2.240
    Капец, вот до чего доводит "обратная совместимость" )))
     
  13. PROFi

    PROFi New Member

    Публикаций:
    0
    Регистрация:
    13 июл 2003
    Сообщения:
    690
    rain
    Про то что секции “.aspack”, “.pcle” or “.sforce”, проверяются, а допустим какой-нибудь Вася создаст свой протектор и поместит код в секцию ".vasya", но прирогативы вышеуказанных секций она не получит
     
  14. t00x

    t00x New Member

    Публикаций:
    0
    Регистрация:
    15 фев 2007
    Сообщения:
    1.921
    пофиксить ntdll редактором: “.aspack”, “.pcle”, “.sforce” -> ".data" и дело с концом )
     
  15. dermatolog

    dermatolog Member

    Публикаций:
    0
    Регистрация:
    3 фев 2005
    Сообщения:
    406
    Адрес:
    Екатеринбург
    Фтопку протекторы, которые по непонятным причинам не могут установить у своей секции с кодом флаг EXECUTABLE. Почему это рулится на уровне загрузчика OS ваще непонятно - если у разработчиков протекторов есть проблемы с головой и они не удосужились придерживаться документации по PE формату, то эти проблемы должны и решать эти самые разработчики, ну никак не разработчики виндов.
     
  16. dermatolog

    dermatolog Member

    Публикаций:
    0
    Регистрация:
    3 фев 2005
    Сообщения:
    406
    Адрес:
    Екатеринбург
    P.S. Вот еще один пример "кривой" совместимости и латание дыр на уровне OS:
    Код (Text):
    1.         NtHeaders = RtlImageNtHeader( LdrDataTableEntry_Import->DllBase );
    2.         //
    3.         // If the OriginalFirstThunk field does not point inside the image, then ignore
    4.         // it.  This is will detect bogus Borland Linker 2.25 images that did not fill
    5.         // this field in.
    6.         //
    7.  
    8.         if (ImportDescriptor->Characteristics < NtHeaders->OptionalHeader.SizeOfHeaders ||
    9.             ImportDescriptor->Characteristics >= NtHeaders->OptionalHeader.SizeOfImage
    10.            ) {
    11.             OriginalThunk = Thunk;
    12.         } else {
    13.             OriginalThunk = (PIMAGE_THUNK_DATA)((ULONG_PTR)LdrDataTableEntry_Import->DllBase +
    14.                             ImportDescriptor->OriginalFirstThunk);
    15.         }
     
  17. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    боян =)
     
  18. dermatolog

    dermatolog Member

    Публикаций:
    0
    Регистрация:
    3 фев 2005
    Сообщения:
    406
    Адрес:
    Екатеринбург
    Не многие знают, что эта заплатка предназначена только для юзер-модных приложений. Загрузчику дров например пофиг на исполнение линкера от Borland-а и признаком окончание таблицы импорта там является нулевой OriginalFirstThunk.
     
  19. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    dermatolog
    угу. я когда писал пакер просмотрел достаточно много кода. для ядра много интересных дополнительных проверок. Например то что оффсет в файле должен совпадать с RVA.
     
  20. spa

    spa Active Member

    Публикаций:
    0
    Регистрация:
    9 мар 2005
    Сообщения:
    2.240
    Обратная совместимость ;)