Перейти к содержимому

Как изменить код программы

  • автор:

Изменение кода уже скомпилированной программы

Здравствуйте! Только что задался вопросом: можно ли изменить код уже скомпилированной программы(так чтобы она работала)? То есть, имея исполняемый файл, можно ли его открыть как текстовый документ и изменять(ну всё-таки исходные коды линковщиков и компиляторов есть же). Я понимаю, что после работы компилятора, си там уже не пахнет, но всё же, изучив структуру ехе файла — это можно сделать, или это полный бред?

Отслеживать
задан 28 апр 2017 в 20:26
Stdugnd4ikbd Stdugnd4ikbd
1,057 8 8 серебряных знаков 19 19 бронзовых знаков
Комментарии не предназначены для расширенной дискуссии; разговор перемещён в чат.
– user177221
28 мая 2017 в 9:04

2 ответа 2

Сортировка: Сброс на вариант по умолчанию

Полностью исходный код программы конечно получить не возможно, но есть декомпиляторы которые его стараются восстановить, но получается из этого вырви-глаз и разбирать там не чего, а тем более редактировать. Насчёт редактирования ПО, это вам нужно изучить ассемблер (советую гуглить по запросу «реверс инжиниринг») и научиться таким программам как OllyDbg либо IdaPRO (платная и достаточно дороговатая) и потом уже делать патчи на те программы которые вы хотите, точнее редактировать. Но есть проблема в вашем вопросе, как вы хотите её редактировать, если просто дизайн, то вам достаточно и редактора ресурсов, которых OVER 9999+ в интернете как бесплатных(Resource Hacker), так и платных(Resource Tuner).

Отслеживать
ответ дан 28 апр 2017 в 20:31
alex-rudenkiy alex-rudenkiy
4,022 2 2 золотых знака 18 18 серебряных знаков 37 37 бронзовых знаков

Да нет, Вы просто не поняли моего вопроса, из-за его абсурдности. Можно ли, теоретически менять код уже скомпилированного экзешника блокнотом каким-нибудь, при условии, идеального знания роботы компилятора и линковщика?

28 апр 2017 в 20:37

@АртурКлочко да, конечно, если вы машина ��, то вы можете редактировать через какой нибудь текстовый редактор опкоды программы и менять ход её работы

28 апр 2017 в 20:41

а я однажды блокнотом создал экзешник и подписал его time , а внутри просто какие-то свои данные записал. В итоге я запустил экзешник, открылось окно консоли и показало мне время. Ещё раз повторюсь в экзешнике даже MZ не пахло, просто несколько строк. Как так? Какая фича Винды?

28 апр 2017 в 20:45

@АртурКлочко, командный интерпретатор обработал и запустил команду time. Делов-то. exe тут как флаг исполнения, а не машинный код.

28 апр 2017 в 20:49
@0andriy, понял, спасибо!
28 апр 2017 в 20:52

Через конкретно блокнот (или там Word) — нет, запорет он вам некоторые символы.
А вот hex-редактором — в принципе можно. А как, по-вашему, всякие ломалки работают? 🙂 Именно так — меняя в нужных местах код/данные.
Только тут — как в том апокрифе со старшим Капицей, которому якобы обещали за границей 10000 марок за ремонт какой-то там установки. Он приехал, посмотрел, сказал ассистенту ударить молотком в таком-то месте — все заработало. За такую работу принимающей стороне сумма показалась слишком большой, попросили счет. Он выглядел так:

Удар молотком — 1 марка.
За то что знал, где ударить — 9999 марок.

Словом, чтоб знать, куда ударить и какие байты и как поменять — надо долго и упорно учиться 🙂

Поменять какие-то данные типа, чтоб не Hello world выводила, а типа Coolhacker 🙂 — это попроще.

Отслеживать
ответ дан 29 апр 2017 в 5:09
219k 15 15 золотых знаков 119 119 серебряных знаков 230 230 бронзовых знаков

  • c
  • компилятор
  • exe
    Важное на Мете
Похожие

Подписаться на ленту

Лента вопроса

Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.

Дизайн сайта / логотип © 2024 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2024.1.3.2953

Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.

Как изменить логику/код программы на Windows?

В программе надо изменить/поправить/добавить несколько функций.

там есть функция поиска ( с полями для заполнения) в программе и надо добавить в форму поиска новое поле по которому ищется и дописать еще несколько функций

Есть предположение что она написана на с++.

Какие возможное решения для правки кода и сохранения изменений в программе?

  • Вопрос задан более трёх лет назад
  • 163 просмотра

Комментировать
Решения вопроса 2
Saboteur @saboteur_kiev Куратор тега C++
software engineer

Если исходный код достать нельзя, то простых вариантов нет.

Есть вариант дизассемблирования, встроить свои dll, но это операции настолько сложные, что судя по вашему вопросу даже нет смысла браться.
Если программа несложная, проще заказать на фрилансе и написать с нуля, с получением и программы и исходников на будущее.

Ответ написан более трёх лет назад
Комментировать
Нравится 3 Комментировать
Константин Степанов @koronabora
Если нет исходников — то гораздо проще написать с нуля.
Ответ написан более трёх лет назад
Комментировать
Нравится 1 Комментировать
Ответы на вопрос 0
Ваш ответ на вопрос

Войдите, чтобы написать ответ

cpp

  • C++

Не могу, понять как компьютер перемещает свой знак?

  • 1 подписчик
  • 19 часов назад
  • 90 просмотров

Статья Как изменить код программы без исходника

Бывают ситуации, когда под рукой нет исходника, а Вам срочно требуется внести изменения в коде, написанной ранее Вами программы. Например, дано приложение «TextEdit.exe» — текстовый редактор, написанный на языке c#, который имеет простой пользовательский интерфейс, состоящий из двух кнопок и текстового поля.

28381

При нажатии на кнопку “Чтение” из файла 1.txt считываются и выводятся все строки в окно элемента управления textBox, а при нажатии на кнопку “Запись” данные из текстового поля сохраняются в файле 2.txt

Для хранения путей в программе используются две текстовых переменных: filePathIn и filePathOut

28382

Прошёл год, как программа была написана и отдана заказчику, но вдруг ему потребовалось изменить имя папки, в которой должны храниться оба файла, c 123 на Text. Задача простая, но прошло уже много времени, и исходник был потерян, что делать в такой ситуации?

Для начала вспомним, как образуется .NET сборка

28383

Полученный в результате компиляции файл (сборка) содержит внутри себя метаданные, манифест, код на языке IL (MSIL).

Метаданные — описывают типы данных и их члены

Манифест описывают саму сборку

MSIL код, полученный в результате компиляции файла исходного кода

То есть перед вами тот же исходник, только в другом формате. И для того, чтобы поработать с ним, Вам понадобиться специальный инструмент, который позволяет просматривать и редактировать данные внутри сборки.

Дизассемблер ILDASM

Данный инструмент входит состав пакета .Net Framework SDK, который является бесплатным и устанавливается вместе с Visual Studio (включая Express версию). С помощью него вы можете, как просматривать внутреннее содержимое сборки, так и изменять его.

Для удобства работы создадим отдельную папку, например: ”c:\newasm” и поместим в неё файл TextEdit.exe

28384

Затем в меню “Пуск” открываем папку: «Visual Studio Tools»

28385

Запускаем командную строку разработчика

28386

Откроется консоль, вводим первую команду: ildasm. Для выполнения команды нажмите клавишу Enter.

28387

Появиться главное окно программы.

28388

Переместим файл сборку TextEdit.exe в окно дизассемблера ILASM, в результате отобразиться её внутреннее содержимое.

28389

Убедимся, что в ней содержатся нужные нам данные (пути к файлам).

28390

Два поля на месте, теперь взглянем на метаданные.

28391

Для доступа к метаданным Вы так же можно использовать сочетание горячих клавиш: Ctrl+M. Затем с помощью кнопки Find, найдём имя одного из файлов.

