Вернуться   CoderX :: Forums > Основные форумы > Программинг
Войти через OpenID

Программинг Форум для тем связанных с программированием

Чат (Новых сообщений с момента вашего последнего визита нет)
Загрузка...
Задавайте ваши вопросы на форуме. Чат предназначен для небольших разговоров.
 
Ответ
 
Опции темы Опции просмотра
Старый 09.11.2010, 16:36   #1
Местный
 
Аватар для Yegor
 
Регистрация: 05.04.2009
Сообщений: 1,436
Сказал Спасибо: 306
Имеет 122 спасибок в 98 сообщенях
Yegor пока неопределено
По умолчанию Как передать параметры в DLL?

Программа инжектит dll в клиент Л2, сейчас появилась необходимость передать в эту dll номер порта на который она должна пытатся подключиться. Как это лучше сделать?
__________________
Продажа чистых аккаунтов 4G, L2 EU, AARu, AA EU, Aion EU, Tera RU, Tera EU (ICQ 594297609)
Продажа VK авторег аккаунтов (ICQ 594297609)
Yegor вне форума   Ответить с цитированием
Старый 09.11.2010, 17:14   #2
Новичок
 
Регистрация: 18.07.2010
Сообщений: 4
Сказал Спасибо: 0
Имеет 3 спасибок в 3 сообщенях
izen пока неопределено
По умолчанию

Есть множество технологий: шареная между процессами память (aka Shared File Mem Mapping), каналы, сокеты на локалхост, COM IDataObject, банальный файл. Я-бы выбрал каналы (pipes).
izen вне форума   Ответить с цитированием
За это сообщение izen нажился спасибкой от:
Старый 09.11.2010, 17:48   #3
Рыцарь
 
Аватар для alexteam
 
Регистрация: 07.03.2009
Сообщений: 9,139
Сказал Спасибо: 70
Имеет 2,820 спасибок в 1,735 сообщенях
alexteam на пути к лучшему
По умолчанию

патч дллку ))
__________________
L2Ext - project closed.
alexteam вне форума   Ответить с цитированием
Старый 09.11.2010, 23:27   #4
Местный
 
Аватар для Yegor
 
Регистрация: 05.04.2009
Сообщений: 1,436
Сказал Спасибо: 306
Имеет 122 спасибок в 98 сообщенях
Yegor пока неопределено
По умолчанию

izen, хотелось бы как то совсем просто, дллка и так будет иметь связь с с основным процессом через сокеты.
__________________
Продажа чистых аккаунтов 4G, L2 EU, AARu, AA EU, Aion EU, Tera RU, Tera EU (ICQ 594297609)
Продажа VK авторег аккаунтов (ICQ 594297609)
Yegor вне форума   Ответить с цитированием
Старый 09.11.2010, 23:43   #5
Новичок
 
Регистрация: 18.07.2010
Сообщений: 4
Сказал Спасибо: 0
Имеет 3 спасибок в 3 сообщенях
izen пока неопределено
По умолчанию

ну а в чем проблема через тот-же сокет передать? Банальный файл в корне то-же вариант. Перед иньектом записали, во 2м процессе считали, удалили. Или например если иньект через CreateRemoteThread и запись загрузчика в АП l2, то сделать какой-нить глобальный постоянный адрес, или положить номер порта на дно стека трида или в самом коде иньекта вызывать DllMain с lpReserved с портом. или да, найти абсолютное файловое смещение номера порта в dll и тупо ее патчить перед иньектом.

Последний раз редактировалось izen, 10.11.2010 в 00:08.
izen вне форума   Ответить с цитированием
Старый 10.11.2010, 00:54   #6
Рыцарь
 
Аватар для destructor
 
Регистрация: 26.06.2009
Сообщений: 2,433
Сказал Спасибо: 154
Имеет 692 спасибок в 426 сообщенях
destructor на пути к лучшему
По умолчанию

Цитата:
Сообщение от alexteam Посмотреть сообщение
патч дллку ))
рульный совет.

после инжекта ты знаеш адрес загрузки длл.
можно узнать по какому смещению лежит нужная переменная.
потом пишем туда через WriteProcessMemory
(ты уже писал в память чтобы "заинжектить" и значит у тебя есть соответствующие права)
только адреса придется искать.


твой случай можно разрулить так:
в длл делаем экспортируемую функию
int m_connect(int port)
{
// тут делаем что тебе нужно с портом.
return true;
};


