Сейчас на форуме: vsv1, _MBK_ (+4 невидимых)

 eXeL@B —› Вопросы новичков —› Как создать патч?
Посл.ответ Сообщение

Ранг: 8.3 (гость)
Активность: 0.010
Статус: Участник

Создано: 30 августа 2007 15:37
· Личное сообщение · #1

Необходимо изменить код и занести изменения в исполняемый файл. Нашел информацию про структуру PE-файла, но не знаю как это все практически реализовать. Задача заключается в следующем: необходимо открыть выполняемый фал, занести туда изменения(правка RVA -ссылок), сохранить изменения. Если у кого есть исходникии на Delphi, было бы вообще замечательно. Помогите, пожалуйста, буду очень признателен!



Ранг: 301.4 (мудрец), 194thx
Активность: 0.170.01
Статус: Участник

Создано: 30 августа 2007 16:02
· Личное сообщение · #2

Если просто патч то не нужно знать структуру РЕ просто открой файл как текстовичек подправь и сохрани



Ранг: 284.8 (наставник), 6thx
Активность: 0.150
Статус: Участник

Создано: 30 августа 2007 16:16
· Личное сообщение · #3

woodyfon
А ты именно сам хош его скомпилить?

ИМХО для стандартных патчей лучше юзать стандартные решения, т.е. пользоваться уже готовыми патчерами.

Например DUP - diablo2oo2.di.funpic.de/dup.htm



Ранг: 1.2 (гость)
Активность: 0=0
Статус: Участник

Создано: 30 августа 2007 16:57
· Личное сообщение · #4

На дельфи ничего предложить не могу, но я недавно писал простенький патч на с++. Он писался с целью, что бы вспомнить азы этого языка, т.к. я на нем не программил уже года эдак четыре. Поэтому он может содержать не самые оптимальные решения. Но он работает и точно ясно, что именно он делает.
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <sys\stat.h>
#include <io.h>
#include <string.h>
int main()
{
printf("Crack for some program...\n");
int handle;
char data = 0xB0; //тут хранится первый байт, что будем вводить.
if ((handle = open("some_program.exe", O_WRONLY | O_BINARY))== -1){ //подаем имя экзешника, т.к. оно нам заведомо известно(патч ведь к конкретной проге)
printf("Can't find the some_program.exe\n");
printf("Please check the directory\n");
return 1;
} else{
lseek(handle, 0xE0E7, SEEK_SET);//тут актуален второй параметр, он указывает куда будем вводить байты
write(handle, &data, sizeof(char));//вводим первый байт
data = 0x01;//второй байт
write(handle, &data, sizeof(char));//вводим
close(handle);
printf("Crack succesfully applied\n");
printf("Press ENTER to exit...\n");
scanf ("%c",&data);
}
return 0;
}



Конечно параметры меняем на свое усмотрение, если нужно изменить больше байтов, то лишь повторяем соответсвующие шаги. Из недостатков - консольный интерфейс



Ранг: 158.7 (ветеран)
Активность: 0.110
Статус: Участник

Создано: 30 августа 2007 21:01
· Личное сообщение · #5

[u][/u]woodyfon пишет:
сли у кого есть исходникии на Delphi, было бы вообще замечательно

Вот тут http://team-x.ru/guru-exe/path=Sources%2FCracks%2FDelphi/ есть.

-----
Я ещё не волшебник, я только учусь...




Ранг: 6.4 (гость)
Активность: 0=0
Статус: Участник

Создано: 31 августа 2007 15:47
· Личное сообщение · #6

simple example:
var
F : file of byte;
Address : integer;
Before, After : char;
begin
AssignFile(F, FileName);
Reset(F);
Seek(F, Address);//f.e. Address=$400000
BlockRead(F, Before, 1);
Seek(F, Address);
After:=char(Byt);//f.e. Byt=$90 (nop)
BlockWrite(F, After, 1);
CloseFile(F);
end;



Ранг: 51.7 (постоянный)
Активность: 0.020
Статус: Участник

Создано: 08 сентября 2007 11:15
· Личное сообщение · #7

sai_NT пишет:
Seek(F, Address);//f.e. Address=$400000

Ничего себе адресок в файле! Не нужно путать адреса в файле и адреса в памяти!
woodyfon Если не знаешь файловое смешение и сам затрудняешься его вычислить, то воспользуйся готовыми решениями, например в PE tools есть FLC (File Location Calculator), где VA или RVA и получаешь offset в файле.


 eXeL@B —› Вопросы новичков —› Как создать патч?
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати