Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Подключение к процессу 
:(
    Опции темы
Alexey68
Дата 31.5.2013, 13:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Alexey
*


Профиль
Группа: Участник
Сообщений: 98
Регистрация: 10.4.2013

Репутация: нет
Всего: нет



Здравствуйте All!
Интересует подключение к процессу (или другой вариант) для получения информации о PE заголовке и т.п.
С помощью CreateFile всё нормально, но необходимо именно подключение, а не создание (открытие).
Вот мой код:
Код

#include <windows.h>
#include <stdio.h>
#include <winnt.h>


void main()
{
   HANDLE hFile;
   BYTE *BaseAddress;
   WORD x;
   DWORD FileSize, BR, PE, OEP;

   IMAGE_DOS_HEADER *ImageDosHeader;
   IMAGE_NT_HEADERS32 *ImageNtHeaders;
   IMAGE_OPTIONAL_HEADER32 *ImageOptionalHeader;
   IMAGE_DATA_DIRECTORY *ImageDataDirectory;
   IMAGE_EXPORT_DIRECTORY *ImageExportDirectory;
   IMAGE_SECTION_HEADER *ImageSectionHeader;


   char FileName[MAX_PATH];
//char FileName []="test.exe";
   char SectionName[9] = { 0 };


   printf("%s\n","Enter filename...");
   scanf("%s", FileName);

   printf("%s\n","Open file...");

   hFile = CreateFile(FileName, GENERIC_READ, FILE_SHARE_READ, 0,
      OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);

   if (hFile == INVALID_HANDLE_VALUE)
   {
      printf("%s\n","Cannot open file...");
      return 0;
   }

   FileSize = GetFileSize(hFile, NULL);
   BaseAddress = (BYTE *) malloc(FileSize);

   printf("%X\n%X\n", FileSize, BaseAddress);

   if (!ReadFile(hFile, BaseAddress, FileSize, &BR, NULL))
   {
      printf("Cannot read file...\n");
      free(BaseAddress);
      CloseHandle(hFile);
      return 0;
   }

   ImageDosHeader = (IMAGE_DOS_HEADER *) BaseAddress;

   printf("%s%x\n","DosHeader = ",ImageDosHeader);
   printf("%s%x%s\n","e_magic  = ",ImageDosHeader->e_magic, " -MZ");

   free(BaseAddress);
   CloseHandle(hFile);
system("pause");
}


Как реализовать именно подключение?
к выполняющемуся в данный момент модулю.
С Уважением Алексей.

Это сообщение отредактировал(а) Alexey68 - 31.5.2013, 17:38
PM MAIL   Вверх
Dem_max
Дата 31.5.2013, 15:53 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1780
Регистрация: 12.4.2007

Репутация: 16
Всего: 39



Что такое подключение к процессу ???


--------------------
Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte")
PM MAIL   Вверх
Dem_max
Дата 1.6.2013, 06:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1780
Регистрация: 12.4.2007

Репутация: 16
Всего: 39



Цитата

подключение к уже запущенному файлу и спроецированному в памяти.

Вот я и спрашиваю что в твоем понимание "подключение" к процессу.


Потому что телепаты сейчас в отпуске.

Это сообщение отредактировал(а) Dem_max - 1.6.2013, 06:38


--------------------
Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte")
PM MAIL   Вверх
Alexey68
Дата 1.6.2013, 14:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Alexey
*


Профиль
Группа: Участник
Сообщений: 98
Регистрация: 10.4.2013

Репутация: нет
Всего: нет



inject, внедрение в адресное пространство чужого процесса без использования dll

Это сообщение отредактировал(а) Alexey68 - 1.6.2013, 14:20
PM MAIL   Вверх
Dem_max
Дата 1.6.2013, 14:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1780
Регистрация: 12.4.2007

Репутация: 16
Всего: 39



WriteProcessMemory()
ReadProcessMemory()

http://msdn.microsoft.com/en-us/library/wi...4(v=vs.85).aspx


--------------------
Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte")
PM MAIL   Вверх
Alexey68
Дата 1.6.2013, 15:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Alexey
*


Профиль
Группа: Участник
Сообщений: 98
Регистрация: 10.4.2013

Репутация: нет
Всего: нет



я неверно описал задачу.
Необходимо внедриться в чужой процесс и получить информацию о EP+ ImageBase = OEP, секциях и т.п.
В выше описанном мной коде (приведён не полностью) всю эту информацию я получаю через CreateFile, а необходимо внедриться в уже запущенный процесс (после распаковки в память (если файл был упакован)).
С WriteProcess и ReadProcess вопросов нет, необходим именно inject без dll.
RSDN, Рихтер и т.п. уже смотрел...
PM MAIL   Вверх
DarthTon
Дата 1.6.2013, 16:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 106
Регистрация: 7.2.2009

Репутация: 5
Всего: 6



Так Вам всё же небходимо внедрение кода или получить информацию о главном модуле ("EP+ ImageBase = OEP, секциях и т.п.") ? Так как для получения этого вовсе не обязательно внедрять свой код.
PM MAIL   Вверх
Alexey68
Дата 1.6.2013, 16:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Alexey
*


Профиль
Группа: Участник
Сообщений: 98
Регистрация: 10.4.2013

Репутация: нет
Всего: нет



да необходимо получение сведений о PE модуле отображённом в памяти

Это сообщение отредактировал(а) Alexey68 - 1.6.2013, 16:13
PM MAIL   Вверх
DarthTon
Дата 1.6.2013, 16:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 106
Регистрация: 7.2.2009

Репутация: 5
Всего: 6



CreateToolhelp32Snapshot + Module32First + MODULEENTRY32W::modBaseAddr. После получения базового адреса модуля парсите его PE заголовок используя ReadProcessMemory().

http://msdn.microsoft.com/en-us/library/wi...9(v=vs.85).aspx
http://msdn.microsoft.com/en-us/library/wi...8(v=vs.85).aspx
http://msdn.microsoft.com/en-us/library/wi...5(v=vs.85).aspx
PM MAIL   Вверх
Alexey68
Дата 1.6.2013, 17:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Alexey
*


Профиль
Группа: Участник
Сообщений: 98
Регистрация: 10.4.2013

Репутация: нет
Всего: нет



спасибо, буду разбираться...
PM MAIL   Вверх
Dem_max
Дата 1.6.2013, 18:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1780
Регистрация: 12.4.2007

Репутация: 16
Всего: 39



Цитата

необходим именно inject без dll.


это 
WriteProcessMemory()
ReadProcessMemory()


--------------------
Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte")
PM MAIL   Вверх
Alexey68
Дата 3.6.2013, 00:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Alexey
*


Профиль
Группа: Участник
Сообщений: 98
Регистрация: 10.4.2013

Репутация: нет
Всего: нет



Код

#include <windows.h>
#include <tlhelp32.h> 
#include <tchar.h> 
 
int main( void )
{
HANDLE hModuleSnap = INVALID_HANDLE_VALUE;
MODULEENTRY32 me32;
DWORD PID;
BYTE t;

PID = 3920;

hModuleSnap = CreateToolhelp32Snapshot( TH32CS_SNAPMODULE, PID );

if( hModuleSnap == INVALID_HANDLE_VALUE )
{
 return( FALSE );
}

me32.dwSize = sizeof( MODULEENTRY32 );
Module32First(hModuleSnap, &me32);

printf("modBaseAddr --0x%08X\n", me32.modBaseAddr);

ReadProcessMemory(если использовать hModuleSnap, то получаю 0 ,(LPVOID) 0x004537F5, &t, 1, NULL);

И далее отталкиваясь от me32.modBaseAddr использовать смещения при "парсинге" заголовка PE?

Это сообщение отредактировал(а) Alexey68 - 3.6.2013, 00:34
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.0496 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.