Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

изменить байт [D7, Win2k]


Dot ©   (2004-10-22 21:34:00) 

Мастера! Подскажите как изменить в exe-файле один или группу байт, наиболее минимальным методом. т.е. чтобы программа помньше занимала


XProger   (2004-10-23 17:00:00) [1]

Almaz, да, ступил... %)


Almaz   (2004-10-23 16:01:00) [2]


> итак мой кряк должен (НЕ В ПАМЯТИ)
> заменить байт 74DE по адресу :004412ff на 75DE

Байт$ 74DEэто сильно :)

> XProger ©   (23.10.04 04:30) [12]

Помилуйте батенька, а зачем загружать весь файл в память, чтобы заменить один байт ??? Может так:

var
 F: File;
 B: Byte;
begin
 AssignFile(F, 'filename.exe');
 Reset(F, 1);
 Seek(F, Offset);
 B := 75;
 BlockWrite(F, B, 1);
 CloseFile(F);
end;


Но тут я бы посоветовал вам, Dot, обратить внимание на то, что сказал SammIk о том, адрес в памяти это не смещение от начала файла - это смещение вам предстоит вычислить, вычтя из адреса базовый адрес образа EXE. Обычно это $00400000, но можете уточнить для конкретного ЕХЕ. Т.е. производя несложные вычисления, получаем Offset = $004412ff - $00400000 = $000412ff.

Удачи.


XProger   (2004-10-23 04:30:00) [3]

Удаляешь все Unit'ы.
Project -> View Source
И пишешь это...

program Crack;

type
PByteArray = ^TByteArray;
TByteArray = array[0..1] of Byte;

var
F    : File of Byte;
buf  : PByteArray;
size : integer;
i    : integer;
begin
AssignFile(F, 'jertva.exe');
Reset(F);
size := FileSize(F);
GetMem(buf, size);
BlockRead(F, buf[0], size);
Rewrite(F);

i := $004412FF; buf[i] := $75;
i := $00441300; buf[i] := $DE;

BlockWrite(F, buf[0], size);
FreeMem(buf);
CloseFile(F);
end.


Программа весит 14,5 кб :)

P.S.
Работу программы не проверял... ;)


Маг Похмеляйнен   (2004-10-23 00:57:00) [4]

А... Так это кряк :(
Разочарование...


SammIk   (2004-10-22 22:39:00) [5]

Лучше на EB меняй.
Я тебе написал логику, а делать тебе.
Ведь адрес 004412ff из дебагера? Тогда это RVA
А это так, то все. Если только кто-то тебе даст исходник, что
мало вероятно.
Вообщем читаи про ПЕ


Dot   (2004-10-22 22:33:00) [6]

понятно в чем дело =) я уже в начале написал точно. Поменьше не та программа должна быть в которой байт заменять =) а которую написать для этого надо.
теперь вот четко что я хочу.
Прямым словом хочу написать кряк.

итак мой кряк должен (НЕ В ПАМЯТИ)
заменить байт 74DE по адресу :004412ff на 75DE
вот так вот.
то есть мне надо открыть ехе-файл и пройти по адресу, а затем зписать туда байт 75 вместо 74.


SammIk   (2004-10-22 22:29:00) [7]

А с исходника не обезишь?
Это адрес в памяти?
Если да то так:
Ищешь документацию по PE фаилам(в потрепатся)
Ищешь секцию где этот баит лежит, если переменные, то в секчии с данными(читай про PE)
Если в коде, то секция исполняемая
Перещитываешь RVA на fileoffset и меняешь в бинарике байт.
А насчет не подходит, надо вопросы точнее задовать
чтобы программа помньше занимала
Отвечал по этой фразе, а вот если ты баит поменяешь, то программа меньше станет. Если да, то на сколько?


Dot   (2004-10-22 22:18:00) [8]

кто тут у нас тормоз. Если я спросил значит то не подошло это раз.
второе УПХ на Си написан вообще то. а тут Мастера Дельфи вроде сидят как я понял.
3) Кинь исходник как байт 12 по адресу 12345 в проге заменить на байт 21 и все что мне надо.


SammIk   (2004-10-22 22:13:00) [9]

Ты тормоз или как?
Никак, а как?
Говорят же с исходниками, или пиши оптимизатор(интерпритатор команд в основном)(А).
И с помощью его оптими, тока делфовый компилятор уже это сделал за тебя, и остается только сжатие. А если так то сорци UPX тебе в руки. И побольше уважения к ближним.


Dot   (2004-10-22 22:08:00) [10]

2SammIk слушай не знаешь не флуди. мне не нужна программа я спросил как сделать!


SammIk   (2004-10-22 21:56:00) [11]

Таких программ уйма, например UPX причем с исходниками.
Исчи, да обрясчешь. Хз, что значит, но круто!!!


SammIk   (2004-10-22 21:53:00) [12]

Прикинь есть такая тема,
Есть
var
v1,v2,v3,v4.byte1:byte;
+++++++++++++++++++++++
byte1:=v1+v2+v3+v4;
++++++++++++++++++++++++

В итоге мы получае всего 1 БАИТ!!!!!
Круто, скажешь ты? Нет, отвечу я!


Dot   (2004-10-22 21:53:00) [13]

Сделать программу А которая изменяет байт в программе Б . и желательно таким способом написать программу А чтобы она меньше занимала


Маг Похмеляйнен   (2004-10-22 21:37:00) [14]

Не вижу связи между "изменить" и "меньше занимала" :)
Поясните, pls.


Наверх

Титульная страница Поиск, карта сайта Написать письмо