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

Тема в разделе "WASM.BEGINNERS", создана пользователем Flaer, 27 июл 2022.

  1. Flaer

    Flaer Member

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

    ormoulu Active Member

    Публикаций:
    0
    Регистрация:
    24 янв 2011
    Сообщения:
    999
    Кстати тоже интересно.
    Помню они ещё анонсировали принудительное перемещение образов, слинкованых со старыми флагами, по какой-то хитрой схеме.
     
  3. vitokop

    vitokop Member

    Публикаций:
    0
    Регистрация:
    20 май 2006
    Сообщения:
    30
  4. M0rg0t

    M0rg0t Well-Known Member

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

    Flaer Member

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

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    4.847
    Так под x64 есть RIP-адресация (или как там это называлось?), абсолютные адреса могут быть и не нужоны никому).
     
  7. Flaer

    Flaer Member

    Публикаций:
    0
    Регистрация:
    10 дек 2019
    Сообщения:
    32
    Могут быть, но это не факт, неизвестно же что там компилятор нахреновертил, может там только RIP адресация, а может и не только она
     
  8. vitokop

    vitokop Member

    Публикаций:
    0
    Регистрация:
    20 май 2006
    Сообщения:
    30
    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 <===== +++++++++++
    --- Сообщение объединено, 28 июл 2022 ---
    OS: windows 10 LTSE 64-bit
     
  9. aa_dav

    aa_dav Active Member

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

    M0rg0t Well-Known Member

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

    maestroant New Member

    Публикаций:
    0
    Регистрация:
    3 июн 2019
    Сообщения:
    11
    Так а может отрыть отладчиком и посмотреть на код? чего гадать то? залей ехе-шник