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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Обрашение к dll в чужом адресном пространстве. Обрашение к dll в чужом адресном 
V
    Опции темы
drZmeu
  Дата 17.3.2007, 22:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Всем привет! У мну снова вопрос ! Предположим я загрузил dll в память чужого процесса.
Как мне обшатся с этой dll! Допустим отослать её (*RunStopHook)(true, hInstance);
из моего процесса в dll которая находится в чужём процессе ? smile 

Это сообщение отредактировал(а) drZmeu - 17.3.2007, 22:48
--------------------
[code=html]<table bgcolor='#0' width='69'><tr align='center' bgcolor='#0'><td><font size='6' face='cursive' color='#ffffff'><b>A</b></font></td></tr><tr align="center" bgcolor="#0">[/code]
PM MAIL   Вверх
GremlinProg
Дата 18.3.2007, 00:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

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



подгрузи её в свое адресное пространство и общайся на здоровье


--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
drZmeu
Дата 18.3.2007, 00:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Тоесть как я понимаю она должна быть в моём и в чужом адресном пространстве ???

--------------------
[code=html]<table bgcolor='#0' width='69'><tr align='center' bgcolor='#0'><td><font size='6' face='cursive' color='#ffffff'><b>A</b></font></td></tr><tr align="center" bgcolor="#0">[/code]
PM MAIL   Вверх
W4FhLF
Дата 18.3.2007, 08:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


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

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



Цитата(drZmeu @  18.3.2007,  00:37 Найти цитируемый пост)
Тоесть как я понимаю она должна быть в моём и в чужом адресном пространстве ???


Нет конечно, это глупости. Ты как её подгружаешь? Установкой хука на оконные сообщения или инжектом базонезависимого кода и удалённым исполнением последнего?


--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
drZmeu
Дата 18.3.2007, 14:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



W4FhLF: С помошью потоков. Задача у меня такая я подгружаю dll она ставит хук или моё приложение должно ставить хук. После чего dll выполняет хук и подгружает WSAStartup !
И наче никак не подгрузишь =(
Если кто-то сможет напишите небольшой примерчи с созданием потоко на процедуру подгрузки WSAStartup а то я месяц парюсь не выходит! Получилось один раз но она выполнялась при каждом действии и в итоге вылетала с ошибкой  =(
--------------------
[code=html]<table bgcolor='#0' width='69'><tr align='center' bgcolor='#0'><td><font size='6' face='cursive' color='#ffffff'><b>A</b></font></td></tr><tr align="center" bgcolor="#0">[/code]
PM MAIL   Вверх
W4FhLF
Дата 18.3.2007, 15:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


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

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



drZmeu, я мало, что понял из написанного тобой, а самое главное не получил ответа на свой вопросsmile

Посмотри, вот здесь недавно обсуждали перехват, человек разобрался со всем.


--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
drZmeu
Дата 18.3.2007, 16:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Эммммм. Выкладываю наброски. Толко вот ещё что! Мне нужно чтоб HOOK выполнялся только на конкретное приложение а не на всем. Ато у мну сразу вырубается антивирус, браузер и т.д

Код .EXE
Код


#include "stdafx.h"
#include <windows.h>
int _tmain(int argc, _TCHAR* argv[])
{
    HINSTANCE hModule;
    typedef void (StopStartProc)(DWORD);
    StopStartProc *SSProc;
    hModule=::LoadLibrary("C:\\detrat.dll");
    SSProc=(StopStartProc*)::GetProcAddress((HMODULE)hModule,"StartMsBox");
    (*SSProc)(0xFF10);
    Sleep(1000);
    (*SSProc)(0xFF00);
    return 0;
}


Код .DLL
Код

#include <winsock2.h>
#include <windows.h>
#pragma comment(lib,"ws2_32.lib")
#ifdef __cplusplus
extern "C" {
#endif
    HHOOK SysHook;
    HINSTANCE hInst;
    HANDLE hStartWSA;
    DWORD iStartWSA;
    DWORD WINAPI StartWsa(LPVOID lParam)
    {
    WSADATA wsa;
    if(WSAStartup(0x0200,&wsa)!=0)
    {
    MessageBox(0,"BAd WSA","",0);
    }
    MessageBox(0,"WSA oK =)","",0);
    return 0;
    }

    LRESULT CALLBACK SysMsgProc(int nCode,WPARAM wParam,LPARAM lParam)
    {
    CallNextHookEx(SysHook,nCode,wParam,lParam);
    if(nCode>=0)
    {
        hStartWSA=CreateThread(NULL,0,StartWsa,0,0,&iStartWSA);
    }
    return 0;
    }

    __declspec(dllexport)BOOL APIENTRY DllMain(HANDLE hModule,DWORD url_res_call,LPVOID lpReserved)
    {
        hInst=(HINSTANCE)hModule;
    return TRUE;
    }
    __declspec(dllexport) void StartMsBox(DWORD State)
    {
    if(State==0xFF10)
        SysHook=SetWindowsHookEx(WH_GETMESSAGE,&SysMsgProc,hInst,0);
    else if(State!=0xFF10)
        UnhookWindowsHookEx(SysHook);
    }

#ifdef __cplusplus
}
#endif


Как его поправить чтоб hook выполнялся на totalcommander и один раз! Ну вобшем в коде всё понятно. smile 
--------------------
[code=html]<table bgcolor='#0' width='69'><tr align='center' bgcolor='#0'><td><font size='6' face='cursive' color='#ffffff'><b>A</b></font></td></tr><tr align="center" bgcolor="#0">[/code]
PM MAIL   Вверх
Tectoder
Дата 18.3.2007, 17:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



drZmeu, если тебе нужно, что бы некоторые переменные в твоих dll были едины для всех процессов, помещай их в общую секцию(хотя это плохо)
Вообще, не понятно что ты хочешь.
PM   Вверх
drZmeu
Дата 18.3.2007, 18:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Tectoder: Коточе возми сейчас побыстрому напиши dll которая будет прослушивать порт при внедерении в другой процесс TotalCommander например....
Без хуков это сделать нериально потомучто будет вывалится всё наружу после if(WSAStartup(0x0200,&wsa)!=0)    !!!!
Мне нужно: #1 Инжектить с помошью потоков мою dll в чужой процесс - с этим проблем нет. Предположим она уже там.
#2 Какимто образом научится обшатся с моей dll послеть её тотже запрос (*SSProc)(0xFF10); !!!
После чего активируется мой HOOK и создаётся поток на StartWsa !!!
Причём HOOK должен ставится только на этот процесс на WH_GETMESSAGE ! Когда подгрузилась WSAStartup! Отправляется сообшение моему процессу ктоторый опять же отсылает (*SSProc)(0xFF00);
и снимает HOOK! Порт прослушивается, плагин работает, все счастливы Happy END !!!
Как подругому разъеснить незнаю! Разжевал как мог... ПОмойму и ребёнок поймёт!
Задача состоит только в том чтоб dll в чужом процессе благополучно запустила WSAStartup...
--------------------
[code=html]<table bgcolor='#0' width='69'><tr align='center' bgcolor='#0'><td><font size='6' face='cursive' color='#ffffff'><b>A</b></font></td></tr><tr align="center" bgcolor="#0">[/code]
PM MAIL   Вверх
Tectoder
Дата 18.3.2007, 19:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Тебе надо как-то уведомить dll о том, что надо чтото сделать? Ну есть куча вариантов.
Пусть dll, которая в другом процессе, ждет, пока сработает семафор, и по этому событию запускает твою процедуру.
Или создает окно на которое будет ждать прихода сообщений. Или принимает команды через канал. Или на худой конец, создавай в чужом процессе поток, с процедурой SSProc. Вариантов масса.
Однако, любому, задающему вопрос на форуме, следует помнить, что вопросы надо задавать конкретные. Вопросы аля: "вот код почему он не работает" обычно получают наименьшее количиство ответов. Следует также помнить, что никто не умеет, и не обязан читать ваши мысли, и поэтому не всегда бывает понятно, что вам нужно. Винить в этом следует себя(потому что не можете объяснить) а не того, кто отвечает(мол, че тут не понятного, я же все объяснил).

Это сообщение отредактировал(а) Tectoder - 18.3.2007, 19:05
PM   Вверх
W4FhLF
Дата 18.3.2007, 20:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


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

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



Цитата(drZmeu @  18.3.2007,  18:52 Найти цитируемый пост)
Причём HOOK должен ставится только на этот процесс на WH_GETMESSAGE ! Когда подгрузилась WSAStartup! Отправляется сообшение моему процессу ктоторый опять же отсылает (*SSProc)(0xFF00);


Ты в dll ставишь ГЛОБАЛЬНЫЙ СИСТЕМНЫЙ хук, а вот, чтобы поставить хук на отдельное приложение нужно инжектить dll в отдельное приложение и ты пишешь, что проблем с этим у тебя нет:

Цитата(drZmeu @  18.3.2007,  18:52 Найти цитируемый пост)
#1 Инжектить с помошью потоков мою dll в чужой процесс - с этим проблем нет.


+ "инжектить с помощью потоков" неккоректно звучит и ничего не значит в данной ситуации.




--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
drZmeu
Дата 18.3.2007, 21:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Ок звучит некоректно тогда: Внедрение DLL с помощью удаленных потоков
Я думаю Рихтер описывает всё коректно  smile 
Tectoder: Извени если я тебя обидел или задел...

--------------------
[code=html]<table bgcolor='#0' width='69'><tr align='center' bgcolor='#0'><td><font size='6' face='cursive' color='#ffffff'><b>A</b></font></td></tr><tr align="center" bgcolor="#0">[/code]
PM MAIL   Вверх
W4FhLF
Дата 18.3.2007, 22:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


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

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



drZmeu, суть в том, что этот метод будет инжектировать DLL во все процессы имеющие окна и во все вновь созданные процессы. Он тебе не подходит, если ты хочешь инжектировать только в один процесс.


--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
drZmeu
  Дата 19.3.2007, 01:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



А какой тогда подходит???
Моё приложение не будет иметь окон...
Я в хуках очень мало понимаю но почему "если будут имется окна то способ мне неподходит =\"
Тогда можно ли както решить проблему подгрузки WSAStartup...
Из DllMain этого делать нельзя ибо вызовет ошибку  smile 

Это сообщение отредактировал(а) drZmeu - 19.3.2007, 01:02
--------------------
[code=html]<table bgcolor='#0' width='69'><tr align='center' bgcolor='#0'><td><font size='6' face='cursive' color='#ffffff'><b>A</b></font></td></tr><tr align="center" bgcolor="#0">[/code]
PM MAIL   Вверх
dumb
Дата 19.3.2007, 04:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

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



drZmeu,
эм. не думал, что мой совет вызовет столько сложностей - "выдан" он был, исходя из твоих предыдущих топиков, в предположении что хуки(SetWindowsHookEx) ты так или иначе используешь(и умеешь это делать). тем не менее, совет-то довольно заднепроходный, за что приношу извинения, так как он, похоже, внес только полную сумятицу в твою голову. user posted image

достаточно в DllMain просто создать поток, в котором спокойно работать:
Код

#include <windows.h>
#pragma comment (lib, "ws2_32.lib")
DWORD WINAPI ListenerThreadProc(LPVOID lpParameter)
{
  WSADATA wsaData;
  SOCKET slisten, sclient;
  struct sockaddr_in local, lclient;
  int iSize;
  if (WSAStartup(MAKEWORD(2,2), &wsaData)) return 1;
  slisten = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
  if (slisten == INVALID_SOCKET) return 1;
  local.sin_family = AF_INET;
  local.sin_addr.s_addr = inet_addr("127.0.0.1");
  local.sin_port = htons(2432);
  if (bind(slisten, (SOCKADDR*)&local, sizeof(local)) == SOCKET_ERROR) return 1;
  if (listen(slisten, 10) == SOCKET_ERROR) return 1;
  iSize = sizeof(lclient);
  sclient = accept(slisten,(struct sockaddr *)&lclient, &iSize);
  char smsg[] = "welcome. and bye.\n";
  send(sclient, smsg, sizeof(smsg), 0);
  closesocket(sclient);
  closesocket(slisten);
  WSACleanup();
  return 0;
}

BOOL APIENTRY DllMain(HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved)
{
  if (ul_reason_for_call == DLL_PROCESS_ATTACH)
  {
    HANDLE hThread = CreateThread(NULL, 0, ListenerThreadProc, hModule, 0, NULL);
    if (hThread) CloseHandle(hThread);
  }
  return TRUE;
}

на правах попытки реабилитации за совет, попусту породивший не один топик.
 smile
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.0590 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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