Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.12.05;
Скачать: CL | DM;

Вниз

изменить байт   Найти похожие ветки 

 
Dot   (2004-10-22 21:34) [0]

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


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

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


 
SammIk ©   (2004-10-22 21:53) [2]

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

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


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

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


 
SammIk ©   (2004-10-22 21:56) [4]

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


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

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


 
SammIk ©   (2004-10-22 22:13) [6]

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


 
Dot   (2004-10-22 22:18) [7]

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


 
SammIk ©   (2004-10-22 22:29) [8]

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


 
Dot   (2004-10-22 22:33) [9]

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

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


 
SammIk ©   (2004-10-22 22:39) [10]

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


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

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


 
XProger ©   (2004-10-23 04:30) [12]

Удаляешь все 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.
Работу программы не проверял... ;)


 
Almaz ©   (2004-10-23 16:01) [13]


> итак мой кряк должен (НЕ В ПАМЯТИ)
> заменить байт 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 17:00) [14]

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



Страницы: 1 вся ветка

Текущий архив: 2004.12.05;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.046 c
9-1088730453
Xerx
2004-07-02 05:07
2004.12.05
Источники света


1-1100950490
Arnold
2004-11-20 14:34
2004.12.05
Ошибка при преобразовании числа


3-1099568858
av_mark
2004-11-04 14:47
2004.12.05
Отрисовка DBGrid


6-1096376062
Yerick
2004-09-28 16:54
2004.12.05
ЛВС


9-1085760603
karlsn
2004-05-28 20:10
2004.12.05
Игра типа "экономика"