28393

28394

28395

Как видно присутствуют оба. Пути найдены, и теперь их нужно изменить, но все данные, в текущий момент, доступны только для просмотра, и изменить их в самой дизассемблере нельзя, поэтому воспользуемся второй возможностью данной программы и выгрузим содержимое сборки в файл.

Выгрузка данных

Выберите пункт меню File -> Dump

28396

Появится меню. В данном примере, все пункты меню оставим без изменений и просто нажмём кнопку OK.

28397

Появится диалоговое окно

28398

Выберем ранее созданную папку “newasm”, затем укажем имя и тип файла и нажмём на кнопку “Сохранить”

28399

В результате в папке “newasm” должно появиться несколько новых файлов

28400

Закрываем окно ildasm, а так же удаляем файл Textedit.exe, больше он нам не понадобиться. Теперь нас интересует полученный файл texted.il и для начала откроем его любым текстовым редактором, например блокнотом.

28401

Снова воспользуемся поиском (Ctrl+F)

28402

Так же видим найденные строки, которые содержат пути к файлам.

28403

Изменим текущее имя папки 123 на новое название Text, для обоих файлов

28404

Сохраняем внесённые изменения и закрываем блокнот.

Ассемблер ILASM

Изменения внесены и теперь нужно преобразовать файл txted.il обратно в исполняемый файл (.exe) Для этого нам понабиться второй инструмент ILASM, ассемблер, который так же входит в состав пакета SDK и не требует отдельной установки.

файл (.il) -> компилятор ilasm = сборка (.exe и .dll)

Возвращаемся в консоль

28408

Вводим вторую команду:

ilasm /exe c:\newasm\txted.il /output=c:\newasm\textEdit.exe

Первый параметр: /exe — указывает компилятору, что на выходе мы хотим получить файл с расширением .exe. Затем указываем файл, который содержит MSIL-код. С помощью второго параметра /output — указываем имя и расширение нового файла.

28406

Если компиляции прошла успешно, то в окне консоли вы должны увидеть сообщение, которое выделено на картинке, а внутри папке “newasm” должен появиться новый файл TextEdit.exe, который теперь уже содержит новые пути к файлам.

28407

Вот таким не сложным способом можно выйти из данной ситуации, при этом не имея исходника под рукой.

  • Cоздание файла dll
  • Программное выравнивание текста по ширине
  • Как удалить параметр реестра Windows
Вложения

1554325668160.png
16,8 КБ · Просмотры: 499
1554325822178.png
8,4 КБ · Просмотры: 564

The Codeby

Well-known member

  • Сообщения 4 680
  • Реакции 6 566
The Codeby
Well-known member

30.12.2015 4 680 6 566 BIT 117
Комментарии, перенесенные из блога

Сергей
Четверг на 02:09
Здравствуйте, когда пытаюсь открыть файл exe в редакторе LD DASM у меня появляется ошибка «отсутствует допустимый заголовок CLR поэтому дизассемблирование невозможно» что это? и можно как нибудь исправить?

admin
Пятница на 10:09
Программа (файл) на каком языке написана?

Иван
Суббота на 10:09
Добрый день. Такая же ситуация. Пытаюсь открыть файл exe в редакторе LD DASM у меня появляется ошибка «отсутствует допустимый заголовок CLR поэтому дизассемблирование невозможно». Файл написан на Delphi.

admin
Воскресенье на 09:09
Привет.
Эта утилита предназначена только для просмотра кода написанного на языке IL (MSIL) — это промежуточный язык, в который компилируется код .NET языков. Полученный в результате компиляции файл (сборка) содержит CLR заголовок. Затем, во время запуска приложения, выполняется вторая компиляция, которая превращает полученный код IL в машинный.

В дельфи сборка не содержит CLR заголовок и код, если не ошибаюсь, сразу преобразуется в машинный.

Иван
Понедельник на 12:09
А как-то нормально можно посмотреть код, если есть уже окончательный exe и несколько dll проекта?

