» TeamX (Архив Форума)«


Форум TeamX » За кружкой ротгута » Пример патчилки

Переход по темам
<< Пред. След. >>
Единственная страница этой темы

 
Jordan 63
Пользователь

Откуда: Россия, Самара
Регистрация: Июль 2007

Всего: 228 сообщений

Я для мода хочу сделать патчилку которая патчит fallout2.exe бип бой в начале поменять стартовую карту и вот у меня вопрос. Кто нибудь может выложить или показать как сделать патчилку на примере одного офсета а я потом по этому примеру доделаю патчилку. У меня есть visual c++ 6.0  visual basic 6.0
masm 9.0

Отправлено: 18:50 - 17 Янв., 2008
Anchorite
Пользователь

Откуда: Не здесь
Регистрация: Янв. 2003

Всего: 283 сообщения

Для начала определись, какого рода патчилка тебе нужна - чтобы загружала оригинальный файл и правила его в мозгах компьютера (это будет загрузчик) или однократно вносила изменения в EXE-файл (чистый патчер).

Отправлено: 19:35 - 17 Янв., 2008
Jordan 63
Пользователь

Откуда: Россия, Самара
Регистрация: Июль 2007

Всего: 228 сообщений

Anchorite


Цитата:
Для начала определись, какого рода патчилка тебе нужна - чтобы загружала оригинальный файл и правила его в мозгах компьютера (это будет загрузчик)


Загрузчик!

Отправлено: 19:39 - 17 Янв., 2008
Tehnokrat
Модератор

Откуда: Новосибирск
Регистрация: Окт. 2003

Всего: 489 сообщений

А для Делфи не желаешь?

-----
Прошлое можно узнать, но нельзя изменить. Будущее можно изменить, но нельзя узнать.

Отправлено: 23:18 - 17 Янв., 2008
Jordan 63
Пользователь

Откуда: Россия, Самара
Регистрация: Июль 2007

Всего: 228 сообщений

Tehnokrat

Цитата:
А для Делфи не желаешь?


Тоже можно.

Отправлено: 23:21 - 17 Янв., 2008
Anchorite
Пользователь

Откуда: Не здесь
Регистрация: Янв. 2003

Всего: 283 сообщения

Найди книгу Джефри Рихтера "Windows - для профессионалов". Там найдеш кучу нужной тебе инфы по этому вопросу.

Отправлено: 9:19 - 18 Янв., 2008
Jordan 63
Пользователь

Откуда: Россия, Самара
Регистрация: Июль 2007

Всего: 228 сообщений

Anchorite

Нашел вот это

Название: Windows для профессионалов. Создание эффективных Win32-пpилoжeний с учетом специфики 64-разрядной версии Windows.
Автор: Джеффри Рихтер
Издательство: Питер, Русская Редакция
ISBN: 5-272-00384-5, 1-57231-996-8
Год: 2001
Страниц: 752
Язык: Русский

Эта книга?

Не надо здесь писать про скачивание пиратских копий. Это запрещено правилами.
WG

Отправлено: 10:16 - 18 Янв., 2008
Jordan 63
Пользователь

Откуда: Россия, Самара
Регистрация: Июль 2007

Всего: 228 сообщений

Читаю я книжку и ужасаюсь для меня программирование как египетские иероглифы ну не понимаю я как сделать загрузчик ну не программер я. Может все таки примерчик.

Отправлено: 12:56 - 18 Янв., 2008
Anchorite
Пользователь

Откуда: Не здесь
Регистрация: Янв. 2003

Всего: 283 сообщения

Найди примеры использования функции WriteProcessMemory.

Отправлено: 14:02 - 18 Янв., 2008
Ray
Модератор

Откуда: Донецк,Украина
Регистрация: Янв. 2004

Всего: 746 сообщений

Anchorite

Ты садист
У меня эта книга стоит в бумажном вариант - посмотрел... вряд ли неподготовленному человеку эта книга поможет, хотя сама по себе великолепная вещь.

Кроме WriteProcessMemory понадобится ещё и CreateProcess

P.S. Сегодня сдал очередной экзамен, пока есть время до вечера - напишу тебе патчилку как и обещал Извини, на смещения времени не остаётся...

-----
Не бывает невозможных задач – бывает мало времени.

