Форум программистов, компьютерный форум, киберфорум
PascalABC.NET
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.52/50: Рейтинг темы: голосов - 50, средняя оценка - 4.52
9 / 9 / 16
Регистрация: 07.03.2014
Сообщений: 202
1

Как можно изменить код программы, если имеем только exe файл?

25.03.2014, 10:10. Просмотров 9842. Ответов 21
Метки нет (Все метки)

Вот, допустим, имеем exe файл с таким кодом
Pascal
1
2
3
4
5
6
7
begin
var a,b,c:integer;
a:=200;
b:=300;
c:=a+b;
writeln(c);
end.
Как можно без сторонних программ изменить, допустим, значение переменной a?Еще раз говорю имеем только exe файл!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.03.2014, 10:10
Ответы с готовыми решениями:

Как конвертивровать apk файл если имеется exe, jar и исходный код программы?
Как конвертивровать apk файл если имеется exe, jar и исходный код программы?

Можно ли вернуть исходный код программы, если exe имеет отладочную информацию
Можно ли вернуть исходный код программы, если программа Debug и имеет отладочную информацию и была...

Можно посмотреть код программы exe файла, если знаешь что он написана на языке C#?
Можно посмотреть код программы exe файла, если знаешь что он написана на языке си шарп? И есть...

Как можно поворачивать объект если не имеем градусной меры?
Как можно поворачивать объект если не имеем градусной меры? На форме объекты имеют x,y координаты,...

21
Модератор
60145 / 45298 / 31259
Регистрация: 18.05.2008
Сообщений: 108,784
25.03.2014, 10:24 2
Лучший ответ Сообщение было отмечено Nikakula как решение

Решение

Цитата Сообщение от Nikakula Посмотреть сообщение
Как можно без сторонних программ изменить
Да никак.
0
9 / 9 / 16
Регистрация: 07.03.2014
Сообщений: 202
25.03.2014, 10:27  [ТС] 3
Понятно, спасибо
0
Программист
305 / 180 / 176
Регистрация: 05.12.2013
Сообщений: 683
Записей в блоге: 5
25.03.2014, 12:42 4
Цитата Сообщение от Nikakula Посмотреть сообщение
без сторонних программ
А что вообще на компе делается без сторонних программ? Воздействовать непосредственно на ячейки памяти остается. Ну а если допустимо использовать программы, то элементарно заменяется.
0
9 / 9 / 16
Регистрация: 07.03.2014
Сообщений: 202
25.03.2014, 17:36  [ТС] 5
Arigato_RU, нет, я имел ввиду не использовать всякие уже готовые программы, скачанные из интернет, в которых только кнопочку нажать и все.

Добавлено через 2 минуты
Мне нужно не просто, чтобы программу скачал, кнопочку нажал, и готово, а надо самому во всем процессе разобраться, как это делается!
0
Программист
305 / 180 / 176
Регистрация: 05.12.2013
Сообщений: 683
Записей в блоге: 5
25.03.2014, 17:49 6
Открывай файл с exe, находи то место, где прописано нужное значение, записывай туда новое значение, закрывай файл.
0
0 / 0 / 0
Регистрация: 28.07.2013
Сообщений: 30
25.03.2014, 17:56 7
Дружище для того чтобы изменить код программы уже ехе файла, тебе нужно стать спецом в области дисассемблирования. Успехов
0
9 / 9 / 16
Регистрация: 07.03.2014
Сообщений: 202
25.03.2014, 19:25  [ТС] 8
Arigato_RU, можете поподробнее рассказать про
Цитата Сообщение от Arigato_RU Посмотреть сообщение
Открывай файл с exe, находи то место, где прописано нужное значение, записывай туда новое значение, закрывай файл.
там же одни иероглифы

Добавлено через 1 минуту
Я же правильно понимаю, что разрешение вместо exe надо поменять на txt, и открывать или как то по другому?
0
Программист
305 / 180 / 176
Регистрация: 05.12.2013
Сообщений: 683
Записей в блоге: 5
25.03.2014, 19:29 9
Лучший ответ Сообщение было отмечено Nikakula как решение

