Сейчас на форуме: (+5 невидимых)

 eXeL@B —› Программирование —› Аналог hModule своей dll..
Посл.ответ Сообщение

Ранг: 12.0 (новичок)
Активность: 0=0
Статус: Участник

Создано: 05 октября 2007 14:06
· Личное сообщение · #1

Непонятное я название темы придумал конечно...
Вобщем проблема такая:
Есть лоадер и dll.
dll записана в виде массива байтов внутрь лоадера. Загружается это безобразие через WPM.
Короче говоря: загрузка есть, но нету hModule разумеется.
А мне надо брать что-то, что может сообщить моей dll "аналог этого hModule"
Дело в том что я записывал патч через GetModuleFileName, сейчас это неработает.
Также есть проблема с хуками. GetModuleHandle(NULL) не берёт у меня приложение которое я хукаю.
Что мне не годится - чтение registry.. Если есть соображения на этот счёт просьба отписаться.



Ранг: 6.9 (гость)
Активность: 0=0
Статус: Участник

Создано: 05 октября 2007 14:25
· Личное сообщение · #2

void *GetHmodule() { return (void*)((size_t)&GetHmodule)&~0x0ffff); }




Ранг: 105.9 (ветеран)
Активность: 0.060
Статус: Участник

Создано: 05 октября 2007 14:33
· Личное сообщение · #3

Troll
кроме непонятного названия темы, ты еще ее и непонятно описал проблему.
Что такое WPM?
Из того, что я понял: ты дллку загружаешь в ручную, т.е. без Loadlibrary. Если хочешь, что б заработали функции с hModule внеси инфу о своей dll'ке в PEB.



Ранг: 162.2 (ветеран)
Активность: 0.090
Статус: Участник

Создано: 05 октября 2007 14:39 · Поправил: asd
· Личное сообщение · #4

Бред какой-то и нифига не понятно, что тебе надо.
hModule численно равен стартовому адресу загрузки модуля.
Остальное вообще не понял, что надо. Если тебе нужно просто вызвать дллмайн, то можно её передать начальный адрес загрузки модуля. если хочеш, чтобы с этой длл работали виндовые ф-ии - придётся повозиться.

add Опередили



Ранг: 12.0 (новичок)
Активность: 0=0
Статус: Участник

Создано: 05 октября 2007 14:49 · Поправил: Troll
· Личное сообщение · #5

Да, загружаю вручную. Нет, нельзя мне трогать PEB.. Мне его как-раз таки необходимо было очищать.
DllMain вызывается, здесь нет проблем. Я имею ввиду что.. Ай, вот внизу приведу что мне необходимо.
Вот-
GetModuleFileName(hinstDLL,MyHackDirectory,255);
Это раз. Тоесть мне нужно как-то просто получить патч. Как я сказал чтение регистра непоходит.
Несрабатывает хук приложения с использованием GetModuleHandle... нету базы.
Просто, как я могу это сделать, без hModule моей dll... Возможные варианты






Ранг: 163.7 (ветеран)
Активность: 0.070
Статус: Участник

Создано: 07 октября 2007 01:09
· Личное сообщение · #6

GetModuleFileName как раз и берет путь из PEB.LdrData, поэтому не работает для твоего модуля. Пиши подробнее.

Alexey Suda-Chen пишет:
void *GetHmodule() { return (void*)((size_t)&GetHmodule)&~0x0ffff); }

В солидных продуктах можно применить и правильный метод www.google.com/search?q=__ImageBase



Ранг: 66.8 (постоянный)
Активность: 0.030
Статус: Участник

Создано: 07 октября 2007 10:31
· Личное сообщение · #7

Troll, можно взять за hModule любое значение, например 0BADC0DEh, и в хуке GetModuleFileName проверять этот параметр, если он 0BADC0DEh, то возврящать то что надо. Если нет, то выполнять оригинальный GetModuleFileName



Ранг: 12.0 (новичок)
Активность: 0=0
Статус: Участник

Создано: 07 октября 2007 15:33
· Личное сообщение · #8

UsAr непонял..
Да мне лишь бы как нибудь передать от лоадера патч.. надо уже в DllMain'е его прочитать. Слышал его переадают как третий аргумент lpReserved.
Наверное я однако неверно выражаюсь насчёт этого hModule.. Просто у меня были хуки которые требовали свой модуль, но я их сменил, так что мне надо только патч.