у тебя есть своя программа_инжектилка.
там пишем такой код.
c++ Код:
DWORD a1 = loadLibrary("твой_модуль.dll");    DWORD a2 = getprocaddress(a1,"m_connect");    FreeLibrary(a1);    DWORD ofs_connect = a2 - a1; // узнали как далеко находится функция [b]m_connect[/b] от начала длл.    HANDLE hProcess =  CreateProcess("линейка.exe");    DWORD pStartThread  = GetProcAddress(GetModuleHandle(L"kernel32.dll"), "LoadLibraryW");    PVOID mem  = VirtualAllocEx(hProcess,0,0x1000,0x1000,0x40);    if(! WriteProcessMemory(hProcess, mem, "путь_к_длл", 500) ) return 0; //чтото нитак.    HANDLE hThread = CreateRemoteThread(hProcess, NULL, 0, pStartThread, mem, CREATE_SUSPENDED, NULL);    ResumeThread(hThread);    //тоесть выполнили стандартную догрузку длл.    DWORD dwWaitResult = WaitForSingleObject( hThread, INFINITE);// ждем завершения потока    DWORD exitcode = 0;    BOOL rth =  GetExitCodeThread(hThread,&exitcode); // получаем его результат.    CloseHandle(hThread);//    VirtualFreeEx(hProcess,mem,0,MEM_RELEASE);// освобождаем ненужные ресурсы.    //получаем адрес функции  "m_connect" в процесе "линейка.ехе"    DWORD connect_address = exitcode + ofs_connect;     // теперь уличная магия     hThread = CreateRemoteThread(hProcess, NULL, 0, connect_address, port, CREATE_SUSPENDED, NULL);     ResumeThread(hThread);     CloseHandle(hThread);     CloseHandle(hProcess);

Добавлено через 3 минуты
Цитата:
Сообщение от izen Посмотреть сообщение
ну а в чем проблема через тот-же сокет передать?
+1

Цитата:
Сообщение от izen Посмотреть сообщение
Банальный файл в корне то-же вариант.
а за такое на кострах сжигать надо.

Добавлено через 2 минуты
Цитата:
Сообщение от izen Посмотреть сообщение
или да, найти абсолютное файловое смещение номера порта в dll и тупо ее патчить перед иньектом.
и за такое тоже
__________________
Шожиделать.. ботить хочется..

Последний раз редактировалось destructor, 10.11.2010 в 00:54. Причина: Добавлено сообщение
destructor вне форума   Ответить с цитированием
За это сообщение destructor нажился 2 спасибками от:
Старый 10.11.2010, 01:25   #7
Местный
 
Аватар для Yegor
 
Регистрация: 05.04.2009
Сообщений: 1,436
Сказал Спасибо: 306
Имеет 122 спасибок в 98 сообщенях
Yegor пока неопределено
По умолчанию

Попутный вопрос. Как можно програмно проверить было ли же ужен подружена нужная длл к процессу л2, это на случай если основное приложение было перезапущено и ему надо принять решение патчить повторно или нет.
__________________
Продажа чистых аккаунтов 4G, L2 EU, AARu, AA EU, Aion EU, Tera RU, Tera EU (ICQ 594297609)
Продажа VK авторег аккаунтов (ICQ 594297609)
Yegor вне форума   Ответить с цитированием
Старый 10.11.2010, 02:22   #8
Новичок
 
Регистрация: 18.07.2010
Сообщений: 4
Сказал Спасибо: 0
Имеет 3 спасибок в 3 сообщенях
izen пока неопределено
По умолчанию

EnumProcessModules из psapi(_http://msdn.microsoft.com/en-us/library/ms682621(v=VS.85).aspx) или Module32First/Next из kernel32 (_http://msdn.microsoft.com/en-us/library/ms686849(v=VS.85).aspx).

PS: про сожжение на костре за костыль согласен, но для личного "совсем простого" применения вполне ничего.

Последний раз редактировалось izen, 10.11.2010 в 02:32.
izen вне форума   Ответить с цитированием
За это сообщение izen нажился спасибкой от:
Старый 10.11.2010, 12:41   #9
Рыцарь
 
Аватар для destructor
 
Регистрация: 26.06.2009
Сообщений: 2,433
Сказал Спасибо: 154
Имеет 692 спасибок в 426 сообщенях
destructor на пути к лучшему
По умолчанию

Yegor, 2 раза длл не загрузится, поэтому инжектить ее можно много раз.
__________________
Шожиделать.. ботить хочется..
destructor вне форума   Ответить с цитированием
За это сообщение destructor нажился спасибкой от:
Старый 10.11.2010, 15:31   #10
Admin!
 
Аватар для xkor
 
Регистрация: 04.08.2007
Сообщений: 2,360
Сказал Спасибо: 113
Имеет 1,566 спасибок в 651 сообщенях
xkor на пути к лучшему
По умолчанию

Цитата:
Сообщение от destructor Посмотреть сообщение
Yegor, 2 раза длл не загрузится, поэтому инжектить ее можно много раз.
смотря как инжектить...
__________________
Я здесь практически не появляюсь!, Skype - ikskor
xkor вне форума   Ответить с цитированием
Ответ

  CoderX :: Forums > Основные форумы > Программинг



Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +4, время: 03:48.

vBulletin style designed by MSC Team.
Powered by vBulletin® Version 3.6.11
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Locations of visitors to this page
Rambler's Top100

Вы хотите чувствовать себя в безопасности? чоп Белган обеспечит её!