windows - Find det rå indgangspunkt

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg vil gerne være i stand til at finde ud af, hvor koden på indgangspunktet kommer fra ved at se på PE-overskriften.


For eksempel er dette stykke kode startkode for mit program (401000h)


00401000 >/$ 58             POP EAX                                  ;  kernel32.76E93677
00401001  |. 2D 77360100    SUB EAX,13677
00401006  |. BB 4A184000    MOV EBX,<JMP.&kernel32.VirtualProtect>


Jeg vil gerne vide, hvor denne kode kommer fra. Hvordan kan jeg finde det uden at scanne min fil manuelt? (for at fuldføre eksemplet, her er en hexdump fra samme fil, koden ligger nu ved 200h)


Offset      0  1  2  3  4  5  6  7   8  9  A  B  C  D  E  F

00000200   58 2D 77 36 01 00 BB 4A  18 40 00 


Hvordan kan jeg komme fra mit virtuelle indgangspunkt (401000h) til det rå indgangspunkt (200h)?
Jeg forsøgte selv at løse det selv. Men jeg mangler noget. Først tænkte jeg:


.text [[Entrypoint (1000h) - VirtualOffset (1000d)]]=rå indgangspunkt
siden filjusteringen=200, og det rå indgangspunkt var i starten af ​​min .text sektion, troede jeg, jeg kunne bruge dette til alle eksekverbare filer.


Løst, jeg lavede dumme fejl ved beregning af det rå indgangspunkt


.text [[Indgangspunkt - Virtual offset]] + Fil Alignment=Rå indtastningspunkt (i forhold til .text sektion)

Bedste reference


For at finde forskydningen i filen selv skal du kigge på \_IMAGE\_NT\_HEADERS strukturen. Herfra kan du få IMAGE\_OPTIONAL\_HEADER hvor
medlemmet du er interesseret i ImageBase er. Du kan ændre sin værdi med EditBin/REBASE, så der er ikke behov for at rulle dit eget værktøj. [5] [6]


Til reference, hvordan du kan bestemme indgangspunktet via dumpbin.


Du kan bruge
dumpbin/headers


dumpbin /headers Windowsfsvc

Dump of file Windowsfsvc.exe

PE signature found

File Type: EXECUTABLE IMAGE

FILE HEADER VALUES
             14C machine (x86)
               4 number of sections
        4A5BBFB3 time date stamp Tue Jul 14 01:13:55 2009
               0 file pointer to symbol table
               0 number of symbols
              E0 size of optional header
             102 characteristics
                   Executable
                   32 bit word machine

OPTIONAL HEADER VALUES
             10B magic # (PE32)
            9.00 linker version
            DE00 size of code
            2000 size of initialized data
               0 size of uninitialized data
            4149 entry point (01004149)
            1000 base of code
            F000 base of data
         1000000 image base (01000000 to 01011FFF)
            1000 section alignment
             200 file alignment


For indgangspunktet er billedbasisværdien relevant. Men det gælder kun billeder, der ikke er ASLR-aktiverede. For dem vælges en tilfældig basisadresse (1 ud af 128 forskellige).
Flagget, der angiver, om et billede er ASLR aktiveret, er værdien 0x40, som er angivet i DLL-egenskaber.


8140 DLL characteristics


For svchost.exe for eksempel er den indstillet til ældre programmer, er det generelt 0.


Med venlig,
  Alois Kraus

Andre referencer 1


Se på denne tråd, herunder et svar med en detaljeret forklaring: Beregning af filforskydningen for et indgangspunkt i en PE-fil



  AddressOfRawEntryPoint (i EXE-fil)=AddressOfEntryPoint + .text [[PointerToRawData]] - .text [[VirtualAddress]]