Отправлено: 14:46 - 18 Янв., 2008 | ИСПРАВЛЕНО: Ray - 13:57 - 18 Янв., 2008
Jordan 63
Пользователь

Откуда: Россия, Самара
Регистрация: Июль 2007

Всего: 228 сообщений

Ray

Цитата:
P.S. Сегодня сдал очередной экзамен, пока есть время до вечера - напишу тебе патчилку как и обещал  Извини, на смещения времени не остаётся...


Мне нужен пример загрузчика именно загрузчика с измененным одним офсетом а по этому примеру я доделаю загрузчик (офсеты которые мне нужно изменить я знаю)

Anchorite

Это я не нашел WriteProcessMemory но нашел это CreateProcess но что с ними делать я так и не понял.

Отправлено: 15:07 - 18 Янв., 2008
Ray
Модератор

Откуда: Донецк,Украина
Регистрация: Янв. 2004

Всего: 746 сообщений

WriteProcessMemory - ст. 552

-----
Не бывает невозможных задач – бывает мало времени.

Отправлено: 17:22 - 18 Янв., 2008
Tehnokrat
Модератор

Откуда: Новосибирск
Регистрация: Окт. 2003

Всего: 489 сообщений

Есть такая замечательная прога - Sing of Misery, предназначенная как-раз для создания разных патчилок. Скриптовый язык, визуальное программирование. Даже неспециалист в кодинге за полчаса освоит. А если кому её возможностей окажется мало, есть ещё более мощная прога от тех же производителей - Neo Sing of Misery. Экзешники, которые генерируют эти проги имеют весьма смешной размер. В общем рекомендую.

-----
Прошлое можно узнать, но нельзя изменить. Будущее можно изменить, но нельзя узнать.

Отправлено: 23:27 - 18 Янв., 2008
Anchorite
Пользователь

Откуда: Не здесь
Регистрация: Янв. 2003

Всего: 283 сообщения

Ray, если человек ОДИН раз поймет что ему нужно сделать САМ, это будет гораздо лучше пытаться разжевать ему то, что он должен сделать.

Jordan, я попытаюсь объяснить то что тебе нужно сделать.

1. С помощью CreateProcess загрузи, но не запускай fallout2.exe (вроде есть флаг CREATE_SUSPENDED)
2. При помощи WriteProcessMemory и имеющихся у тебя патчей Двига сделай нужные тебе изменения.
3. Запусти пропатченный fallout2.exe (Как это сделать - не помню. Копни документацию).

Отправлено: 23:29 - 18 Янв., 2008
Ray
Модератор

Откуда: Донецк,Украина
Регистрация: Янв. 2004

Всего: 746 сообщений

Anchorite
Для не программиста советовать Рихтера несколько неосмотрительно. Не зря на книжке написано
Уровень пользователя: опытный/эксперт

Jordan 63

Я делал так: создавал новый процесс. Затем создавал новый поток, а также загружал из kernel32.dll функцию переключения потока (SwitchToThread) - чтобы приложение не тормозило. А в новом потоке уже делал обработку. Но тогда мне требовалось, чтобы работа с памятью шла паралельно с игрой и приходилось играться с потоками. Здесь можно проще.

В архиве пример (для VS6 и для VS2005 - по сути одно и то-же, но мало ли...) Я поубирал всё лишнее, оставил только то, что надо тебе. Не исключено что что-то мог забыть, но то что есть вроде работает нормально. Я проверял. Есть вопросы - задавай.

P.S. просто помести в папку с игрой (fallout2.exe) файл main.exe и запусти его.

Архив

Добавлено:

Перед ф-ей WriteProcessMemory слегка ошибся с комментарием - конечно же не по адрессу movei, а по pAddress.

-----
Не бывает невозможных задач – бывает мало времени.

Отправлено: 1:22 - 19 Янв., 2008 | ИСПРАВЛЕНО: Ray - 0:29 - 19 Янв., 2008
Jordan 63
Пользователь

Откуда: Россия, Самара
Регистрация: Июль 2007

Всего: 228 сообщений

Ray

Спасибо!

