Schreibrechte in Code Section setzen [Windows]



  • Hallo, weiss jemand ob man die Zugriffsberechtigung vom Code (.text) Segment änderen kann? Wenn ich in OllyDebugger schaue dann steht in der Memory Map bei .text das ich nur Leserechte habe (was auch stimmt) kann man irgendwo im PE Header oder so einen Wert setzen der es mir erlaubt auch im .text Segment schreiben zu können?

    Zur Laufzeit würde ich mir diese Rechte mit VirtualProtect holen aber ich will halt schon standardmäßig diese Rechte für meine Datei haben.



  • Naja, das hängt wohl davon ab mit welchem Compiler/Assembler du dein Binary erzeugst.

    Unter MSVC gibt's z.B. das und das, wobei das wohl nicht auf die Standard Sections wirkt. Ansonsten kann man wohl immer die entsprechenden Flags im Section Header ändern...



  • In der PE Doku hatte ich schon nachgeschaut aber nichts gefunden ich hab mir gerade aber nochmal die .text Section angeschaut und bin fündig geworden.

    004002F8   2E 74 65 78 >ASCII ".text"        ; SECTION
    00400300   00100000     DD 00001000          ;  VirtualSize = 1000 (4096.)
    00400304   00100000     DD 00001000          ;  VirtualAddress = 1000
    00400308   00040000     DD 00000400          ;  SizeOfRawData = 400 (1024.)
    0040030C   00060000     DD 00000600          ;  PointerToRawData = 600
    00400310   00000000     DD 00000000          ;  PointerToRelocations = 0
    00400314   00000000     DD 00000000          ;  PointerToLineNumbers = 0
    00400318   0000         DW 0000              ;  NumberOfRelocations = 0
    0040031A   0000         DW 0000              ;  NumberOfLineNumbers = 0
    0040031C   20000060     DD 60000020          ;  Characteristics = CODE|EXECUTE|READ
    

    Das hier ist die interessante Stelle:

    0040031C   20000060     DD 60000020          ;  Characteristics = CODE|EXECUTE|READ
    

    Ich hab gerade mal mit ein paar Werten rumprobiert: 20000060 in 20000080 umändern und schon hat man die Schreibrechte.

    Oh, da kann ich auch die Werte aus der Doku eintragen.^^(War gerade leicht verwirrt o_O )

    Also 20000060 umändern in 00000080 dann bekommt man auch die Schreibrechte.

    Bedeutung zu: 00000080 bzw. 80000000

    IMAGE_SCN_MEM_WRITE	0x80000000	The section can be written to.
    

    So hab ich es getestet bsp:

    Irgendein Code in der Code Section

    00400100  xor eax,eax
    00400104  nop
    00400108  nop
    0040010C  mov eax,400100
    00400100  mov dword ptr [eax],90
    

    Aus xor eax,eax wird dann ein nop.

    Danke



  • Also zumindest in MASM kann man sich eine Section mit entsprechenden Attributen erstellen:

    foo SEGMENT EXECUTE READ WRITE
    ;...
    foo ENDS
    

    (MASM 8+)


Anmelden zum Antworten