Перейти к содержимому

Фотография

dllпросмотр и редактирование


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 33

#1
товарищ Сухов...

товарищ Сухов...
  • Свой человек
  • 755 сообщений
Прошу дать совет.

Есть прога в которой операции выполняются посредством файлов dll. Открывать такие файлы я научился, но мне там мало что понятно. Я хочу дополнить файл dll для повышения обрабатываемых потоков в программе. Другими словами просто хочу закинуть в dll новые данные, чтобы прога видела и различала их в потоке информации.
Могу ли я конвертировать dll в текст и обратно?
  • 0

#2
Zulkar

Zulkar

    Читатель

  • В доску свой
  • 3 243 сообщений

Есть прога в которой операции выполняются посредством файлов dll. Открывать такие файлы я научился, но мне там мало что понятно.

А вы их в блокноте что ли открываете? :-)

Я хочу дополнить файл dll для повышения обрабатываемых потоков в программе. Другими словами просто хочу закинуть в dll новые данные, чтобы прога видела и различала их в потоке информации.

Что значит "Я хочу дополнить файл dll", да еще для повышения обрабатываемых потоков? Да, кстати, я понять могу поток у вас - это stream или thread?

Могу ли я конвертировать dll в текст и обратно?

Опять таки, что это значит? Вы хотите узнать как засунуть текст в ресурсы dll или что?

DLL - по сути ничем не отличается от exe файла. Это тот же самый PE-файл, только без точки входа. Вот и вся разница между exe и dll. Так что попробуйте заменить в вашем тексте dll на exe и представить, что вы хотите.
  • 0

#3
Borg

Borg
  • Частый гость
  • 93 сообщений
Мой ответ НЕТ! Это не возможно по ряду причин...

Во-первых, не текст а исходный код! Во вторых, есть декомпиляторы, но для этого надо знать на каком языке написана DLL что бы выбрать нужный декомпилятор. После этого вы получите исходный код, но такой который вы 100% не сможете скомпилировать, потому как при компиляции по коду проходит оптимизатор и в итоге вы получите совершенно другой исходный код. И в третьих даже если вы и выдерете код и он будто бы должен компилироваться вам нужны сама среда разработки для компиляции и все используемые библиотеки в этой ДЛЛ.

Есть ещё вариант если ДЛЛ написан на .NET то вы получите более мение внятный исходный код, но тогда у вас встанет под большим вопросом пункты 2 и 3.

Мой вам совет забейте на это, если конечно это не стоит 10 000 000 мертвых пиндоских президентов :-)
  • 0

#4
товарищ Сухов...

товарищ Сухов...
  • Свой человек
  • 755 сообщений
Borg

Получается что программу с расширенными возможностями по сути прийдётся писать с нуля?
  • 0

#5
Zulkar

Zulkar

    Читатель

  • В доску свой
  • 3 243 сообщений
Сухов, вы хотите прикрутить плагины расширения? Я угадал? Если программа не поддерживает плагины, то да, с нуля.
  • 0

#6
товарищ Сухов...

товарищ Сухов...
  • Свой человек
  • 755 сообщений
Да, программа не поддерживает плагины расширения.
Просто есть идея вводить расширения с файла ini который бы взаимодействовал с файлом dll
  • 0

#7
Zulkar

Zulkar

    Читатель

  • В доску свой
  • 3 243 сообщений

Да, программа не поддерживает плагины расширения.
Просто есть идея вводить расширения с файла ini который бы взаимодействовал с файлом dll

Как файл ini будет взаимодействовать с dll? :(

Рекомендую почитать чего нибудь. Что такое функции в любом ЯП и для чего они нужны. Например.
Книжку какую-нибудь по любому языку программирования - delfi, C#, C++, etc. Разберитесь что такое код программы. И как она выполняется. Многие вопросы отпадут сами собой.
  • 0

#8
товарищ Сухов...

товарищ Сухов...
  • Свой человек
  • 755 сообщений
а разве ini не есть отображение функций динамической библиотеки?
  • 0

#9
Borg

Borg
  • Частый гость
  • 93 сообщений
>> Сухов

Зулкар правильно сказал, если программа поддерживает расширение функционала через плагины, то можете написать плагин который будет делать то что вам нужно. В противном случае, только с нуля.
  • 0

#10
Zulkar

Zulkar

    Читатель

  • В доску свой
  • 3 243 сообщений

а разве ini не есть отображение функций динамической библиотеки?

Нет конечно. ini - это файл для хранения конфигов. Deprecated если мне не изменяет память.
  • 0

#11
RAWMIND

RAWMIND
  • Частый гость
  • 53 сообщений
Хмм... Можно внедрить в библиотеку новые функции... Если изловчиться, можно создать новую секцию и в оригинальной функции вставить переход на вновь созданную секцию, а там уже вернуться с необходимыми изменениями. Более подробно - к вирьмейкерам. Но это неслабый геморрой :rotate:
Можно создать свою библиотеку, которая будет иметь оригинальный интерфейс (во всяком случае, нужно полностью повторить оригинальный). Можно, даже, чтобы результат для "неинтересных" функций считала оригинальная библиотека... В реализации гораздо проще.
НО
Боюсь, с вашим багажом знаний, вы не сможете расширить функционал программы.
  • 0

#12
рюмка

рюмка
  • В доску свой
  • 3 995 сообщений

Хмм... Можно внедрить в библиотеку новые функции... Если изловчиться, можно создать новую секцию и в оригинальной функции вставить переход на вновь созданную секцию, а там уже вернуться с необходимыми изменениями. Более подробно - к вирьмейкерам. Но это неслабый геморрой :lol:

может проще разобратся что в функциях библиотеки если их не много и написать новую?
  • 0

#13
RAWMIND

RAWMIND
  • Частый гость
  • 53 сообщений

может проще разобратся что в функциях библиотеки если их не много и написать новую?

Если набор функций в библиотеке действительно тривиален, или просто не сложен, тогда да - проще будет написать новую
  • 0

#14
Sir666

Sir666
  • В доску свой
  • 2 367 сообщений
Помимо всего вышесказанного надо отметить, что нужно знать какии функции/процедуры вызывает из библиотеки выполняемы модуль, и какие соответсвенно парметры он туда передает. Это я к тому что если переписывать библиотеку не зная исходного кода программы (читай описания) тоже занятие не веселое.
  • 0

#15
"0x0000"

"0x0000"
  • Свой человек
  • 543 сообщений

Помимо всего вышесказанного надо отметить, что нужно знать какии функции/процедуры вызывает из библиотеки выполняемы модуль, и какие соответсвенно парметры он туда передает. Это я к тому что если переписывать библиотеку не зная исходного кода программы (читай описания) тоже занятие не веселое.

а посмотреть import в ida или Olly ? :smoke:
  • 0

#16
Zulkar

Zulkar

    Читатель

  • В доску свой
  • 3 243 сообщений
Не самое веселое занятие, если dll была пропущено через что-то вроде aspack. Dependency Viewer не показывает какие параметры принимает функция.
Плюс если например библиотека экпортирует функции не через С stdcall, то нужен еще тот же компилятор, ибо есть такая пренеприятная вешь как name mandling, и то если dll линкуется статически, то не факт что не придется перекомпилировать программу. Адреса функций поменяются - и получаем Segmentation Fault

Но автором темы ясно указано - программа не поддерживает плагины расширения. И от того, что будет написана библиотека, поддерживать она их не будет. Если программа поддерживает плагины - то окрываем документацию и пишем dll.
  • 0

#17
Havoc

Havoc
  • Завсегдатай
  • 296 сообщений
Можно сделать так:
К примеру, дано: dll1

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

Далее нужно осуществить между dll2 и dll1 связь, что в UML называется aggregation, а в случае с dll не знаю как идентифицировать.

Смысл в том, что функции, которые не надо переписывать, дергаем в dll2 напрямую из dll1, если нужно добавить небольшую функциональность - просто дописываем код перед (после) вызовом функции, ну и в самом сложном случае переписываем функцию полностью.

Естественно, для программы нужно dll1 подменить на dll2 и не допустить подгрузки dll1.

ЗЫ Конечно, это может быть невозможно в силу причин описанных другими пользователями, но это точно лучше, чем переписывать вообще всю библиотеку!

Сообщение отредактировал Havoc: 19.09.2008, 17:39:32

  • 0

#18
Zulkar

Zulkar

    Читатель

  • В доску свой
  • 3 243 сообщений

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

Как узнать сигнатуру?

Смысл в том, что функции, которые не надо переписывать, дергаем в dll2 напрямую из dll1, если нужно добавить небольшую функциональность - просто дописываем код перед (после) вызовом функции, ну и в самом сложном случае переписываем функцию полностью.

Они не найдутся из-за пресловутого name mangling. Можно конечно звать по ординалам, но опять таки - если у вас не С stdcall, то нифига не получится, кроме багов. Например VS обычно вызывает методы класса через thiscall, а билдер через __fastcall. Соответственно нужно еще знать параметры вызова функций в dll1. И вызывать их аналогично. В общем, нетривиальная на мой взгляд задача.

Естественно, для программы нужно dll1 подменить на dll2 и не допустить подгрузки dll1.

Поменять имена, здесь все просто.
  • 0

#19
blackhat

blackhat
  • Гость
  • 9 сообщений
2 ТС, не понят что тебе надо, добавить в экспорт ещё функцию или поменять статически данные в бинаре.


DLL - по сути ничем не отличается от exe файла. Это тот же самый PE-файл, только без точки входа

а DllMain что тогда ? а в PE заголовке для кого расписали где исполняемый а где библиотека?

Во вторых, есть декомпиляторы, но для этого надо знать на каком языке написана DLL что бы выбрать нужный декомпилятор. После этого вы получите исходный код, но такой который вы 100% не сможете скомпилировать, потому как при компиляции по коду проходит оптимизатор и в итоге вы получите совершенно другой исходный код.

Во-первых, есть утилиты для того что бы определить версию линкера, во-вторых если потрудится что можно перевести на асм и перекомпилить. в третьх про оптимизатор бред, на сколько я понял ему надо в экспорт ещё функцию добавить..

Сухов, вы хотите прикрутить плагины расширения? Я угадал? Если программа не поддерживает плагины, то да, с нуля.

а если добавить в файл ещё секцию? прописать в экспорт ещё функцию ? ему ведь это надо ?

RAWMIND толкает мысль.
Пишем свою DLL в которой открываем\маппим\настраиваем релоки нужный длл, перехватываем функции и работаем в стандартном режиме как абстракция между программой и старой длл.


Не самое веселое занятие, если dll была пропущено через что-то вроде aspack.

распаковать религия не позволяет? или знания?
  • 0

#20
Zulkar

Zulkar

    Читатель

  • В доску свой
  • 3 243 сообщений
blackhat - поздравляю вас, если вы можете дизассемблировать любую программу, невзирая на защиту. Дизассемблирование работает далеко не всегда, надо снимать дамп, который тоже нельзя просто взять и пропустить через masm. Но куда мне до вас, я уверен, вы все можете, тем более ник у вас соответствующий... :-)

Сообщение отредактировал Zulkar: 22.09.2008, 14:26:52

  • 0


Количество пользователей, читающих эту тему: 1

пользователей: 0, неизвестных прохожих: 1, скрытых пользователей: 0

Размещение рекламы на сайте     Предложения о сотрудничестве     Служба поддержки пользователей

© 2011-2022 vse.kz. При любом использовании материалов Форума ссылка на vse.kz обязательна.