Inject EXE

Тема в разделе "WASM.WIN32", создана пользователем oleg_nefedov, 10 май 2011.

  1. oleg_nefedov

    oleg_nefedov New Member

    Публикаций:
    0
    Регистрация:
    10 май 2011
    Сообщения:
    18
    Подскажите как правильно ижектить exe в новый процесс?

    После создания процесса через ZwCreateUserProcess, делаю ZwUnmapViewOfSection основного модуля того процесса и инжекчу свой exe. Изменяю ImageBase в PEB удаленного процесса. Потом при создании основного потока корректирую начало его выполнения в соответствии с инжекченным exe.

    Проблема в том что если делать ZwUnmapViewOfSection то после ResumeThread процесс падает, а если не делать ZwUnmapViewOfSection то все работает как часы.. Подскажите что и где не так...? Скорее всего надо изменить так же ImageBase и SizeOfImage не только в PEB но и еще где нибудь?
     
  2. izl3sa

    izl3sa New Member

    Публикаций:
    0
    Регистрация:
    22 апр 2010
    Сообщения:
    164
    Адрес:
    Spb
    1. PEB->Ldr
    2. Где падает конкретно? подруби отладчик
     
  3. oleg_nefedov

    oleg_nefedov New Member

    Публикаций:
    0
    Регистрация:
    10 май 2011
    Сообщения:
    18
    Олька не аттачится к процесс сразу после ZwCreateUserProcess :dntknw: только после выполнения освного потока.. а как раз там и падает...

    В PEB->Ldr все списки пустые сразу после выполнения ZwCreateUserProcess, там менять нечего..
     
  4. izl3sa

    izl3sa New Member

    Публикаций:
    0
    Регистрация:
    22 апр 2010
    Сообщения:
    164
    Адрес:
    Spb
    используйте windbg в качестве постмортем отладчика и посмотрите конкретно где падает.
    Списки пустые тк вы скорее всего передаете управление не на лоадер, а на свою точку входа. Изза этого процесс еще не проинициализирован.
     
  5. oleg_nefedov

    oleg_nefedov New Member

    Публикаций:
    0
    Регистрация:
    10 май 2011
    Сообщения:
    18
    спасибо izl3sa, попробую!
     
  6. oleg_nefedov

    oleg_nefedov New Member

    Публикаций:
    0
    Регистрация:
    10 май 2011
    Сообщения:
    18
    мда, замкнутый круг... если размапить основной exe то даже WinDbg не аттачится...
     
  7. 365

    365 New Member

    Публикаций:
    0
    Регистрация:
    20 авг 2010
    Сообщения:
    36
    Это приколы загрузчика в Win7,Vista. Корректируй ImageBase, он должен совпадать с адресом, куда ты смапил секцию во втором процессе
     
  8. gaeprust

    gaeprust New Member

    Публикаций:
    0
    Регистрация:
    2 май 2011
    Сообщения:
    188
    Зачем анмапить, достаточно релоцируемый модуль сделать.
     
  9. oleg_nefedov

    oleg_nefedov New Member

    Публикаций:
    0
    Регистрация:
    10 май 2011
    Сообщения:
    18
    Это естественно так, только я имею ввиду инжект exe а не dll, и допустим если этот exe без релоков. Тогда, чтобы правильно его спроецировать, надо выделить память по адресу указанному в ImageBase. И еще одно но, если ImageBase инжектируемого exe перекрывается модулем загруженным в удаленном процессе. Тогда, чтобы выделить память для инжектируемого exe надо сначала освободить память уже загруженного, основного exe.
     
  10. izl3sa

    izl3sa New Member

    Публикаций:
    0
    Регистрация:
    22 апр 2010
    Сообщения:
    164
    Адрес:
    Spb
    подрубите кернелмодно виндбг и стоптесь на юзермодных сепшенах (.gflag +soe)
     
  11. gaeprust

    gaeprust New Member

    Публикаций:
    0
    Регистрация:
    2 май 2011
    Сообщения:
    188
    oleg_nefedov
    Это само собой рузумеется. Ничего не мешает добавить релоки, разумеется если модуль ваш или написан для вас, а не криптор, пакер какой или есчо что работающее с чужими бинарями.

    Используйте надстройку для фильтрации исключений, это может быть длл, VEH и пр., что подрубит отладчик.
     
  12. oleg_nefedov

    oleg_nefedov New Member

    Публикаций:
    0
    Регистрация:
    10 май 2011
    Сообщения:
    18
    Бинарь "мой", просто перекомпилировать нет возможности... иходников нет...

    Подсунуть dll которая остановит дебаггер? да, вроде хорошая идея...

    Начинаю подозревать что адрес и размеры основного модуля процесса записаны где то в системе, и из третьего кольца туда доступа конечно нет, и сделать с этим ничего нельзя...
     
  13. izl3sa

    izl3sa New Member

    Публикаций:
    0
    Регистрация:
    22 апр 2010
    Сообщения:
    164
    Адрес:
    Spb
    Невыдумывайте. Эта техника работает. Ошибка где-то у вас.
     
  14. oleg_nefedov

    oleg_nefedov New Member

    Публикаций:
    0
    Регистрация:
    10 май 2011
    Сообщения:
    18
    хорошо, спасибо, попробую!
     
  15. oleg_nefedov

    oleg_nefedov New Member

    Публикаций:
    0
    Регистрация:
    10 май 2011
    Сообщения:
    18
    Проверил где падает...

    На первой же инструкции RtlUserThreadStart, это
    mov dword prt [esp+4],eax
    эксепшн C0000005, как будто в стек писать не может, а в стек вообще нормальный, память нормальная, ничего странного..

    Если UnmapViewOfSection не делать, то все нормально... :dntknw:
     
  16. gaeprust

    gaeprust New Member

    Публикаций:
    0
    Регистрация:
    2 май 2011
    Сообщения:
    188
    Значит первой инструкции нет - нтдлл анмаплена. Предположу что тред вылетает изза исчерпания стека, так как будут рекурсивные вызовы диспетчера фолтов.
     
  17. oleg_nefedov

    oleg_nefedov New Member

    Публикаций:
    0
    Регистрация:
    10 май 2011
    Сообщения:
    18
    Получается что вместе с ZwUnmapViewOfSection система освободила все зависимости модуля..?

    Так как же все таки быть в этом случае?
     
  18. gaeprust

    gaeprust New Member

    Публикаций:
    0
    Регистрация:
    2 май 2011
    Сообщения:
    188
    Откуда мне знать что у вас там освободилось, я могу лишь предполагать, точнее гадать на личном опыте :)
     
  19. izl3sa

    izl3sa New Member

    Публикаций:
    0
    Регистрация:
    22 апр 2010
    Сообщения:
    164
    Адрес:
    Spb
    дайте уже сэмпл подебажить + сурцы =)