Сейчас на форуме: tyns777, cppasm, dutyfree, asfa (+7 невидимых)

 eXeL@B —› Вопросы новичков —› Как избавиться от релоков в длл.
Посл.ответ Сообщение

Ранг: 82.5 (постоянный), 1thx
Активность: 0.130.04
Статус: Участник

Создано: 09 января 2017 14:14
· Личное сообщение · #1

Вообщем хотел чтобы в ollydbg либу можно было править в любом месте. Но из-за релоков при загрузке мой код ломается. Как бы это обойти. На экзешниках удалял прогой Stripreloc, а как быть с либами.
Можете подкинуть вин апи для загрузки шифрованной либы в памяти и ее там расшифровке сначала, а только потом loadlibrarya, чтобы делать.



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

Создано: 09 января 2017 14:22
· Личное сообщение · #2

Без релоков она у тебя не запустится в 90% случаев. Таскай с собой на флешке виртуалку с олькой и этой либой и правь там, где надо.



Ранг: 82.5 (постоянный), 1thx
Активность: 0.130.04
Статус: Участник

Создано: 09 января 2017 14:49
· Личное сообщение · #3

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




Ранг: 90.1 (постоянный), 91thx
Активность: 0.290.56
Статус: Участник

Создано: 09 января 2017 15:03 · Поправил: Boostyq
· Личное сообщение · #4

Ну, у твоей программы есть потенциальная база, и если база у тебя занята, то загрузчик должен выбрать другое свободное место.
Если нужно двигать, то нужна таблица релокации, чтобы знать где править прыжки, иначе крашить будет.
У exeшника, я думаю, можно удалить, т.к. вначале еще нет загруженных библиотек, но вот с dllками два варианта: 1) двигай базу через компилятор, и, если повезет и двигать не нужно, то можно удалить релоки. 2) оставлять таблицу
По поводу шифрования можешь использовать любое, я например писала свой формат контейнера простенький, а затем загрузчик (аналог loadlibrary)
Вот рабочий пример:
https://www.codeproject.com/Tips/430684/Loading-Win-DLLs-manually-without-LoadLibrary
П.с. так кстати некоторые анти-читы делают, для своих модулей

-----
В облачке многоточия




Ранг: 315.1 (мудрец), 631thx
Активность: 0.30.33
Статус: Модератор
CrackLab

Создано: 09 января 2017 15:05
· Личное сообщение · #5

mazaxaker
либо пиши базонезависимый код, либо добавь в таблицу адреса RelocEditor

8796_09.01.2017_EXELAB.rU.tgz - Reloc.rar



Ранг: 82.5 (постоянный), 1thx
Активность: 0.130.04
Статус: Участник

Создано: 09 января 2017 15:13
· Личное сообщение · #6

SReg, на 7 64 бит пробую в проге релок таблицу длл получить, и она закрывается) Видать баг, попробую на виртуалке хпшной.
А если загрузить длл через MapViewOfFile, провести расшифровку и потом передать адрес начала длл, который возвращает MapViewOfFile и передать его в LoadLibraryA, сможет ли она так понять и загрузить либу, то есть хочу после мапирования и расшифровки либы передать управление на DllMain либы таким образом.

Добавлено спустя 11 минут
Boostyq пишет:
1) двигай базу через компилятор

А как, куда там лезть в свойства проекта как понимаю ? Пишу в visual studio c++ 2010.



Ранг: 16.3 (новичок), 2thx
Активность: 0.030
Статус: Участник

Создано: 09 января 2017 16:10
· Личное сообщение · #7

Убрать релоки при линковке можно так:
Свойства проекта->Компоновщик->Дополнительно->Фиксированный базовый адрес->Да
В готовом бинаре CFF Explorer можно заюзать Rebuilder




Ранг: 90.1 (постоянный), 91thx
Активность: 0.290.56
Статус: Участник

Создано: 09 января 2017 20:13
· Личное сообщение · #8

mazaxaker пишет:
А как, куда там лезть в свойства проекта как понимаю ? Пишу в visual studio c++ 2010.

https://msdn.microsoft.com/ru-ru/library/f7f5138s.aspx
https://msdn.microsoft.com/en-us/library/w368ysh2.aspx

-----
В облачке многоточия




Ранг: 82.5 (постоянный), 1thx
Активность: 0.130.04
Статус: Участник

Создано: 11 января 2017 20:51
· Личное сообщение · #9

С дллкой получилось. А есть прога, чтобы убрать релоки в 64 битном экзешнике ?



Ранг: 95.1 (постоянный), 247thx
Активность: 0.260.01
Статус: Участник

Создано: 11 января 2017 23:07
· Личное сообщение · #10

mazaxaker пишет:
А есть прога, чтобы убрать релоки в 64 битном экзешнике ?

CFF Explorer.

-----
TEST YOUR MIGHT





Ранг: 312.0 (мудрец), 349thx
Активность: 0.460.65
Статус: Участник
Advisor

Создано: 11 января 2017 23:23
· Личное сообщение · #11

ёпта...поставь в пе_редаче флаг в хидере - релокстрипед, и будет тебе счастье..

-----
Чтобы юзер в нэте не делал,его всё равно жалко..


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

Ранг: 82.5 (постоянный), 1thx
Активность: 0.130.04
Статус: Участник

Создано: 12 января 2017 01:20
· Личное сообщение · #12

Bronco, флаг не нашел, через peexplorer поставил адрес релоков от балды и базу выставил 400000, заработало)
Bronco, а можешь тут ткнуть где флаг этот https://github.com/fancycode/MemoryModule/tree/master/doc
Изучал по этим структурам pe формат.



Ранг: 431.7 (мудрец), 390thx
Активность: 0.730.32
Статус: Участник

Создано: 12 января 2017 02:26 · Поправил: dosprog
· Личное сообщение · #13

Слово в [PE:16h] - его бит0 = 1 если релоки не использовать.



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


Ранг: 337.5 (мудрец), 348thx
Активность: 2.112.42
Статус: Участник

Создано: 12 января 2017 15:48
· Личное сообщение · #14

mazaxaker

Как сказали в #2 дллка не может быть не релокабельна, она не будет подгружена из за занятых адресов или возможно загрузка такого модуля блокируется загрузчиком по причинам безопасности, в любом случае так делать нельзя.

Сначала нужно загрузить модуль, потом его изменять. Либо редактировать фиксапы.

-----
vx




Ранг: 82.5 (постоянный), 1thx
Активность: 0.130.04
Статус: Участник

Создано: 12 января 2017 15:56
· Личное сообщение · #15

difexacaw, ну странно, но она грузится после убирания релоков через stripreloc.



Ранг: 431.7 (мудрец), 390thx
Активность: 0.730.32
Статус: Участник

Создано: 12 января 2017 20:51 · Поправил: dosprog
· Личное сообщение · #16

Повезло.
А если программа будет использовать вторую так же пострипанную DLL с таким же базовым адресом,
то она уже не загрузится.




Ранг: 337.5 (мудрец), 348thx
Активность: 2.112.42
Статус: Участник

Создано: 13 января 2017 04:25
· Личное сообщение · #17

mazaxaker

Ситуации возможны разные, к примеру я хорошо знаю нтлдр, но я не знаю или не помню его поведение в данной ситуации. Так как это никогда не было нужно, нигде не использовалось и сам формат такой модуля не предназначен для загрузки. Повторюсь вы не должны это использовать.

-----
vx



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


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