Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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.035 c
14-1100252439
avlan
2004-11-12 12:40
2004.12.05
Удалить директорию минуя корзину


1-1100860387
TankMan
2004-11-19 13:33
2004.12.05
Как запускать с параметрами так это легко, а как возвращать...


6-1096052283
ildar_kh
2004-09-24 22:58
2004.12.05
Отладчик РНР


4-1098273354
Александр В.
2004-10-20 15:55
2004.12.05
Програмное закрытие модального окна (диалог)


3-1099503672
MORA
2004-11-03 20:41
2004.12.05
Diagram page





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский