На примере NtBuild из статей Four-F'а EP в секции ИНИТ Код (Text): INIT:000104E0 ; NTSTATUS __stdcall DriverEntry(PDRIVER_OBJECT DriverObject, PUNICODE_STRING RegistryPath) INIT:000104E0 public DriverEntry INIT:000104E0 DriverEntry proc near INIT:000104E0 INIT:000104E0 DeviceObject = dword ptr -8 INIT:000104E0 var_4 = dword ptr -4 INIT:000104E0 DriverObject = dword ptr 8 INIT:000104E0 RegistryPath = dword ptr 0Ch INIT:000104E0 INIT:000104E0 push ebp INIT:000104E1 mov ebp, esp INIT:000104E3 add esp, 0FFFFFFF8h INIT:000104E6 mov [ebp+var_4], 0C0000182h INIT:000104ED lea eax, [ebp+DeviceObject] INIT:000104F0 push eax ; DeviceObject INIT:000104F1 push 0 ; Exclusive INIT:000104F3 push 0 ; DeviceCharacteristics INIT:000104F5 push 22h ; DeviceType INIT:000104F7 push offset DeviceName ; DeviceName INIT:000104FC push 0 ; DeviceExtensionSize INIT:000104FE push [ebp+DriverObject] ; DriverObject INIT:00010501 call IoCreateDevice INIT:00010506 or eax, eax INIT:00010508 jnz short loc_1054D INIT:0001050A push offset DeviceName ; DeviceName INIT:0001050F push offset SymbolicLinkName ; SymbolicLinkName INIT:00010514 call IoCreateSymbolicLink INIT:00010519 or eax, eax INIT:0001051B jnz short loc_10545 INIT:0001051D mov eax, [ebp+DriverObject] INIT:00010520 mov dword ptr [eax+34h], offset sub_103D5 INIT:00010527 mov dword ptr [eax+38h], offset sub_10305 INIT:0001052E mov dword ptr [eax+40h], offset sub_10305 INIT:00010535 mov dword ptr [eax+44h], offset sub_10329 INIT:0001053C mov [ebp+var_4], 0 INIT:00010543 jmp short loc_1054D INIT:00010545 ; --------------------------------------------------------------------------- INIT:00010545 INIT:00010545 loc_10545: ; CODE XREF: DriverEntry+3Bj INIT:00010545 push [ebp+DeviceObject] ; DeviceObject INIT:00010548 call IoDeleteDevice INIT:0001054D INIT:0001054D loc_1054D: ; CODE XREF: DriverEntry+28j INIT:0001054D ; DriverEntry+63j INIT:0001054D mov eax, [ebp+var_4] INIT:00010550 leave INIT:00010551 retn 8 INIT:00010551 DriverEntry endp INIT:00010551 INIT:00010551 ; --------------------------------------------------------------------------- INIT:00010554 __IMPORT_DESCRIPTOR_ntoskrnl_exe dd rva off_1057C ; Import Name Table INIT:00010558 dd 0 ; Time stamp INIT:0001055C dd 0 ; Forwarder Chain INIT:00010560 dd rva aNtoskrnl_exe ; DLL Name INIT:00010564 dd rva NtBuildNumber ; Import Address Table INIT:00010568 dd 5 dup(0) INIT:0001057C ; INIT:0001057C ; Import names for ntoskrnl.exe INIT:0001057C ; INIT:0001057C off_1057C dd rva word_105F4 ; DATA XREF: INIT:__IMPORT_DESCRIPTOR_ntoskrnl_exeo INIT:00010580 dd rva word_105B8 INIT:00010584 dd rva word_105CA INIT:00010588 dd rva word_105E2 INIT:0001058C dd rva word_105A0 INIT:00010590 dd rva word_10604 INIT:00010594 dd rva word_1061A INIT:00010598 dd rva word_10626 INIT:0001059C dd 0 INIT:000105A0 word_105A0 dw 127h ; DATA XREF: INIT:0001058Co INIT:000105A2 db 'IoDeleteSymbolicLink',0 INIT:000105B7 align 4 INIT:000105B8 word_105B8 dw 125h ; DATA XREF: INIT:00010580o INIT:000105BA db 'IoDeleteDevice',0 INIT:000105C9 align 2 INIT:000105CA word_105CA dw 121h ; DATA XREF: INIT:00010584o INIT:000105CC db 'IoCreateSymbolicLink',0 INIT:000105E1 align 2 INIT:000105E2 word_105E2 dw 11Bh ; DATA XREF: INIT:00010588o INIT:000105E4 db 'IoCreateDevice',0 INIT:000105F3 align 4 INIT:000105F4 word_105F4 dw 279h ; DATA XREF: INIT:off_1057Co INIT:000105F6 db 'NtBuildNumber',0 INIT:00010604 word_10604 dw 26Dh ; DATA XREF: INIT:00010590o INIT:00010606 db 'MmUserProbeAddress',0 INIT:00010619 align 2 INIT:0001061A word_1061A dw 2Dh ; DATA XREF: INIT:00010594o INIT:0001061C db 'DbgPrint',0 INIT:00010625 align 2 INIT:00010626 word_10626 dw 195h ; DATA XREF: INIT:00010598o INIT:00010628 db 'IofCompleteRequest',0 INIT:0001063B align 4 INIT:0001063C aNtoskrnl_exe db 'ntoskrnl.exe',0 ; DATA XREF: INIT:00010560o INIT:00010649 align 20h INIT:00010649 INIT ends Как можно зашифровать этот код что бы потом лоадер в памяти расшифровывал этот код? Готовые решения не интересуют пишу на MASM
Ничем не отличается от обычного пакера со стабом(загрузщиком), создается новая секция - в ней допустим загрузщик, меняем точку входа на нашу секцию, в которой записан загрузщик/разшифровщик, который разшифровывает покриптованую секцию(предварительно покриптовать) XOR - обратимая, можно сжать будет лучше, например aplib, примеров туева хуча, учить искать не хочется