Я скачал архивчик распаковал но загрузить проект не смог писал что файл поврежден или что то в этом духе я сделал так сначала создал проект Win32 Application а потом в папку Source Files вставил main.cpp пробывал скомпилить но выдал что 2 ошибки посмотрев лог компиляции и ничего не поняв я пошел дальше экспериментировать я все сделал также но теперь создал Win32 Console Application все скомпилилось пробывал загружать в директории фола все меняет загружает нормально. Я как понял он меняет надпись 2008out. Но я не как не понял какие офсеты куда сувать покажи куда нужно сунуть вот этот офсет
000B0AD8:
что заменять 75
чем заменять EB

где прописывть офсет 000B0AD8
и где задать что бы он изменял 75 на  EB

P.S На что экамен сдал на 5?

Отправлено: 2:24 - 19 Янв., 2008 | ИСПРАВЛЕНО: Jordan 63 - 4:12 - 19 Янв., 2008
Freeman
Пользователь

Регистрация: Февр. 2007

Всего: 24 сообщения

Jordan 63

Цитата:
Но я не как не понял какие офсеты куда сувать покажи куда нужно сунуть вот этот офсет

Для начала тебе надо узнать какой адрес в оперативке соответствует смещению в экзешнике. Если брать из темы «Offsets или полезные смещения» то там это записано как «Memory Offset», но там их записано очень мало. Если нужно больше то спрашивай, я скажу как переводить.
Си я не знаю, так что с исходниками помочь не могу.

Ray

А разве не было бы более правильно в создании указывать флаг CREATE_SUSPENDED, а после пропатчивания вызывать ResumeThread. А то, как я понимаю, у тебя оно патчится прямо во время выполнения.

Отправлено: 9:45 - 19 Янв., 2008
Jordan 63
Пользователь

Откуда: Россия, Самара
Регистрация: Июль 2007

Всего: 228 сообщений

Что то я совсем запутался с этип загрузчиком. В принципе он не горит его можно сделать позже.

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

 //ПИП-бой в начале
 buf[0x87411]=0xEB;
 buf[0x8FDAF]=0x90;
 buf[0x8FDB0]=0x90;
 //Нет снов
 buf[0x93B0F]=0xE9;
 buf[0x93B10]=0x95;
 buf[0x93B11]=0x00;
 buf[0x93B14]=0x90;
 buf[0x93BB7]=0xEB;
 //Убрать ограничение на количество локаций
 buf[0xAF7BB]=0xEB;
 //Встреча с Френки происходит не на 35й день, а сразу
 buf[0xB0AEA]=0x00;
 //Стартовое положение на карте мира по Х
 //(в точках относительно левого верхнего угла карты)
 buf[0x000AD008]=0x000000AD;
 //Стартовое положение на карте мира по Y
 //(в точках относительно левого верхнего угла карты)
 buf[0x000AD00D]=0x0000007A;

Может тогда патчилку сделать.

Freeman

Как перевести

000B0AD8:
что заменять 75
чем заменять EB

Вот этот офсет как перевести в memory или какой прогой?

Отправлено: 13:15 - 19 Янв., 2008
Freeman
Пользователь

Регистрация: Февр. 2007

Всего: 24 сообщения

Цитата:
Как перевести

Самый простой способ который я знаю, это программой «PE Tools». Вроде я скачивал
оттуда. Как пользоваться:
1. Запускаешь прогу.
2. Открываешь fallout2.exe, для этого жмешь Alt+1 или щелкаешь на иконку с карандашом(вторая вверху слева).
3. Появляется окно. В нем жмешь кнопку «FLC».
4. Появляется окно. В нем в поле «File Offset» вводишь нужное смещение в файле.
5.Жмешь кнопку «Calculate». В поле «Virtual Address» появляется адрес в оперативной памяти.
Например: 000B0AD8 -> 004C06D8

Теперь что в исходнике заменить.
int pAddress =0x4C06D8;
char movei=0xEB; //тут могу обманывать я не знаю типы чисел в Си.
WriteProcessMemory(hNewProcess, (void*)pAddress, &movei, 1, NULL);

Отправлено: 15:48 - 19 Янв., 2008
 

Переход по темам
<< Пред. След. >>
Единственная страница этой темы


Powered by Ikonboard 2.1.9 RUS
Modified by RU.Board Team
© 2000 Ikonboard.com