admin
Понедельник на 09:09 ПП
Что значит «нормально посмотреть код» ?

Иван
Среда на 03:09 ПП
Ну чтобы взять код себе в другой проект

admin
Четверг на 11:09
Есть вроде какие-то, но не помню названия, потому что не использую их.

Анатолий
Четверг на 12:02 ПП
Можете, помочь как я хочу переписать лаунчер для игры, что бы изменить проверку файлов но не могу никак открыть его. Пробывал через ресторатор 2007 но оно не может прочитать пату файлов точнее отобразить язык.

Как изменить код программы без исходника? Несколько способов

Lorem ipsum dolor

Напишем

Иногда случаются такие ситуации, когда нужно внести изменения в программу, но исходный код отсутствует. Как тогда изменить код программы?

Решение воздействовать на код программы в отсутствие ее исходного кода случается довольно часто и в основном этому предшествуют 2 основные причины:

  • вы потеряли исходный код;
  • его у вас никогда и не было, но хотите доработать какую-то программу.

Итак, есть скомпилированный файл, но нет исходного кода, как тогда изменить код программы? На помощь может прийти процесс декомпиляции. Почему «может»? Потому что в некоторых случаях и этот процесс бессилен. Плюс, возможно , вы хотите изменить исходный код программы, который специально защищен. В таком случае программы-декомпиляторы могут оказаться бессильными. П омимо этого, многое зависит от конкретного декомпилятора и языка программирования, на котором написана ваша программа. В некоторых случаях декомпилятор выдает исходный код, в котором вы не сможете найти нужный участок кода для его изменения.

В общем, «в таком положении» — без отсутствия исходного кода — вероятность, что что-то получится , невысокая, но она есть. А раз есть вероятность, значит , можно пробовать.

Как изменить код программы без исходников?

Напишем

Первым в этом случае вам может помочь процесс декомпиляции. Декомпиляция — это способ создания исходного кода программного обеспечения на том языке, на котором оно было разработан о . То есть компиляция — это когда исходный код программного обеспечения преобразуется в машинный код, а декомпиляция — это обратный процесс.

Декомпиляция в некоторых случаях позволяет изменить код программы без исходников, однако нужно понимать, что полностью восстановить исходный код программы может не получиться. Декомпилятор вообще может вам выдать непонятный результат , и вы просто не будете знать , что с этим результатом делать. На практике получается, что чем «меньше» программа, тем качественней проходит процесс декомпиляции , и наоборот — высоконагруженные программы тяжело декомпилируются.

Декомпиляцию возможно осуществить при помощи специализированных программ:

  1. VB Decompiler;
  2. ReFox;
  3. DeDe;
  4. EMS Source Rescuer;
  5. PEID;
  6. и др.

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

Суть декомпиляции сводится к следующему: вы из машинного кода программы пытаетесь восстановить ее исходный код, в котором будете вносить необходимые изменения. Это самый простой метод, но он работает не всегда. Есть еще один альтернативный метод, как изменить исходный код программы без исходника, но он требует специальной подготовки.

Как изменить код программы без декомпиляции?

Напишем

В качестве альтернативного метода, как изменить код программы без исходника , выступает изучение ассемблера, в частности раздела «реверс-инженерия», чтобы уметь воздействовать на машинный код. Да, это сложно, так как потребует долгого и упорного изучения, но это будет самы м верны м подход ом . Ведь в этом случае вы будете знать, на какой байт вам нужно воздействовать, чтобы произвести изменения в машинном коде программе. На сайте SpyLife вы сможете найти топ-3 программных обеспечений, позволяющее получать всю необходимую информацию со стороннего устройства.

В качестве вспомогательного инструмента в этом случае будут программы OllyDbg и Ida PRO.

Заключение

  • используя декомпилятор;
  • изучая ассемблер.

Мы будем очень благодарны

если под понравившемся материалом Вы нажмёте одну из кнопок социальных сетей и поделитесь с друзьями.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *