format PE GUI 4.0 at 0x400000 include 'win32a.inc' section '.text' code readable executable ; Sekcie s kodom pravo na zapis vacsinou z bezpcnostnych dovodov nemaju nastavene. Preto je potrebne nasledujucim volanim API nastavit ; V nasledujucom pouziti ziadame nastavit prava len na 1 byte, OS windows dokaze nastavit prava iba po strankach - 0x1000 bytov. ; preto mozme prepisovat aj dalsie byty. invoke VirtualProtect,JNE_INSTRUCTION, 1, PAGE_EXECUTE_READWRITE,old_protect cmp eax,0 jz EXIT ;SMC - toto prepise instrukciu JNE na JE mov byte [JNE_INSTRUCTION],0x74 ;xor byte [JNE_INSTRUCTION],0x01 ;JNE = "0x75"; 0x75 xor 0x01 = 0x74 ;CMP: if (4=5) then MessageBox(...) mov eax, 4 mov ebx, 5 cmp eax, ebx JNE_INSTRUCTION: jne EXIT_1 ; v momente, ked sa zacne vykonavat tato instrukcia, tak uz bude predchadzajucim "mov"-om prepisana invoke MessageBoxA, 0, message_text,message_caption, MB_OK+MB_ICONINFORMATION EXIT_1: ; obnova prav - toto uz aplikacii nepomoze, je to tu len pre uplnost invoke VirtualProtect,JNE_INSTRUCTION, 1, [old_protect],old_protect EXIT: ret section '.bss' readable writeable old_protect dd ? section '.data' readable message_text db 'Zazrak!',0 message_caption db 'OK',0 section '.idata' import data readable writeable library \ kernel32,'KERNEL32.DLL',\ user32 ,'USER32.DLL' import kernel32,\ VirtualProtect ,'VirtualProtect' import user32,\ MessageBoxA ,'MessageBoxA' ;section '.reloc' fixups data readable discardable