Решение

Берем исходную программу:
Pascal
1
2
3
4
5
6
7
8
begin
var a,b,c:integer;
a:=200;
b:=300;
c:=a+b;
writeln(c);
readln;
end.
Компилируем, получаем Program1.exe (можно скачать из вложения).

Теперь пишем программу-патч:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
var
  a,b: integer;
  f: file;
  ok: boolean;
begin
  write('a = '); readln(a);
  write('b = '); readln(b);
  ok:=true;
  try
    assign(f,'Program1.exe');
    reset(f);
    seek(f,$EEE);
    write(f,a);
    seek(f,$EF4);
    write(f,b);
    close(f);
  except
    ok:=false;
  end;
  if ok
    then writeln('OK')
    else writeln('WRONG');
end.
Она просит ввести новые значения переменных, записывает их прямо в Program1.exe. Для этого надо знать адреса, где хранятся значения: $EEE - переменная a, $EF4 - переменная b. Я узнал эти адреса, запустив программу WinHex, открыв в ней Program1.exe и воспользовавшись поиском целых значений. В принципе, такой поиск легко написать на Pascal, просто просматриваем файл и сравниваем с нужным значением, тем самым находим его адрес.
1
Вложения
Тип файла: rar Program1.rar (4.0 Кб, 11 просмотров)
9 / 9 / 16
Регистрация: 07.03.2014
Сообщений: 202
25.03.2014, 19:33  [ТС] 10
Я просто не такой хакер, как ты можешь объяснить, что значит seek в 14 строчке и как написать эту самую программу поиска адресов переменных, я вообще не понял, что за адрес, объясни пожалуйста)
0
Программист
305 / 180 / 176
Регистрация: 05.12.2013
Сообщений: 683
Записей в блоге: 5
25.03.2014, 19:36 11
seek - переместить указатель файла в нужную позицию. Для поиска адреса качай WinHex и в нем ищи.
0
9 / 9 / 16
Регистрация: 07.03.2014
Сообщений: 202
25.03.2014, 20:00  [ТС] 12
Ну а все-таки, как написать программу поиска этих адресов

Добавлено через 3 минуты
Понятно, что намного проще скачать программу и сделать, но мне сам принцип интересен, как это делается

Добавлено через 2 минуты
И еще я не понял, вот ты перемещаешь указатель в то место, где записано значение переменной a, и сразу пишешь новое значение, а куда старое девается?
0
Программист
305 / 180 / 176
Регистрация: 05.12.2013
Сообщений: 683
Записей в блоге: 5
25.03.2014, 20:03 13
Цитата Сообщение от Nikakula Посмотреть сообщение
Ну а все-таки, как написать программу поиска этих адресов
Банальная работа с файлами, чтение файла.

Цитата Сообщение от Nikakula Посмотреть сообщение
И еще я не понял, вот ты перемещаешь указатель в то место, где записано значение переменной a, и сразу пишешь новое значение, а куда старое девается?
Старое значение исчезает навсегда
0
9 / 9 / 16
Регистрация: 07.03.2014
Сообщений: 202
25.03.2014, 20:18  [ТС] 14
Цитата Сообщение от Arigato_RU Посмотреть сообщение
Банальная работа с файлами, чтение файла.
Я понимаю, что работа с файлами, но как найти этот адрес, как определить, что у переменной "a" адрес $EEE?
Pascal
1
2
3
4
var f:text
begin
assign(f,'путь к программе');
reset(f);
напиши хотябы словами, как дальше делать, что именно там надо искать? Надо искать значение 200(для переменной "a"), если так, то найду я его, и как дальше, как найти адрес?
0
Программист
305 / 180 / 176
Регистрация: 05.12.2013
Сообщений: 683
Записей в блоге: 5
25.03.2014, 20:25 15
Ты вообще представляешь, что такое файл? У меня складывается ощущение, что не представляешь.

