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

 eXeL@B —› Программирование —› Загрузчик
Посл.ответ Сообщение

Ранг: 173.8 (ветеран), 208thx
Активность: 0.120.36
Статус: Участник

Создано: 27 февраля 2012 23:47
· Личное сообщение · #1

Есть приложение для расширения функционала софта N.
Для некоторых моментов приходится принудительно загружать в софт либу.
Для поддержки актуальности, либа дергается с сети.
В данный момент библиотека загружается на диск и инжектится стандартным способом, но как-то не кашерно делать все эти лишние манипуляции, захотел миновать стадию создания файла и просто грузить из памяти. Вот тут-то и столкнулся с множеством нюансов.
В идеале хотелось бы воспользоваться системным загрузчиком, однако, ясен пень, он не принимает указатель на память. Покопал в сторону LdrLoadDll, но если вызывать NtCreateSection() без SEC_IMAGE, естественно получается фэйл. Смотрел в сторону ручной загрузки, релоки, копирование, все бы ничего, но с импортом засада. В общем, надеюсь что я что-то упустил.
Если что, прятать ничего ни от кого цели нет, да и реакция антивирусов не принципиальна.




Ранг: 462.8 (мудрец), 468thx
Активность: 0.280
Статус: Участник
Only One!

Создано: 28 февраля 2012 00:23
· Личное сообщение · #2

VOLKOFF пишет:
но с импортом засада

Конкретнее, почему?

-----
aLL rIGHTS rEVERSED!




Ранг: 173.8 (ветеран), 208thx
Активность: 0.120.36
Статус: Участник

Создано: 28 февраля 2012 00:30
· Личное сообщение · #3

OnLyOnE пишет:
Конкретнее, почему?

Узнать адреса функций модулей, которые уже подгружены самим процессом не проблема, а как патчить IAT для модулей которые будут подгружены моей библиотекой, я хз.

Плюс, при ручной загрузке, не будут работать такие апишки, как GetModuleHandle() и хоть можно соорудить для них костыли, есть еще масса нюансов, поэтому я и смотрел в первую очередь на возможность "правильной" загрузки средствами ОС.

Насколько решаема задача и насколько оно вообще "того стоит", вот и зашел спросить.




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

Создано: 28 февраля 2012 00:35 · Поправил: zeppe1in
· Личное сообщение · #4

http://forum.antichat.ru/threadnav132116-1-10.html
пробовал. работает хорошо, рекомендую)

-----
zzz




Ранг: 173.8 (ветеран), 208thx
Активность: 0.120.36
Статус: Участник

Создано: 28 февраля 2012 00:42
· Личное сообщение · #5

zeppe1in пишет:
работает хорошо, рекомендую)

Такое уже писал, в свой процесс из памяти загрузить на несколько порядков легче.
Вопрос немного о другом, как тут любят писать, сосредоточтесь




Ранг: 462.8 (мудрец), 468thx
Активность: 0.280
Статус: Участник
Only One!

Создано: 28 февраля 2012 01:33 · Поправил: OnLyOnE
· Личное сообщение · #6

Я ранее тоже задавался данной проблемой, т.е. ухитриться использовать для загрузки нтлодырь..
Начал капать LdrLoadDll... и потом забросил, написав свой загрузчик.. которому до оригинального ооочень далеко.. Но для моих нужд его достаточно было. Думаю надо рыть LdrLoadDll глубже..
VOLKOFF пишет:
а как патчить IAT для модулей которые будут подгружены моей библиотекой, я хз.

Хм.. а из твоей библы которую ты загружал бы своим загрузчиком нельзя вызывать тотже LoadLibrary? Или эти модули тоже в виде образов в памяти, а не файлы?
Или я что-то не так понял?

-----
aLL rIGHTS rEVERSED!




Ранг: 173.8 (ветеран), 208thx
Активность: 0.120.36
Статус: Участник

Создано: 28 февраля 2012 02:11
· Личное сообщение · #7

OnLyOnE пишет:
а из твоей библы которую ты загружал бы своим загрузчиком нельзя вызывать тотже LoadLibrary?

Т.е. предлагаешь пофиксить часть импорта до внедрения, а потом внедриться, подгрузить оставшиеся модули и чтобы либа сама свой IAT довела до ума уже по месту?




Ранг: 337.6 (мудрец), 224thx
Активность: 0.210.1
Статус: Участник
born to be evil

Создано: 28 февраля 2012 13:34
· Личное сообщение · #8

VOLKOFF
а не проще подгрузить модули, которые нужны либе так же, как инжектишь либу с диска? а потом уже импорт в своей в памяти и тп...

-----
От многой мудрости много скорби, и умножающий знание умножает печаль


| Сообщение посчитали полезным: VOLKOFF

Ранг: 173.8 (ветеран), 208thx
Активность: 0.120.36
Статус: Участник

Создано: 28 февраля 2012 14:52
· Личное сообщение · #9

ajax пишет:
а не проще подгрузить модули, которые нужны либе так же, как инжектишь либу с диска?

Вот, простое рабочее решение, настолько очевидное, что до сих пор не пойму, как не пришло в голову самому

Грузить штаткой, я так понимаю, не получится, если Инди таки не расскажет как обходится проверка валидности образа




Ранг: 462.8 (мудрец), 468thx
Активность: 0.280
Статус: Участник
Only One!

Создано: 28 февраля 2012 21:55
· Личное сообщение · #10

VOLKOFF пишет:
Т.е. предлагаешь пофиксить часть импорта до внедрени

Как вариант..

-----
aLL rIGHTS rEVERSED!




Ранг: 191.8 (ветеран), 46thx
Активность: 0.170
Статус: Участник

Создано: 02 марта 2012 13:13
· Личное сообщение · #11

на глаза попался с исходником - напосмотреть
http://cblauncher.codecutter.org/CbLauncher_1.0.zip


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


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