Форум: "WinAPI";
Текущий архив: 2004.12.05;
Скачать: [xml.tar.bz2];
Внизизменить байт Найти похожие ветки
← →
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 вся ветка
Форум: "WinAPI";
Текущий архив: 2004.12.05;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.036 c