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+)