Сейчас на форуме: Rio, tyns777, zombi-vadim (+7 невидимых)

 eXeL@B —› Программирование —› Запуск процесса без PE файла
Посл.ответ Сообщение

Ранг: 3.0 (гость), 1thx
Активность: 0=0
Статус: Участник

Создано: 06 июня 2014 13:55
· Личное сообщение · #1

У кого-нибудь есть рабочий на всех системах код?
Я написал под win7, но на 8.1 уже не работает, остальные не проверял.
Code:
  1. NtCreateProcess(&hProcess, PROCESS_ALL_ACCESS, NULL, GetCurrentProcess(), NULL, NULL, NULL, NULL);
  2. Address1 = VirtualAllocEx(hProcess, NULL, 0x1000, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
  3. WriteProcessMemory(hProcess, Address1, Address, 0x1000, &dwWritten);
  4. // Windows8.1 :
  5. // RtlCreateUserThread->NtCreateThreadEx => STATUS_PROCESS_IS_TERMINATING
  6. RtlCreateUserThread(hProcess, NULL, NULL, NULL, NULL, NULL, Address1, NULL, NULL, NULL);

CreateRemoteThread на win7 возвращает ERROR_NOT_ENOUGH_MEMORY, на 8.1 ERROR_ACCESS_DENIED
Спасибо.




Ранг: 72.3 (постоянный), 133thx
Активность: 0.380
Статус: Участник

Создано: 06 июня 2014 21:41
· Личное сообщение · #2

Treant

Зная вас, скажу - пичально



Ранг: 3.0 (гость), 1thx
Активность: 0=0
Статус: Участник

Создано: 06 июня 2014 22:16 · Поправил: Treant
· Личное сообщение · #3

Dr0p
Я вам LDE на фолтах принес, работает через Debug API.
На XP не работает, т.к используется DEP.
И мне нужен запуск процесса без файла, будет совсем годнота.
Сейчас через секцию попробую сделать, или буду с этими ошибками разбираться.

6e4c_06.06.2014_EXELAB.rU.tgz - ProcessLDE.zip

| Сообщение посчитали полезным: Dr0p


Ранг: 72.3 (постоянный), 133thx
Активность: 0.380
Статус: Участник

Создано: 06 июня 2014 22:29
· Личное сообщение · #4

Treant

Погань какая то. Это мусор, он работать не может.

По сабжу - запуск процесса средствами нэйтива без файла не возможен. Так как аргумент там файловая секция.

Я понимаю что вы пытаетесь переписать образ в памяти приложения и совсем криво выразились, но сути это не меняет. Нужно использовать загрузчик.



Ранг: 3.0 (гость), 1thx
Активность: 0=0
Статус: Участник

Создано: 06 июня 2014 22:35
· Личное сообщение · #5

Dr0p
>Работать не может
>запуск процесса средствами нэйтива без файла не возможен
Но у меня все работает на семерке же, секция опциональный параметр.




Ранг: 72.3 (постоянный), 133thx
Активность: 0.380
Статус: Участник

Создано: 06 июня 2014 22:36
· Личное сообщение · #6

Treant

Ложь.



Ранг: 3.0 (гость), 1thx
Активность: 0=0
Статус: Участник

Создано: 06 июня 2014 22:39
· Личное сообщение · #7

Dr0p
Что вам скриншот штоле приложить?
Говорю же работает, задавайте любую хитровыкрученную комбинацию байт, выдаст правильную длину.




Ранг: 72.3 (постоянный), 133thx
Активность: 0.380
Статус: Участник

Создано: 06 июня 2014 22:41
· Личное сообщение · #8

Treant

Аа вы про дизасм. Давайте потестим, push 123, или быть может mov ss,ax ?



Ранг: 3.0 (гость), 1thx
Активность: 0=0
Статус: Участник

Создано: 06 июня 2014 22:45
· Личное сообщение · #9

Dr0p
0x6A, 0x7B - push 123 - результат верный, 2 байта
0x8E, 0xD0 - mov ss, ax - результат верный, 2 байта




Ранг: 72.3 (постоянный), 133thx
Активность: 0.380
Статус: Участник

Создано: 06 июня 2014 22:57 · Поправил: Dr0p
· Личное сообщение · #10

Treant

Я на угад сказал, перед этим не сморел ваш код. Суть в том, что вы мою методу зарипали. Плюс в том, что выполняется изоляция стека, чего собстно я сразу и дал пример про стек. Спижжено с RLDE. Что вы мне хотите этим доказать ?

Да, это крайне просто реализуется при изоляции контекста - в ядре или через дебагапи. Вот только практически это смысла не имеет в вашем случае.

Плюсану за то, что вы поняли суть механизма. Респект.



Ранг: 3.0 (гость), 1thx
Активность: 0=0
Статус: Участник

Создано: 06 июня 2014 23:04
· Личное сообщение · #11

Dr0p
Я хотел просто запуск процесса без файла, а LDE это же с вашего дизасма, да, просто он тормозить будет, если на каждой инструкции грузить файл с диска.




Ранг: 72.3 (постоянный), 133thx
Активность: 0.380
Статус: Участник

Создано: 06 июня 2014 23:10 · Поправил: Dr0p
· Личное сообщение · #12

Treant

Лет 6 или хз скока на лабе обсуждалась помню та тема с фрименом. Он вроде хотел стартануть процесс не из файловой секции(без привязки к файлу). Есно ничо не вышло.

В ядре проверки имеются на привязку к файлу. Даже если из ядра стартануть, то так просто не выйдет - нтлдр тоже файл юзает.

Суть вашего вопроса не совсем понятна. В коде примитивный инжект. Ели бы там был саспенд и освобождении екзешной проекции, то это типичная подмена образа. А тут не понятно, в частности причём тут "без пе".



Ранг: 0.0 (гость)
Активность: 0.250
Статус: Участник

Создано: 06 июня 2014 23:14
· Личное сообщение · #13

Dr0p пишет: А тут не понятно, в частности причём тут "без пе"

Видимо из буфера первого процесса запустить второй процесс, иначе автор наркоман.



Ранг: 3.0 (гость), 1thx
Активность: 0=0
Статус: Участник

Создано: 06 июня 2014 23:16
· Личное сообщение · #14

Dr0p
Должен быть создан процесс и запущены потоки в нем должны быть без обращения к диску.
Я думаю образ PE можно в памяти сформировать, просто надо его как то скормить загрузчику потом.




Ранг: 72.3 (постоянный), 133thx
Активность: 0.380
Статус: Участник

Создано: 06 июня 2014 23:27 · Поправил: Dr0p
· Личное сообщение · #15

Treant

> Должен быть создан процесс и запущены потоки в нем должны быть без обращения к диску.

Штатными средствами процесс запустить без файла невозможно. Аргумент нтапи - файловая секция.

Потоки в процессе запускаются по логике удалённо, тоест из другого процесса, вероятно родителя. Потоки не связаны с файлами, это не файловые обьекты.

Вам нужен инжект и загрузка из памяти.



Ранг: 3.0 (гость), 1thx
Активность: 0=0
Статус: Участник

Создано: 06 июня 2014 23:40
· Личное сообщение · #16

Dr0p
>Штатными средствами процесс запустить без файла невозможно. Аргумент нтапи - файловая секция.
Код в 1м посте работает (просто на win8.1 при создании потока STATUS_PROCESS_IS_TERMINATING).
Т.е создается процесс без секции, выделяется память в нем, пишутся данные туда, все нормально, проблема только при создании потока.
Может есть там какие то варианты поправить этот статус?




Ранг: 72.3 (постоянный), 133thx
Активность: 0.380
Статус: Участник

Создано: 06 июня 2014 23:46
· Личное сообщение · #17

Treant

Не знаю, никогда такого не видел.



Ранг: 0.0 (гость)
Активность: 0.250
Статус: Участник

Создано: 07 июня 2014 00:00 · Поправил: F_a_u_s_t
· Личное сообщение · #18

Treant пишет: Может есть там какие то варианты

У j00ru был лоадер, хотя хз остались ли исходники.

Поправил
Именно win 8 ( хотя кому она нужна )



Ранг: 3.0 (гость), 1thx
Активность: 0=0
Статус: Участник

Создано: 08 января 2015 00:05
· Личное сообщение · #19

Пореверсил немного.
Windows 8.1.
Еще при создании процесса с нулевой секцией в структуре _EPROCESS выставляется бит Flags.ProcessDelete;
В дальнейшем при вызове RtlCreateUserThread->NtCreateThreadEx->PspCreateThread->PspInsertThread происходит проверка этого значения и, в случае обнаружения, возвращается STATUS_PROCESS_IS_TERMINATING.


 eXeL@B —› Программирование —› Запуск процесса без PE файла
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати