dllпросмотр и редактирование
#1
Отправлено 19.08.2008, 16:25:59
Есть прога в которой операции выполняются посредством файлов dll. Открывать такие файлы я научился, но мне там мало что понятно. Я хочу дополнить файл dll для повышения обрабатываемых потоков в программе. Другими словами просто хочу закинуть в dll новые данные, чтобы прога видела и различала их в потоке информации.
Могу ли я конвертировать dll в текст и обратно?
#2
Отправлено 19.08.2008, 16:43:23
А вы их в блокноте что ли открываете?Есть прога в которой операции выполняются посредством файлов dll. Открывать такие файлы я научился, но мне там мало что понятно.
Что значит "Я хочу дополнить файл dll", да еще для повышения обрабатываемых потоков? Да, кстати, я понять могу поток у вас - это stream или thread?Я хочу дополнить файл dll для повышения обрабатываемых потоков в программе. Другими словами просто хочу закинуть в dll новые данные, чтобы прога видела и различала их в потоке информации.
Опять таки, что это значит? Вы хотите узнать как засунуть текст в ресурсы dll или что?Могу ли я конвертировать dll в текст и обратно?
DLL - по сути ничем не отличается от exe файла. Это тот же самый PE-файл, только без точки входа. Вот и вся разница между exe и dll. Так что попробуйте заменить в вашем тексте dll на exe и представить, что вы хотите.
#3
Отправлено 19.08.2008, 18:42:14
Во-первых, не текст а исходный код! Во вторых, есть декомпиляторы, но для этого надо знать на каком языке написана DLL что бы выбрать нужный декомпилятор. После этого вы получите исходный код, но такой который вы 100% не сможете скомпилировать, потому как при компиляции по коду проходит оптимизатор и в итоге вы получите совершенно другой исходный код. И в третьих даже если вы и выдерете код и он будто бы должен компилироваться вам нужны сама среда разработки для компиляции и все используемые библиотеки в этой ДЛЛ.
Есть ещё вариант если ДЛЛ написан на .NET то вы получите более мение внятный исходный код, но тогда у вас встанет под большим вопросом пункты 2 и 3.
Мой вам совет забейте на это, если конечно это не стоит 10 000 000 мертвых пиндоских президентов
#7
Отправлено 20.08.2008, 13:04:28
Как файл ini будет взаимодействовать с dll?Да, программа не поддерживает плагины расширения.
Просто есть идея вводить расширения с файла ini который бы взаимодействовал с файлом dll
Рекомендую почитать чего нибудь. Что такое функции в любом ЯП и для чего они нужны. Например.
Книжку какую-нибудь по любому языку программирования - delfi, C#, C++, etc. Разберитесь что такое код программы. И как она выполняется. Многие вопросы отпадут сами собой.
#11
Отправлено 21.08.2008, 23:50:32
Можно создать свою библиотеку, которая будет иметь оригинальный интерфейс (во всяком случае, нужно полностью повторить оригинальный). Можно, даже, чтобы результат для "неинтересных" функций считала оригинальная библиотека... В реализации гораздо проще.
НО
Боюсь, с вашим багажом знаний, вы не сможете расширить функционал программы.
#12
Отправлено 29.08.2008, 17:47:05
может проще разобратся что в функциях библиотеки если их не много и написать новую?Хмм... Можно внедрить в библиотеку новые функции... Если изловчиться, можно создать новую секцию и в оригинальной функции вставить переход на вновь созданную секцию, а там уже вернуться с необходимыми изменениями. Более подробно - к вирьмейкерам. Но это неслабый геморрой
#14
Отправлено 19.09.2008, 13:48:30
#15
Отправлено 19.09.2008, 13:52:19
а посмотреть import в ida или Olly ?Помимо всего вышесказанного надо отметить, что нужно знать какии функции/процедуры вызывает из библиотеки выполняемы модуль, и какие соответсвенно парметры он туда передает. Это я к тому что если переписывать библиотеку не зная исходного кода программы (читай описания) тоже занятие не веселое.
#16
Отправлено 19.09.2008, 15:24:00
Плюс если например библиотека экпортирует функции не через С stdcall, то нужен еще тот же компилятор, ибо есть такая пренеприятная вешь как name mandling, и то если dll линкуется статически, то не факт что не придется перекомпилировать программу. Адреса функций поменяются - и получаем Segmentation Fault
Но автором темы ясно указано - программа не поддерживает плагины расширения. И от того, что будет написана библиотека, поддерживать она их не будет. Если программа поддерживает плагины - то окрываем документацию и пишем dll.
#17
Отправлено 19.09.2008, 17:30:58
К примеру, дано: dll1
Пишем dll2, которая имеет сигнатуру экспортируемых функций аналогичную dll1, которая в свою очередь ипользует dll1.
Далее нужно осуществить между dll2 и dll1 связь, что в UML называется aggregation, а в случае с dll не знаю как идентифицировать.
Смысл в том, что функции, которые не надо переписывать, дергаем в dll2 напрямую из dll1, если нужно добавить небольшую функциональность - просто дописываем код перед (после) вызовом функции, ну и в самом сложном случае переписываем функцию полностью.
Естественно, для программы нужно dll1 подменить на dll2 и не допустить подгрузки dll1.
ЗЫ Конечно, это может быть невозможно в силу причин описанных другими пользователями, но это точно лучше, чем переписывать вообще всю библиотеку!
Сообщение отредактировал Havoc: 19.09.2008, 17:39:32
#18
Отправлено 19.09.2008, 18:14:14
Как узнать сигнатуру?Пишем dll2, которая имеет сигнатуру экспортируемых функций аналогичную dll1, которая в свою очередь ипользует dll1.
Они не найдутся из-за пресловутого name mangling. Можно конечно звать по ординалам, но опять таки - если у вас не С stdcall, то нифига не получится, кроме багов. Например VS обычно вызывает методы класса через thiscall, а билдер через __fastcall. Соответственно нужно еще знать параметры вызова функций в dll1. И вызывать их аналогично. В общем, нетривиальная на мой взгляд задача.Смысл в том, что функции, которые не надо переписывать, дергаем в dll2 напрямую из dll1, если нужно добавить небольшую функциональность - просто дописываем код перед (после) вызовом функции, ну и в самом сложном случае переписываем функцию полностью.
Поменять имена, здесь все просто.Естественно, для программы нужно dll1 подменить на dll2 и не допустить подгрузки dll1.
#19
Отправлено 22.09.2008, 14:10:42
а DllMain что тогда ? а в PE заголовке для кого расписали где исполняемый а где библиотека?DLL - по сути ничем не отличается от exe файла. Это тот же самый PE-файл, только без точки входа
Во-первых, есть утилиты для того что бы определить версию линкера, во-вторых если потрудится что можно перевести на асм и перекомпилить. в третьх про оптимизатор бред, на сколько я понял ему надо в экспорт ещё функцию добавить..Во вторых, есть декомпиляторы, но для этого надо знать на каком языке написана DLL что бы выбрать нужный декомпилятор. После этого вы получите исходный код, но такой который вы 100% не сможете скомпилировать, потому как при компиляции по коду проходит оптимизатор и в итоге вы получите совершенно другой исходный код.
а если добавить в файл ещё секцию? прописать в экспорт ещё функцию ? ему ведь это надо ?Сухов, вы хотите прикрутить плагины расширения? Я угадал? Если программа не поддерживает плагины, то да, с нуля.
RAWMIND толкает мысль.
Пишем свою DLL в которой открываем\маппим\настраиваем релоки нужный длл, перехватываем функции и работаем в стандартном режиме как абстракция между программой и старой длл.
распаковать религия не позволяет? или знания?Не самое веселое занятие, если dll была пропущено через что-то вроде aspack.
#20
Отправлено 22.09.2008, 14:24:53
Сообщение отредактировал Zulkar: 22.09.2008, 14:26:52
Количество пользователей, читающих эту тему: 1
пользователей: 0, неизвестных прохожих: 1, скрытых пользователей: 0