Как по хорошему сдвинуть базу образа?

Тема в разделе "WASM.WIN32", создана пользователем dyn, 8 ноя 2009.

  1. dyn

    dyn New Member

    Публикаций:
    0
    Регистрация:
    30 окт 2009
    Сообщения:
    566
    Всем привет. В общем что и зачем - особо вдаваться в подробности не буду. И так ясно зачем.

    Задача:
    Есть файл с нестандартной базой. К примеру 0x11220000.
    Нужно накрыть файл пакером и сдвинуть базу на нормальную, чтобы убрать лишний критерий для детекта.

    Сделать VirtualAlloc как оказалось - недостаточно.
    GetModuleHandle(0) возвращает не то значение. Перехватил.
    Вроде все нормуль, но... Файл почему-то на системах Виста и выше некорректно начинает работать с ресурсами и появляются непонятные баги.

    В общем объясните мне пожалуйста, кто разбирается в системных структурах, где хранится база образа процесса, кроме хидера и пеба, как до нее добраться и перебить, чтобы все апи функции возвращали "правильный" результат и система не заподозрился, что изначально процесс прогрузился на другой базе.
     
  2. Mankubus

    Mankubus New Member

    Публикаций:
    0
    Регистрация:
    14 авг 2009
    Сообщения:
    76
    GetModuleHandle считывает значение ImageBase из PEB, там и модифицировать придется. Насчет висты и выше не знаю.
     
  3. dyn

    dyn New Member

    Публикаций:
    0
    Регистрация:
    30 окт 2009
    Сообщения:
    566
    7D4E3EF9 64:A1 18000000 MOV EAX,DWORD PTR FS:[18]
    7D4E3EFF 8B40 30 MOV EAX,DWORD PTR DS:[EAX+30]
    7D4E3F02 8B40 08 MOV EAX,DWORD PTR DS:[EAX+8]

    --------------
    C Пебом уже разобрался. С ресурсами по прежнему хня какая-то. Апи для работы с ресурсами не отрабатывают. Не находят ресурсов.
    Если базу не трогать, а строго распаковывать на старую - тогда все ок.

    С чем может быть связано?
     
  4. dyn

    dyn New Member

    Публикаций:
    0
    Регистрация:
    30 окт 2009
    Сообщения:
    566
    вверху GetModuleHandleW отреверсил и нашел участок кода. В общем пеб пропатчил. GetModuleHandle(0) отрабатывает теперь нормуль. А вот ресурсы - увы.
     
  5. Mankubus

    Mankubus New Member

    Публикаций:
    0
    Регистрация:
    14 авг 2009
    Сообщения:
    76
    Ну поменяли это значение в PEB. Данные в памяти остались по старым адресам лежать. Таким образом, если у нас была база 0x11220000 а стала, допустим, 0x00400000, тогда функции, использующие значение из PEB, будут пролетать.
    Можно отреверсить ресурсные функции, посмотреть, может так и есть там.
     
  6. dyn

    dyn New Member

    Публикаций:
    0
    Регистрация:
    30 окт 2009
    Сообщения:
    566
    Mankubus
    Ну фокус же в чем. Пакер оставляет только 3 секции. Ресурсы он прячет. Т.е. сперва распаковываются и размещаются секции, в т.ч. ресурсы, потом биндится импорт, чекается ПЕБ а потом уже передается управление на ОЕП.

    Т.е. никаких данных в памяти после загрузки, касательно ресурсов, теоретически быть не может
     
  7. dyn

    dyn New Member

    Публикаций:
    0
    Регистрация:
    30 окт 2009
    Сообщения:
    566
    уже реверсю кстати. Неприятные такие функции с кучей всего. Но пока что ничего такого, что привязывалось бы к базе не вижу.
     
  8. Mankubus

    Mankubus New Member

    Публикаций:
    0
    Регистрация:
    14 авг 2009
    Сообщения:
    76
    Да, так и есть, например LoadResource

    Код (Text):
    1. 753F1F00    75 0E           JNE SHORT 753F1F10
    2. 753F1F02    64:A1 18000000  MOV EAX,DWORD PTR FS:[18]
    3. 753F1F08    8B40 30         MOV EAX,DWORD PTR DS:[EAX+30]
    4. 753F1F0B    8B40 08         MOV EAX,DWORD PTR DS:[EAX+8]
    5. 753F1F0E    EB 28           JMP SHORT 753F1F38
     
  9. dyn

    dyn New Member

    Публикаций:
    0
    Регистрация:
    30 окт 2009
    Сообщения:
    566
    Все. разобрался. :)
    Все-таки трабла была именно в пеб-е.
    После правки пеба - и небольшой модификации софта - все заработало.
    Mankubus
    Спасибо. Респект!
     
  10. Mankubus

    Mankubus New Member

    Публикаций:
    0
    Регистрация:
    14 авг 2009
    Сообщения:
    76
    Там еще в LdrAccessResource вот такая штука есть

    Код (Text):
    1. 64:A1 18000000  MOV EAX,DWORD PTR FS:[18]
    2. 8B80 E00F0000   MOV EAX,DWORD PTR DS:[EAX+0FE0]
    в результате eax будет показывать на ImageBase.