Четверг, 24.08.2017, 07:51 Приветствую вас Гость | Группа "Гости" 


[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 1 из 11
Модератор форума: Волк-1024, Anton93, xXxSh@dowxXx 
delfcode » Delphi » Вирусология Delphi » Как исполнить чужое приложение в контексте своего?
Как исполнить чужое приложение в контексте своего?
AndroidДата: Понедельник, 13.08.2012, 23:27 | Сообщение # 1
Постоянный
Зарегистрирован: 13.12.2011
Группа: Пользователи
Сообщений: 100
Статус: Offline
Как исполнить чужое приложение в контексте своего без порождения дочерних процессов? Возможно ли это в принципе? Что-то как-то странно поставили мне задачу... Совсем ужас какой-то... Может у кого хоть теоретические идеи есть? Можно ли совсем не использовать CreateProcess?? Поделитесь...

Сообщение отредактировал Android - Понедельник, 13.08.2012, 23:28
 
dolphinДата: Вторник, 14.08.2012, 01:24 | Сообщение # 2
Администратор
Сообщений: 902
Статус: Offline
Можно воспользоваться CreateRemoteThread имхо
 
Волк-1024Дата: Вторник, 14.08.2012, 13:51 | Сообщение # 3
Авторитетный
Зарегистрирован: 24.07.2011
Группа: Модераторы
Сообщений: 467
Статус: Offline
1.) Получаешь Peb процесса. Из Peb'а узнаешь ImageBaseAddress: NtQueryInformationProcess.
2.) Читаем с помощью NtReadVirtualMemory из памяти процесса ImageNtHeaders и ImageDosHeader по адресу ImageBaseAddress.
3.) Узнаём AddressOfEntryPoint из ImageNtHeaders .
4.) Получаем размер образа процесса.
5.) Читаем его себе в буфер.
6.) Правим релоки.
7.) Выставляем нужные аттрибуты секциям, если требуется: NtProtectVirtualMemory.
8.) Создаём замороженный поток: RtlCreateUserThread с начальным адресом AddressOfEntryPoint.
9.) Пишем в него образ из буфера: NtWriteVirtualMemory.
10.) Устанавливаем нужный контекст для потока, если нужно: NtSetContextThread
11.) Размораживаем поток: NtResumeThread.
12.) biggrin


Сообщение отредактировал Волк-1024 - Вторник, 14.08.2012, 13:53
 
AndroidДата: Вторник, 14.08.2012, 19:16 | Сообщение # 4
Постоянный
Зарегистрирован: 13.12.2011
Группа: Пользователи
Сообщений: 100
Статус: Offline
тут выкладывали модули от MS-REM'а (и я в том числе (даже я раньше)), так там есть функция, позволяющая целиком экзешку запустить из адресного пространства чужого процесса. Функция InjectEXE в модуле advapihook (прилагаю во вложении). Но почему-то всякое использование VirtualAllocEx ничего не выделяет. Демо-проекты не работают. Просто память не выделяется и все тут... Помогите разобраться...
Прикрепления: advapihook.zip(131Kb)
 
Волк-1024Дата: Вторник, 14.08.2012, 19:19 | Сообщение # 5
Авторитетный
Зарегистрирован: 24.07.2011
Группа: Модераторы
Сообщений: 467
Статус: Offline
Использовать лучше NtAllocateVirtualMemory. Эта функция должна выделить память.



Сообщение отредактировал Волк-1024 - Вторник, 14.08.2012, 19:26
 
AndroidДата: Вторник, 14.08.2012, 19:34 | Сообщение # 6
Постоянный
Зарегистрирован: 13.12.2011
Группа: Пользователи
Сообщений: 100
Статус: Offline
а можно адаптировано к примерам в архиве выше это применить? помоги кодом...

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

Может у кого есть готовое решение???
 
Волк-1024Дата: Вторник, 14.08.2012, 19:43 | Сообщение # 7
Авторитетный
Зарегистрирован: 24.07.2011
Группа: Модераторы
Сообщений: 467
Статус: Offline
Прочитать файл можно вот так:


Выдрал из проекта, который я пишу еще с прошлого года biggrin


Сообщение отредактировал Волк-1024 - Вторник, 14.08.2012, 19:47
 
AndroidДата: Вторник, 14.08.2012, 20:29 | Сообщение # 8
Постоянный
Зарегистрирован: 13.12.2011
Группа: Пользователи
Сообщений: 100
Статус: Offline
Оу))) ну прочитать файло с диска - задача тривиальная)))

Как потом заставить запуститься как приложение считанный буфер)))??? Вот это поинтереснее задачка...

Причем так, чтоб без CreateProcess...
 
AndroidДата: Вторник, 14.08.2012, 20:30 | Сообщение # 9
Постоянный
Зарегистрирован: 13.12.2011
Группа: Пользователи
Сообщений: 100
Статус: Offline
Quote (Волк-1024)
Выдрал из проекта, который я пишу еще с прошлого года


может чем помочь??? ты спрашивай - я на самом деле много че знаю...
 
Волк-1024Дата: Вторник, 14.08.2012, 21:30 | Сообщение # 10
Авторитетный
Зарегистрирован: 24.07.2011
Группа: Модераторы
Сообщений: 467
Статус: Offline
Пишу так долго не из-за нехватки знаний, а из-за трудной логики кода и моей лени. smile
Пишу кстати по этой "теме" Т.е инжект образа файла в системный процесс.


Сообщение отредактировал Волк-1024 - Вторник, 14.08.2012, 22:00
 
AndroidДата: Вторник, 14.08.2012, 22:02 | Сообщение # 11
Постоянный
Зарегистрирован: 13.12.2011
Группа: Пользователи
Сообщений: 100
Статус: Offline
ну так может объединить усилия???

думаю двигаться в сторону CreateRemoteThread. Вот как в билиотечке приаттаченной написано, но там как-то по ходу неработоспособно. Нагуглил тонны кода, буду разбирать...
 
Волк-1024Дата: Вторник, 14.08.2012, 22:04 | Сообщение # 12
Авторитетный
Зарегистрирован: 24.07.2011
Группа: Модераторы
Сообщений: 467
Статус: Offline
Я пишу на NativeAPI. Поэтому нужно копать в сторону RtlCreateUserThread biggrin

Сообщение отредактировал Волк-1024 - Вторник, 14.08.2012, 22:10
 
AndroidДата: Вторник, 14.08.2012, 22:55 | Сообщение # 13
Постоянный
Зарегистрирован: 13.12.2011
Группа: Пользователи
Сообщений: 100
Статус: Offline
В чем преимущества твоего подхода? Что-то крайне мало инфы в инете по этому поводу...
 
xXxSh@dowxXxДата: Среда, 15.08.2012, 09:35 | Сообщение # 14
Авторитетный
Зарегистрирован: 22.01.2012
Группа: Модераторы
Сообщений: 702
Статус: Offline
Quote (Android)
Что-то крайне мало инфы в инете по этому поводу...


OFF-TOP!

а тему вы разогнали конечно интересную, где то даже у меня что то было по EXE в сторонний процесс, поищу, найду, выложу smile
 
AndroidДата: Среда, 15.08.2012, 23:47 | Сообщение # 15
Постоянный
Зарегистрирован: 13.12.2011
Группа: Пользователи
Сообщений: 100
Статус: Offline
Quote (xXxSh@dowxXx)
где то даже у меня что то было по EXE в сторонний процесс, поищу, найду, выложу


Товарищ, постарайся!!! Ждем с нетерпением!!!
 
Волк-1024Дата: Четверг, 16.08.2012, 00:34 | Сообщение # 16
Авторитетный
Зарегистрирован: 24.07.2011
Группа: Модераторы
Сообщений: 467
Статус: Offline
Может немного не то, но его достаточно немного изменить. Т.е CreateProcess заменить на RtlCreateUserThread + немного шаманства. biggrin



P.S. У меня еще такого хлама много.
Доступно только для пользователей


Сообщение отредактировал Волк-1024 - Четверг, 16.08.2012, 00:59
 
xXxSh@dowxXxДата: Четверг, 16.08.2012, 10:02 | Сообщение # 17
Авторитетный
Зарегистрирован: 22.01.2012
Группа: Модераторы
Сообщений: 702
Статус: Offline
Quote (Android)
Товарищ, постарайся!!! Ждем с нетерпением!!!

ничего стоящего я у себя так и не нашел, но вот может быть хоть это пригодится, написал когда то давно, такой простенький пример, к сожалению не позволяет внедряться в системные процессы и процессы защищенные от изменений вроде антивирусов или тп.
так же в данном примере я забыл добавить проверку, запущен ли наш файл из другого процесса или нет, по этому он так и будет запускаться с периодичностью в 1 сек., пока не убьешь или не перезапустишь тот процесс в который инжектился...

PS: Мне больше понравилась идея Волк-1024, если еще над этим поработать, думаю выйдет что то стоящее...
Прикрепления: 8796978696.rar(10Kb)


Сообщение отредактировал xXxSh@dowxXx - Четверг, 16.08.2012, 10:09
 
C@TДата: Пятница, 17.08.2012, 00:51 | Сообщение # 18
Авторитетный
Зарегистрирован: 06.03.2010
Группа: Модераторы
Сообщений: 265
Статус: Offline
Android, криптор что ли собрался написать ? smile

чтобы написать загрузку приложения в память своего же процесса нужно копать не в сторону API функций, а в сторону теории, разберись с PE форматом, разберись с импортами(релоки нужно реализовывать если имадж бейс твоего ехе файла не сходится с имадж байс загружаемого, поэтому этим можно пренебречь), т.е тебе прийдется загрузить все секции в память, сперва по временному адрессу, потом написать код(лично я для этого пишу шелл на асме) который перезапишет все секции твоего загруженного ехе(криптора) секциями нового ехе файла и сделать джамп на ентери поинт, еще важно чтобы имадж сайз криптора был больше или такой же как имадж сайз загружаемого ехе, иначе загрузить не получится

P.S не нужно копать в сторону API!!! выучи асм(это максимум неделя) и разберись со структурой PE(тоже 2-3 дня тебе хватит), ибо без знания теории как это должно работать ничего не получится smile
 
AndroidДата: Пятница, 17.08.2012, 09:19 | Сообщение # 19
Постоянный
Зарегистрирован: 13.12.2011
Группа: Пользователи
Сообщений: 100
Статус: Offline
Quote (C@T)
выучи асм(это максимум неделя)


c@t, ткни носом, что именно мне понадобится из асма. Общее представление о нем имею (ХеллоВорлд))))).

Quote (C@T)
еще важно чтобы имадж сайз криптора был больше или такой же как имадж сайз загружаемого ехе, иначе загрузить не получится


это не так. Если ImageSize первого процесса (который нужно подменить), меньше чем целевой то нужно использовать функцию ZwUnmapViewOfSection (eлежит в ntdll.dll) а затем VirtualAllocEx для выделения достоточного объема памяти в нужном адресном пространстве.
 
C@TДата: Пятница, 17.08.2012, 10:23 | Сообщение # 20
Авторитетный
Зарегистрирован: 06.03.2010
Группа: Модераторы
Сообщений: 265
Статус: Offline
Android, если же ты хочешь запустить программу в памяти своего процесса, то сам подумай как тебе придется это сделать, ведь когда ты вызовешь к примеру ZwUnmapViewOfSection для секции с кодом то загрузчик просто вылетит по ошибке smile

P.S я про загрузку в СВОЕ адресное пространство
P.P.S метод загрузки в новый процесс палится, как фаерволами так и АВ smile
 
xXxSh@dowxXxДата: Пятница, 17.08.2012, 11:48 | Сообщение # 21
Авторитетный
Зарегистрирован: 22.01.2012
Группа: Модераторы
Сообщений: 702
Статус: Offline
Quote (C@T)
P.P.S метод загрузки в новый процесс палится, как фаерволами так и АВ

через шелл то же не обойти этой проблемы?
 
Волк-1024Дата: Пятница, 17.08.2012, 12:18 | Сообщение # 22
Авторитетный
Зарегистрирован: 24.07.2011
Группа: Модераторы
Сообщений: 467
Статус: Offline
А зачем инжектить код в новый процесс, когда можно запихать код, а точнее образ в уже существующий процесс?

----------------------------------------------
Можно еще проще: выделить у себя память c помощью NtAllocateVirtualMemory с адресом выделения, который будет равняться адресом загрузки криптуемого файла, а у самого криптера сделать ImageBase какой-нибудь экзотический. И при этом нам не понадобиться править релоки, хотя это и не трудно. И дальше тупо создать в памяти поток.


Сообщение отредактировал Волк-1024 - Пятница, 17.08.2012, 13:04
 
C@TДата: Пятница, 17.08.2012, 13:38 | Сообщение # 23
Авторитетный
Зарегистрирован: 06.03.2010
Группа: Модераторы
Сообщений: 265
Статус: Offline
Quote (Волк-1024)
когда можно запихать код, а точнее образ в уже существующий процесс?

именно это и палится, а если загружать в контекст своего процесса, то все окей smile
 
Волк-1024Дата: Пятница, 17.08.2012, 13:56 | Сообщение # 24
Авторитетный
Зарегистрирован: 24.07.2011
Группа: Модераторы
Сообщений: 467
Статус: Offline
Вот скан моего троя, которого я пишу с прошлого года smile и который использует технологию инжекта (в svchost.exe) Написан на Делфи Доступно только для пользователей И ни одного детекта инжекта, зато видит кто-то в нём дроппа, хотя в нём ничего такого нет. smile

Сообщение отредактировал Волк-1024 - Пятница, 17.08.2012, 13:57
 
xXxSh@dowxXxДата: Пятница, 17.08.2012, 17:06 | Сообщение # 25
Авторитетный
Зарегистрирован: 22.01.2012
Группа: Модераторы
Сообщений: 702
Статус: Offline
Волк-1024 если я не ошибаюсь все эти онлайн сканы показывают только лишь один метод проверки, а на практике все выходит иначе...
 
delfcode » Delphi » Вирусология Delphi » Как исполнить чужое приложение в контексте своего?
Страница 1 из 11
Поиск:

delfcode.ru © 2008 - 2017 Хостинг от uCoz