Ранг: 16.2 (новичок)
Активность: 0.010
Статус: Участник

Создано: 07 октября 2007 22:03
· Личное сообщение · #9

Troll пишет:
Загружается это безобразие через WPM.

Кто-нибудь знает еще кроме ТопикСтартера, что это за такой за WPM? – а то он упорно молчит и игнорирует вопросы общественности
seeq пишет:
Что такое WPM?

ужаснах как тоже стало интересно, плз кто знает, объясните или дайте линк напочитать про этот WPM?



Ранг: 12.0 (новичок)
Активность: 0=0
Статус: Участник

Создано: 07 октября 2007 22:29
· Личное сообщение · #10

WriteProcessMemory Всё же понятно..
Создаётся образ dll, в котором восстанавливаются релоки, импорт, далее это проецируется на процесс, с вызовом DllMain и DLL_PROCESS_ATTACH



Ранг: 16.2 (новичок)
Активность: 0.010
Статус: Участник

Создано: 07 октября 2007 23:45 · Поправил: Prince[ART]
· Личное сообщение · #11

Troll
гы, лольная тема! короче, вот что тебе написал UsAr мне понятно, а что ты пишешь хз что это за такое вообще за буквы
проще говоря - возьми эту длл засунь в ресурсы этого лоадера, потом скинь на диск в виде
путь_имя_dll = GetTempPath + lstrcat (…,имя_dll); // путь к длл - типа постоянная строковая константа
LoadResource_dll(FindResource+LoadResource+LockResource+SizeofResource +CreateFile(путь_имя_dll)+WriteFile+CloseHandle); // так делают все кому надо чтобы длл находилась в теле *.exe
И потом когда требуется патч в любом месте вызывай GetTempPath + lstrcat (…,имя_dll);// и при удалении тоже
Если на диск скидывать нельзя, тогда пробуй как написал UsAr, по-другому
S_T_A_S_ пишет:
Пиши подробнее.

А лучше показывай код или еще лучше прицепи аттач со свои лоадером+ключи от дома

гыгы, можно еще тупо в DllMain перебрать/поискать и сравнить имя этого лоадера с запущенными процессами, если совпало копипастим путь к этому лоадеру, ну как-то так…



Ранг: 66.8 (постоянный)
Активность: 0.030
Статус: Участник

Создано: 08 октября 2007 09:29
· Личное сообщение · #12

Troll, ну тогда в томже процессе выделяется память, куда записывается путь.
И передавать указатель на этот путь через какое-нибудь неиспользуемое поле в TEB'e/PEB'e. Например есть TEB.Unknown по смещению F88h, вроде как никто их не использует.



Ранг: 12.0 (новичок)
Активность: 0=0
Статус: Участник

Создано: 08 октября 2007 14:41
· Личное сообщение · #13

На диск скидывать нельзя. Я уже делал через CreateFile-WriteFile, этот метод неподходит. И в ресурсах мою длл тоже нельзя держать.

Я уже нашёл как это сделать.
Передаю при загрузке длл в аргумент lpReserved свою структуру. Параметры которой беру от лоадера.
И дальше всё просто.
GetFullPathName(lpReserved->path,MAX_PATH,buffer,&strip);



Ранг: 163.7 (ветеран)
Активность: 0.070
Статус: Участник

Создано: 09 октября 2007 00:22 · Поправил: S_T_A_S_
· Личное сообщение · #14

В инжектируемой dll можно объявить переменные как экспортируемые, найти их адрес перед инжектом, и записать туда что нужно. Другой вариант - ехе с релоками инжектирует сам себя, при этом все уже инициализированные переменные будут скопированы (только аккуратно с хендлами и поинтерами)



Ранг: 12.0 (новичок)
Активность: 0=0
Статус: Участник

Создано: 09 октября 2007 19:50
· Личное сообщение · #15

Верно. Только я уже вобщем-то справился способом описанным выше..
Извините ребята, конечно название темы совсем не подходящее было выбрано, дело в том что я использовал хуки, которые требовали мой модуль, но метод я сменил, так что вобщем-то проблем больше нет...


 eXeL@B —› Программирование —› Аналог hModule своей dll..
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати