Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.10.2010, 21:52   #1
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
Вопрос Программно редактировать DLL(Необходим совет реализации)

Доброго времени суток!

Нужно помощь в реализации идеи.

Есть dll которую нужно отредактировать.
dll относится к игре. Через неё игра подгружает свои ресурсы, но иногда нужно при помощи плагинов к игре прописывать свои ресурсы в игру, но это создаёт дополнительную нагрузку на сервер игры. Что негативно сказывается на игровом клиенте.


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

dll подгружает все ресуры и даже те которые не задействует(Они просто подгружаются).
Суть в том чтобы все ненужные заменить на нужные с учётом сохранения неизменённого кол-ва символов в пути(тогда DLL остаётся рабочей) к примеру:
Код:
Исходный путь к не нужному ресурсу:
sounds\dtt\game_sound.wav(25 знаков) //это игровой неиспользуемый ресурс

заменить на:
sounds\dtt\mysd\sound.wav(25 знаков) //это его замена
Тогда все работает.

все это можно делать при помощи WinHex путём редактирования бинарного файла. При помощи поиска(ctrl+f) и замены в 3 колонке(Текст).

Но если нужно МНОГО редактировать то процесс нерально ДОЛГИЙ!

Как это реализовать в программе на delphi? Находить в файле и изменять.. притом так чтобы после этого все работало как это делает WinHex?

Последний раз редактировалось Человек_Борща; 14.10.2010 в 21:56.
Человек_Борща вне форума Ответить с цитированием
Старый 14.10.2010, 23:05   #2
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Опять двадцать пять Вперед на мою страничку, качаем исходник патчера, там как раз патчер файла и/или памяти процесса. Можете даже, сразу скомпилить (иди даже скачать билд, уже не помню, давно было), и потом просто вставить в редактор патч, формат патча таков:
Код:
replace:[old hex value to search]:[new hex value to replace the old one]
example:
Код:
replace:abc:cba
Что в итоге? В местах где будет найдена последовательность hex "abc", будет произведена перезапись байт на hex "cba".
BOBAH13 вне форума Ответить с цитированием
Старый 14.10.2010, 23:25   #3
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Еслибы было все так просто.
Имеется ввиду написать целый редактор этой dll не для одного себя любимого.

Необходимо найти в тексте dll нужный текст
Код:
Исходный путь к не нужному ресурсу:
sounds\dtt\game_sound.wav(25 знаков) //это игровой неиспользуемый ресурс

заменить на:
sounds\dtt\mysd\sound.wav(25 знаков) //это его замена
и в соответствии с исзменением текста обновить и HEX данные, собствено так делается в WinHex руками.

Как это делать программно?
Человек_Борща вне форума Ответить с цитированием
Старый 15.10.2010, 00:04   #4
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Цитата:
Сообщение от Человек_Борща Посмотреть сообщение
Еслибы было все так просто.
Имеется ввиду написать целый редактор этой dll не для одного себя любимого.

Необходимо найти в тексте dll нужный текст
Код:
Исходный путь к не нужному ресурсу:
sounds\dtt\game_sound.wav(25 знаков) //это игровой неиспользуемый ресурс

заменить на:
sounds\dtt\mysd\sound.wav(25 знаков) //это его замена
и в соответствии с исзменением текста обновить и HEX данные, собствено так делается в WinHex руками.

Как это делать программно?
Еще раз, внимательно читаем мой пост, я по сути вам даю уже готовое ПО + коды исходные. Теперь вам стоит запустить патчер и вписать туда свой патч, например

1. hexA = sounds\dtt\game_sound.wav (ну только перевести строку в hex)
2. hexB = sounds\dtt\mysd\sound.wav (аналогично)
3. вписываем следующее: "replace:hexA:hexB"
4. Жмем патчить файл, выбираем нужную .dll
5. Ура! Все готово, пользуемся.
6. Как распространить? Сохраняем данный патч в файл через Save As, далее ссылаемся на данный патч в сети и на данное ПО, все могут ставить патч.

Другой путь:
1. Скачать исходные коды
2. Разобраться как проходит процесс патчинга файла
3. Реализовать аналог в своей софтине

p.s. если опять спросите, и покажите тот же самый пример чего хотите, тогда вам лень выходит и хотите что бы за вас все сделали, так не бывает
BOBAH13 вне форума Ответить с цитированием
Старый 15.10.2010, 00:38   #5
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Собственно мне не лень, теперь я понял меня просто очень интересовал вопрос связанный с StrToHex теперь с вашим ответом и этой функции(Де-то на задворках моей папки proojects она есть, я знаю),

Теперь StrToHex+ адрес A заменить на адрес B = то что мне надо! СПАСИБО. Плюсик в репу!


Остался вопрос как искать в тексте dll? как к примеру найти теже:
Цитата:
sounds\dtt\game_sound.wav
?
Открыть и использовать поиск в файле? Врятле это сработает с бинарным файлом.

Если я вас правельно понял , то это именно то о чем в говорите:
http://nemecsx.narod.ru/MemPatcher.zip ?

Последний раз редактировалось Человек_Борща; 15.10.2010 в 00:46.
Человек_Борща вне форума Ответить с цитированием
Старый 15.10.2010, 10:04   #6
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

1. http://nemecsx.narod.ru/MemPatcher.zip
2. Открываем вашу .dll в WinHex
3. Создаем файл новый размером пусть в 200 байт
4. Вставляем туда текст
5. Выделяем текст (уже в левой панели) и Copy As Hex
6. Вставляем последовательность hex в патч

Что сложного?
BOBAH13 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Необходим совет по курсовой, декарт) MadReason Помощь студентам 3 25.05.2010 11:20
С++Builder - построение графиков - необходим совет _Денис Помощь студентам 0 13.11.2009 15:15
(php)(IMAP)делаю скрипт для работы с почтой, необходим совет Филлип PHP 1 18.09.2009 23:14
Программно выгрузить DLL из памяти Air Помощь студентам 7 01.05.2008 00:06
Можно программно создать dll из текстового файла? hamann-2006 Помощь студентам 2 29.10.2007 10:41