Как зашифровать драйвер

Тема в разделе "WASM.BEGINNERS", создана пользователем VirMaker, 24 июн 2010.

  1. VirMaker

    VirMaker New Member

    Публикаций:
    0
    Регистрация:
    4 дек 2008
    Сообщения:
    20
    На примере NtBuild из статей Four-F'а

    EP в секции ИНИТ
    Код (Text):
    1. INIT:000104E0 ; NTSTATUS __stdcall DriverEntry(PDRIVER_OBJECT DriverObject, PUNICODE_STRING RegistryPath)
    2. INIT:000104E0                 public DriverEntry
    3. INIT:000104E0 DriverEntry     proc near
    4. INIT:000104E0
    5. INIT:000104E0 DeviceObject    = dword ptr -8
    6. INIT:000104E0 var_4           = dword ptr -4
    7. INIT:000104E0 DriverObject    = dword ptr  8
    8. INIT:000104E0 RegistryPath    = dword ptr  0Ch
    9. INIT:000104E0
    10. INIT:000104E0                 push    ebp
    11. INIT:000104E1                 mov     ebp, esp
    12. INIT:000104E3                 add     esp, 0FFFFFFF8h
    13. INIT:000104E6                 mov     [ebp+var_4], 0C0000182h
    14. INIT:000104ED                 lea     eax, [ebp+DeviceObject]
    15. INIT:000104F0                 push    eax             ; DeviceObject
    16. INIT:000104F1                 push    0               ; Exclusive
    17. INIT:000104F3                 push    0               ; DeviceCharacteristics
    18. INIT:000104F5                 push    22h             ; DeviceType
    19. INIT:000104F7                 push    offset DeviceName ; DeviceName
    20. INIT:000104FC                 push    0               ; DeviceExtensionSize
    21. INIT:000104FE                 push    [ebp+DriverObject] ; DriverObject
    22. INIT:00010501                 call    IoCreateDevice
    23. INIT:00010506                 or      eax, eax
    24. INIT:00010508                 jnz     short loc_1054D
    25. INIT:0001050A                 push    offset DeviceName ; DeviceName
    26. INIT:0001050F                 push    offset SymbolicLinkName ; SymbolicLinkName
    27. INIT:00010514                 call    IoCreateSymbolicLink
    28. INIT:00010519                 or      eax, eax
    29. INIT:0001051B                 jnz     short loc_10545
    30. INIT:0001051D                 mov     eax, [ebp+DriverObject]
    31. INIT:00010520                 mov     dword ptr [eax+34h], offset sub_103D5
    32. INIT:00010527                 mov     dword ptr [eax+38h], offset sub_10305
    33. INIT:0001052E                 mov     dword ptr [eax+40h], offset sub_10305
    34. INIT:00010535                 mov     dword ptr [eax+44h], offset sub_10329
    35. INIT:0001053C                 mov     [ebp+var_4], 0
    36. INIT:00010543                 jmp     short loc_1054D
    37. INIT:00010545 ; ---------------------------------------------------------------------------
    38. INIT:00010545
    39. INIT:00010545 loc_10545:                              ; CODE XREF: DriverEntry+3Bj
    40. INIT:00010545                 push    [ebp+DeviceObject] ; DeviceObject
    41. INIT:00010548                 call    IoDeleteDevice
    42. INIT:0001054D
    43. INIT:0001054D loc_1054D:                              ; CODE XREF: DriverEntry+28j
    44. INIT:0001054D                                         ; DriverEntry+63j
    45. INIT:0001054D                 mov     eax, [ebp+var_4]
    46. INIT:00010550                 leave
    47. INIT:00010551                 retn    8
    48. INIT:00010551 DriverEntry     endp
    49. INIT:00010551
    50. INIT:00010551 ; ---------------------------------------------------------------------------
    51. INIT:00010554 __IMPORT_DESCRIPTOR_ntoskrnl_exe dd rva off_1057C ; Import Name Table
    52. INIT:00010558                 dd 0                    ; Time stamp
    53. INIT:0001055C                 dd 0                    ; Forwarder Chain
    54. INIT:00010560                 dd rva aNtoskrnl_exe    ; DLL Name
    55. INIT:00010564                 dd rva NtBuildNumber    ; Import Address Table
    56. INIT:00010568                 dd 5 dup(0)
    57. INIT:0001057C ;
    58. INIT:0001057C ; Import names for ntoskrnl.exe
    59. INIT:0001057C ;
    60. INIT:0001057C off_1057C       dd rva word_105F4       ; DATA XREF: INIT:__IMPORT_DESCRIPTOR_ntoskrnl_exeo
    61. INIT:00010580                 dd rva word_105B8
    62. INIT:00010584                 dd rva word_105CA
    63. INIT:00010588                 dd rva word_105E2
    64. INIT:0001058C                 dd rva word_105A0
    65. INIT:00010590                 dd rva word_10604
    66. INIT:00010594                 dd rva word_1061A
    67. INIT:00010598                 dd rva word_10626
    68. INIT:0001059C                 dd 0
    69. INIT:000105A0 word_105A0      dw 127h                 ; DATA XREF: INIT:0001058Co
    70. INIT:000105A2                 db 'IoDeleteSymbolicLink',0
    71. INIT:000105B7                 align 4
    72. INIT:000105B8 word_105B8      dw 125h                 ; DATA XREF: INIT:00010580o
    73. INIT:000105BA                 db 'IoDeleteDevice',0
    74. INIT:000105C9                 align 2
    75. INIT:000105CA word_105CA      dw 121h                 ; DATA XREF: INIT:00010584o
    76. INIT:000105CC                 db 'IoCreateSymbolicLink',0
    77. INIT:000105E1                 align 2
    78. INIT:000105E2 word_105E2      dw 11Bh                 ; DATA XREF: INIT:00010588o
    79. INIT:000105E4                 db 'IoCreateDevice',0
    80. INIT:000105F3                 align 4
    81. INIT:000105F4 word_105F4      dw 279h                 ; DATA XREF: INIT:off_1057Co
    82. INIT:000105F6                 db 'NtBuildNumber',0
    83. INIT:00010604 word_10604      dw 26Dh                 ; DATA XREF: INIT:00010590o
    84. INIT:00010606                 db 'MmUserProbeAddress',0
    85. INIT:00010619                 align 2
    86. INIT:0001061A word_1061A      dw 2Dh                  ; DATA XREF: INIT:00010594o
    87. INIT:0001061C                 db 'DbgPrint',0
    88. INIT:00010625                 align 2
    89. INIT:00010626 word_10626      dw 195h                 ; DATA XREF: INIT:00010598o
    90. INIT:00010628                 db 'IofCompleteRequest',0
    91. INIT:0001063B                 align 4
    92. INIT:0001063C aNtoskrnl_exe   db 'ntoskrnl.exe',0     ; DATA XREF: INIT:00010560o
    93. INIT:00010649                 align 20h
    94. INIT:00010649 INIT            ends
    Как можно зашифровать этот код что бы потом лоадер в памяти расшифровывал этот код?
    Готовые решения не интересуют пишу на MASM
     
  2. make

    make New Member

    Публикаций:
    0
    Регистрация:
    29 июл 2009
    Сообщения:
    59
    Xor'ом например
     
  3. JCronuz

    JCronuz New Member

    Публикаций:
    0
    Регистрация:
    26 сен 2007
    Сообщения:
    1.240
    Адрес:
    Russia
    Ничем не отличается от обычного пакера со стабом(загрузщиком), создается новая секция - в ней допустим загрузщик, меняем точку входа на нашу секцию, в которой записан загрузщик/разшифровщик, который разшифровывает покриптованую секцию(предварительно покриптовать) XOR - обратимая, можно сжать будет лучше, например aplib, примеров туева хуча, учить искать не хочется