|
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
|
|
|
|