Перейти к публикации
GTA-003

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

Рекомендованные сообщения

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

806c33f66ef3fdd33ef6e.png
 

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

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

a5e1e47f85978dfe3fe46.png
 

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

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

3b9153e0edb4e8eccbde3.png
 

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

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

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

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

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

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

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

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

6311d54d226d4e035406b.png
 

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

b8539905d399dc858b549.png
 

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

5f12f2a53da787b496070.png
 

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

8f1b41fbc668fb0d22668.png
 

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

016073bf2e928d236b258.png
 

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

bc78ae2bd61a161cf01e8.png
 

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

c267547a4f0e94df58eba.png
 

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

7166df699634a6de0d8c3.png
 

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

ec67baffb5804f7df1a54.png
 
51e9e820947647f1fa292.png
 
7b79b3ca46113a20c081c.png
 

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

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

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

d5e15b219f8b9f614b805.png
 

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

94937657fa3ed479e5741.png
 

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

580769de9f1d91e1757fc.png
 

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

c23b148099e5e543cb6bf.png
 

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

efc68e804c24a88781149.png
 

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

56d444dfa756a42c285ff.png
 

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

399bf5e692ec75b8acc54.png
 

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

5499ecd356fd572b6615c.png
 

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

c34df15f8966b149c8fa0.png
 

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

Ассемблер ILASM

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

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

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

b86b7229db4955c6757f8.png
 

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

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

 

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

faaacf7e0b794523556c0.png
 

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

d3780903cf50f82f21a5d.png
 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

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

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.


×
×
  • Создать...