Вопрос по структуре PE-файла

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by GRRRL Power, 17 Aug 2010.

  1. GRRRL Power

    GRRRL Power Elder - Старейшина

    Joined:
    13 Jul 2010
    Messages:
    823
    Likes Received:
    185
    Reputations:
    84
    Изучаю понемногу формат PE-файлов, пишу простейший дампер PE-файлов. С "правильными" PE, созданными по стандарту, всё ОК, но тут я наткнулся на упакованный (вроде бы как upack'ом), и начались вопросы.

    Во-первых, DATA_DIRECTORY странным образом искажена (кроме того, в этом exe она имеет лишь 10 элементов):

    [​IMG]


    Адреса и размеры почти всех элементов DATA_DIRECTORY выходят далеко за пределы секций (в именах секций, кстати, тоже непонятно что):

    Code:
    Section name: PSяХ«лзГ
    Section read: [executable] [readable] [writeable] [RVA: 00001000 RVA+RawSize: 000011F0, RAW address: 00000010]
    Section name: 
    Section read: [executable] [readable] [writeable] [RVA: 00012000 RVA+RawSize: 00017404, RAW address: 00000200]
    Section name: FA
    Section read: [executable] [readable] [writeable] [RVA: 0001A000 RVA+RawSize: 0001A1F0, RAW address: 00000010]
    
    (а у первой и последней секций еще и адреса совпадают физические.)

    Единственная попадающая внутрь последней секции таблица импорта (в DATA_DIRECTORY элемент 1) тоже искажена:

    [​IMG]

    Тут вообще ни один из адресов не является правильным.

    Отсюда три вопроса:
    1. Как вообще работать с таким exe?
    2. Имеет ли он таблицу импорта?
    2. Получается, системному загрузчику можно скармливать всё что угодно, и это будет загружаться и работать?

    Ссылка на сам exe (это не вирус, он просто играет музыку): http://www.sendspace.com/file/hoxejc
     
    #1 GRRRL Power, 17 Aug 2010
    Last edited: 17 Aug 2010
  2. zeppe1in

    zeppe1in Elder - Старейшина

    Joined:
    12 Jul 2006
    Messages:
    343
    Likes Received:
    66
    Reputations:
    18
    ну типо вот
    https://cracklab.ru/f/index.php?action=vthread&topic=4611&forum=1&page=-1
    отсюда и сырбор.
    Импорт должен быть. Loadlibrary и GetProcAddress.

    системному загрузчику можно скармливать всё что он проглотит)
     
    1 person likes this.