Проблемы при разработки инжекта

Тема в разделе "WASM.BEGINNERS", создана пользователем AntiINetwork, 19 июн 2007.

  1. AntiINetwork

    AntiINetwork New Member

    Публикаций:
    0
    Регистрация:
    19 июн 2007
    Сообщения:
    24
    Хех... Не было печали, да черти накачали.

    Обнаружилось паранормальное явление:
    При ImageBase адресе, большем 00E00000 - инжет выполняется нормально ( один раз выполняет функцию, заданную в CreateRemoteThread)
    При ImageBase адресе, меньшем 00E00000 - VirtualAllocEx не работает, возвращает 487 код ошибки ( VirtualFreeEx перед этим дает доступ к памяти для этого процесса)
    При ImageBase адресе, равном 00E00000 - код функции, запускаемой в CreateRemoteThread выполняется дважды. ( совершенно непонятно, почему так происходит).

    Как решить подобное?
     
  2. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    А при чем тут C++?
     
  3. AntiINetwork

    AntiINetwork New Member

    Публикаций:
    0
    Регистрация:
    19 июн 2007
    Сообщения:
    24
    _DEN_
    Пишу на C++, логично было это предположить.

    p.s.
    #pragma comment(linker, "/BASE:большой_адрес")
    не предлагать
     
  4. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    AntiINetwork
    Срочно сообщите об этом баге Майкрософт!

    Это как?

    Не изобретать велосипед, а взять стандартный код инжекта.
     
  5. AntiINetwork

    AntiINetwork New Member

    Публикаций:
    0
    Регистрация:
    19 июн 2007
    Сообщения:
    24
    Quantum
    Стандартный код инжекта основывается на жесткой фиксации большего адреса, при помощи директивы линкеру:
    #pragma comment(linker, "/BASE:большой_адрес").

    Это неуместно, поэтому в коде инжекта вычисляется ImageBase, вычисляется правильно 100%, остольное все, как в стандартном инжекте.
    Если быть точным снимает резервирование нужного участка памяти в контексте процесса, в который идет инжект.
     
  6. asd

    asd New Member

    Публикаций:
    0
    Регистрация:
    12 мар 2005
    Сообщения:
    952
    Адрес:
    Russia
    Нет он основывается либо на базонезависимом коде, либо на обработке релоков.
     
  7. AntiINetwork

    AntiINetwork New Member

    Публикаций:
    0
    Регистрация:
    19 июн 2007
    Сообщения:
    24
    asd
    Что-то не видел таких на C/C++, линки плиз.

    p.s. Инжект работает при большем фиксированном адресе, большой подразумевает больший, чем 0x00E00000.
     
  8. AntiINetwork

    AntiINetwork New Member

    Публикаций:
    0
    Регистрация:
    19 июн 2007
    Сообщения:
    24
    Код инжекта анлогичен, предложенному cr4sh'eм во втором посте здесь:
    http://www.wasm.ru/forum/viewtopic.php?id=17765
    только ImageBase вычисляется там же, а не задается DEFINE'ом.
     
  9. asd

    asd New Member

    Публикаций:
    0
    Регистрация:
    12 мар 2005
    Сообщения:
    952
    Адрес:
    Russia
    AntiINetwork
    посмотри пост 10 по ссылке которую ты привёл. В конце концов, что мешает подцепиться отладчиком и посмотреть?
     
  10. k3internal

    k3internal New Member

    Публикаций:
    0
    Регистрация:
    11 янв 2007
    Сообщения:
    607
    AntiINetwork
    помоему пришло время тебе познакомиться с ядерным отладчиком.
     
  11. AntiINetwork

    AntiINetwork New Member

    Публикаций:
    0
    Регистрация:
    19 июн 2007
    Сообщения:
    24
    k3internal
    asd
    не понимаю о чем вы =(((, киньте линков про ядерный отладчик.
     
  12. MSoft

    MSoft New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2006
    Сообщения:
    2.854
    AntiINetwork
    берешь ядро и расщипляешь его. после расщепления pentium core duo откладываешь его ядра в сторону. все, из тебя получился ядерный отладчик :)

    а если серъезно, то по-моему имелся ввиду soft ice (поправьте меня, если не прав). а статей по его эксплуатации куча
     
  13. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    Не, ну зачем лезть в ядро??? На выполнение VirtualAlloc можно посмотреть в Olly и, за одно, проверить почему страницы заняты и где есть свободные.
     
  14. AntiINetwork

    AntiINetwork New Member

    Публикаций:
    0
    Регистрация:
    19 июн 2007
    Сообщения:
    24
    Quantum
    1. VirtualAllocEx
    2. Смотрел, ничего интерсеного не увидел, на что внимание обратить?

    MSoft
    Soft-ice, сейчас испробуем.
     
  15. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    AntiINetwork
    Хотите сказать, что заданный адрес в процессе свободен, к процессу имеется полный доступ, а VirtualAllocEx всё равно не хочет его выделять?

    Вот я только что посмотрел код во 2м посте того топика и могу однозначно сказать, что базовый адрес будет занят :) Короче, инжектить надо не в базовый адрес, а в другое (свободное!!!) место. Для этого код должен быть PIC'овым или же придётся самостоятельно настраивать релоки. Но всё это уже обговаривалось: и тут, и в том старом топике.