首页 文章

查找原始入口点

提问于
浏览
4

我希望能够通过查看PE头来找出出现在入口点的代码的位置 .

例如,这段代码是我程序的起始代码(401000h)

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

我想知道这段代码的来源 . 如何在不手动扫描文件的情况下找到它? (为了完成示例,这里是来自同一文件的hexdump,代码现在位于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

如何从虚拟入口点(401000h)到原始入口点(200h)?我当然试着自己解决它 . 但是我错过了一些东西 . 起初我想:

.text [Entrypoint(1000h) - VirtualOffset(1000d)] =原始入口点,因为文件对齐= 200,原始入口点在我的.text部分的最开头,我想我可以将它用于所有可执行文件 .

Solved, I made stupid mistakes when calculating the raw entry point

.text [入口点 - 虚拟偏移]文件对齐=原始入口点(相对于.text部分)

2 回答

  • 0

    要自己在文件中找到偏移量,您需要查看_IMAGE_NT_HEADERS结构 . 从这里你可以获得你对ImageBase感兴趣的成员所在的IMAGE_OPTIONAL_HEADER . 您可以使用EditBin / REBASE更改其值,因此几乎不需要滚动您自己的工具 .

    For reference how you can determine the entry point via dumpbin.

    您可以使用dumpbin / headers

    dumpbin /headers \Windows\bfsvc
    
    Dump of file \Windows\bfsvc.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
    

    对于入口点,图像基值是相关的 . 但这仅适用于未启用ASLR的图像 . 对于他们,选择随机基地址(128个不同的地址中的1个) . 指示图像是否启用ASLR的标志是值0x40,它在DLL特性中设置 .

    8140 DLL characteristics
    

    例如,对于svchost.exe,它设置为较旧的程序,通常为0 .

    你的,Alois Kraus

  • 4

    看一下这个帖子,包括一个详细解释的答案:Calculating the file offset of a entry point in a PE file

    AddressOfRawEntryPoint(在EXE文件中)= AddressOfEntryPoint .text [PointerToRawData] - .text [VirtualAddress]

相关问题