ASLR и отсутствие релоков

Discussion in 'WASM.BEGINNERS' started by Flaer, Jul 27, 2022.

  1. Flaer

    Flaer Member

    Blog Posts:
    0
    Joined:
    Dec 10, 2019
    Messages:
    32
    Дорогие форумчане, подсобите информацией, как загрузчик винды помещает образ по случайной базе, при этом не обладая информацией о релоках ? (в моем .exe релоков нет)
    --- Сообщение объединено, Jul 27, 2022 ---
    Возможно где-то есть флаг, говорящий о том , что образ полностью переносим и при этом не имеет релоков (базонезависим), поэтому так и получается ?
     
    2Hard2Forget likes this.
  2. ormoulu

    ormoulu Well-Known Member

    Blog Posts:
    0
    Joined:
    Jan 24, 2011
    Messages:
    1,206
    Кстати тоже интересно.
    Помню они ещё анонсировали принудительное перемещение образов, слинкованых со старыми флагами, по какой-то хитрой схеме.
     
  3. vitokop

    vitokop Member

    Blog Posts:
    0
    Joined:
    May 20, 2006
    Messages:
    48
  4. M0rg0t

    M0rg0t Well-Known Member

    Blog Posts:
    0
    Joined:
    Oct 18, 2010
    Messages:
    1,585
    vitokop, так по ссылке указано, что если нет релоков, то файл не загрузится по force ASLR.
    Хз как можно загрузить, если нет релоков, откуда и кто должен знать, какие смещения в файле абсолютные? Когда кодят LoadPE , то файлы без релоков тупо грузят по их imagebase (сам PE лоадер билдился с более высокой базой). А так , это надо какой-то ИИ , который на лету дизассемблирует файл и поменяет все, ну или я не понимаю ничего в РЕ файлах.
     
  5. Flaer

    Flaer Member

    Blog Posts:
    0
    Joined:
    Dec 10, 2019
    Messages:
    32
    Более высокая база отличная от стандартной это уже звоночек, обычно базу оставляют стандартной, но сам LoadPE код отрабатывает в виде шеллкода в динамично выделенной памяти
    Либо как это делается в пакерах просто цепляется новая секция с загрузчиком и делается ребилд файла, что бы точка входа по прежнему оставалась в первой секции кода, как в оригинале
    Но тут суть не в этом, я до сих пор не понимаю как мой exe без релоков грузится с ASLR по разной базе
     
    M0rg0t likes this.
  6. Rel

    Rel Well-Known Member

    Blog Posts:
    2
    Joined:
    Dec 11, 2008
    Messages:
    5,317
    Так под x64 есть RIP-адресация (или как там это называлось?), абсолютные адреса могут быть и не нужоны никому).
     
  7. Flaer

    Flaer Member

    Blog Posts:
    0
    Joined:
    Dec 10, 2019
    Messages:
    32
    Могут быть, но это не факт, неизвестно же что там компилятор нахреновертил, может там только RIP адресация, а может и не только она
     
  8. vitokop

    vitokop Member

    Blog Posts:
    0
    Joined:
    May 20, 2006
    Messages:
    48
    32-бит: загруженный и файл на диске ОДИНАКОВЫ

    File Type: EXECUTABLE
    OFFSET NT HEADER: 256(0100)
    FILE HEADER VALUES
    14C machine (i386)
    8 number of sections
    2A425E19 time data stamp "06/20/1992 01:22:17"
    00000000 file pointer to symbol table
    00000000 numbers of symbols
    000000E0 size of optional header
    818F characteristics
    Relocation stripped
    Executable
    Line numbers stripped
    Local symbols stripped
    Lo-Bytes of machine word are reversed
    32 bit word machine
    Hi-Bytes of machine word are reversed

    OPTIONAL HEADER VALUES
    010B magic # PE32 win32
    2.25 linker version
    006F4600 size of code
    00353E00 size of initialized data
    00000000 size of uninitialized data
    006F461C Address Of Entry Point
    00001000 base of code
    006F6000 base of data
    00400000 image base <+++++++++++++++++++++++++++

    >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

    64 бит Explorer.exe

    ЗАГРУЖЕННЫЙ

    FILE HEADER VALUES

    00F0: 00004550 { Signature if 0x00004550 then PE}
    00F4: 8664 { Machine its: x64 }
    00F6: 0008 { NumberOfSections }
    ....................................................
    0104: 00F0 { SizeOfOptionalHeader }
    0106: 0022 { Characteristics }
    { $0002 File is executable (i.e. no unresolved externel references) }
    { $0020 Application can handle > 2GB address}

    IMAGE_OPTION_HEADER
    0108: 020B { Magic PE32+}
    ..........................................................................
    0118: 0009D3F0 { AddressOfEntryPoint }
    011C: 00001000 { BaseOfCode }
    0120: 00007FF619F10000 { ImageBase } <===== +++++++++++

    На ДИСКЕ
    Win64 PE file
    FILE: C:\Windows\explorer.exe
    SizeOfFile 4 383 480 (0x0042E2F8)
    SizeOfImage 4 366 336 (0x0042A000)

    File Type: EXECUTABLE

    OFFSET NT HEADER: 240(00F0)
    FILE HEADER VALUES
    8664 machine (AMD64)
    8 number of sections
    ........................................................
    0022 characteristics
    Executable
    Application can handle > 2GB address

    OPTIONAL HEADER VALUES
    020B magic # (PE32+ win64)
    .............................................................
    0009D3F0 Address Of Entry Point
    00001000 base of code
    0000000140000000 image base <===== +++++++++++
    --- Сообщение объединено, Jul 28, 2022 ---
    OS: windows 10 LTSE 64-bit
     
  9. aa_dav

    aa_dav Active Member

    Blog Posts:
    0
    Joined:
    Dec 24, 2008
    Messages:
    525
    Факт - в x64 RIP-адресация это приматив и дефолт и он не просто "возможен", а он вменяется по умолчанию: https://wasm.in/threads/principy-ko...x86-64-ili-exal-prefiks-cherez-prefiks.34390/
    Т.е. нужно проделать дополнительную работу (ненужную в обычной программе) чтобы вернуться из RIP-адресации к абсолютной, а не наоборот.
    Возможно достаточно проверить, что программа скомпилировано штатным компилятором типа MSVC чтобы делать такое не опасаясь особо. Или действительно есть флаг, что в x64 программе нет извратов.
     
    Last edited: Jul 30, 2022
  10. M0rg0t

    M0rg0t Well-Known Member

    Blog Posts:
    0
    Joined:
    Oct 18, 2010
    Messages:
    1,585
    Да в х64 понятно, а вот как 32 битный файл грузится по произвольному адресу - загадка. Разве что там нет никаких абсолютных смещений, т.е. написан в шеллкод стиле. Посмотреть бы файл.
     
  11. maestroant

    maestroant New Member

    Blog Posts:
    0
    Joined:
    Jun 3, 2019
    Messages:
    14
    Так а может отрыть отладчиком и посмотреть на код? чего гадать то? залей ехе-шник