Вот пример для поиска произвольного значения в бинарном файле, находит только первое встретившееся:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
var
  f: file;
  a,x: integer;
  p,ef: int64;
  found: boolean;
begin
  write('a = '); readln(a);
  assign(f,'Program1.exe');
  reset(f);
  p:=0;
  found:=false;
  ef:=filesize(f)-sizeof(integer);
  while p<ef do begin
    seek(f,p);
    read(f,x);
    if x=a then begin
      writeln(p);
      found:=true;
    end;
    inc(p);
  end;
  close(f);
  if not found then
    writeln('Not Found!');
end.
0
9 / 9 / 16
Регистрация: 07.03.2014
Сообщений: 202
25.03.2014, 20:37  [ТС] 16
Я не понимаю вот что
там в файл так и будет написано
$EEE=200 или как там будет в файле написано, что "a" = 200
я понимаю, как искать, я не понимаю, что мне надо искать
0
Программист
305 / 180 / 176
Регистрация: 05.12.2013
Сообщений: 683
Записей в блоге: 5
25.03.2014, 20:37 17
200 надо искать. Вообще, рано вы полезли в такие дебри.
0
9 / 9 / 16
Регистрация: 07.03.2014
Сообщений: 202
25.03.2014, 20:40  [ТС] 18
Pascal
1
ef:=filesize(f)-sizeof(integer);
и можешь еще объяснить эту строчку

Добавлено через 53 секунды
Ну, допустим, я нашел 200, а как узнать адрес?

Добавлено через 1 минуту
А с таким опытным человеком, как вы, можно и не в такие дебри лезть
0
Программист
305 / 180 / 176
Регистрация: 05.12.2013
Сообщений: 683
Записей в блоге: 5
25.03.2014, 20:41 19
Цитата Сообщение от Nikakula Посмотреть сообщение
и можешь еще объяснить эту строчку
Размер файла в байтах минус размер переменной типа integer (оно 4 равно).

Цитата Сообщение от Nikakula Посмотреть сообщение
Ну, допустим, я нашел 200, а как узнать адрес?
Так где нашел, там и адрес.
0
9 / 9 / 16
Регистрация: 07.03.2014
Сообщений: 202
25.03.2014, 20:59  [ТС] 20
Цитата Сообщение от Arigato_RU Посмотреть сообщение
Размер файла в байтах минус размер переменной типа integer (оно 4 равно).
А зачем это делать?
Цитата Сообщение от Arigato_RU Посмотреть сообщение
Так где нашел, там и адрес.
Вообщем, чтобы проще было, можешь пример написать, как это выглядит

Добавлено через 5 минут
Pascal
1
2
3
4
5
p:=0;
  found:=false;
  ef:=filesize(f)-sizeof(integer);
  while p<ef do begin
    seek(f,p);
А зачем каждый раз указатель возвращать в начало, проверятся же по сути будет одно и тоже слово!
Pascal
1
2
read(f,x);
    if x=a then begin
А здесь, в переменную "x" считывается же вся строчка, как ты можешь проверять равна ли она x, тебе же надо только слово сравнивать?
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.03.2014, 20:59

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Можно ли узнать исходной код Delphi, если есть только ехе-файл?
можно узнать исходной код delphi. если есть только ехе файл? может есть какая та прога

Как обновить Bios через флэшку, если в обновлении только один файл с расширением .exe (плата MSI)?
Как обновить Bios через флэшку, если в обновлении только один файл с расширением .exe (плата MSI)?...

Можно ли изменить код готового exe файла?
Есть уже скомпилированный екзешник другой проги.... Мне нужно с помощью фри паскаля, или делфи,...

Как можно изменить код программы представленной ниже, чтобы изображения менялись местами без кнопки, тое есть произвольно!
Как можно изменить код программы представленной ниже, чтобы изображения менялись местами без...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.