Re: Preventing exploitation with rebasing

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



David Litchfield <david@ngssoftware.com> writes:

> Going back to exe image files and rebasing. Surely they can be rebased even
> without a .reloc section? All I need to do is edit the image base in the PE
> header then parse the assembly looking for absolute addresses such as
> function addresses, static variables etc and modify these addresses, too.

This can't work in general.  You need to have a list of what should be
relocated (the .reloc section), because otherwise you're just guessing
and may well guess wrong.

> 
> For example assume an image base for an exe is 0x00400000 and the c code
> does
> 
> printf("hello");
> 
> This will generate something like
> 
> push 0x0042001C    // push pointer to hello
> call 0x00401060       // call printf
> 
> If I then make the image base 0x00410000 and I also change
> 
> push 0x0042001C
> call 0x00401060
> 
> to become
> 
> push 0x0043001C
> call 0x00411060
> 
> then the exe should still run (as long as you get all the absolute
> addresses) and it has been rebased.
> 
> ?

What would happen in this case?:

   ...
   CheckSectionFlags (section,
                      IMAGE_SCN_ALIGN_8BYTES | IMAGE_SCN_MEM_PURGEABLE);
   ...

It may generate something like

push 0x00420000   // push flags
push 0x00420148   // push section
call 0x00401290   // call CheckSectionFlags

If you try to rebase that without a .reloc section, as you describe,
you'll change the meaning of the program because you have no way to
tell that the 0x00420000 is a constant and not a relocatable reference
to something else.  (The IMAGE... flags are from winnt.h and probably
meaningless the way I've used them above, but you get the idea...)

-- 
Todd Sabin                                          <tsabin@optonline.net>
BindView RAZOR Team                            <tsabin@razor.bindview.com>

[Index of Archives]     [Linux Security]     [Netfilter]     [PHP]     [Yosemite News]     [Linux Kernel]

  Powered by Linux