Сейчас на форуме: tyns777, bezumchik, Lohmaty (+7 невидимых)

 eXeL@B —› Вопросы новичков —› Простые способы замены кода в dotNet
<< . 1 . 2 .
Посл.ответ Сообщение

Ранг: 16.6 (новичок), 1thx
Активность: 0.030.16
Статус: Участник

Создано: 02 марта 2019 13:09
· Личное сообщение · #1

Здравствуйте, ув. Профессионалы!
Хочу научиться производить замену кода в приложениях dotNet. Для этого создал на C# очень простое тестовое приложение. При нажатии на кнопку Calculate приложение просто складывает два числа, которые были введены в текстовые поля и результат выводит в третье текстовое поле.

Задача заменить исходную функцию сложения на следующую:
Code:
  1. public static string Read_From_txt()
  2. {
  3.          string path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Result.txt");
  4.          string result;
  5.          try
  6.          {
  7.                  FileStream stream = new FileStream(path, FileMode.Open);
  8.                  StreamReader streamReader = new StreamReader(stream, Encoding.GetEncoding("windows-1251"));
  9.                  result = streamReader.ReadLine();
  10.                  streamReader.Close();
  11.          }
  12.          catch
  13.          {
  14.                  result = "";
  15.          }
  16.          return result;
  17. }

Код функции читает первую строку из файла Result.txt и возвращает ее в качестве результата. Также хочу обратить внимание, что код фунции использует библиотеку 'using System.IO;', которая не подключена в исходном приложении

Файлы с тестовым приложением выложил здесь --> Link <--
в архиве 'Calc.exe' - исходное приложение, 'FileRead.dll' - функция для замены, 'Result.txt' - текстовый файл, откуда будет читаться первая строка

По возможности, просьба подробно указывать ЧТО, КАК И С ПОМОЩЬЮ КАКИХ ИНСТРУМЕНТОВ следует делать для замены кода. По Вашим рекомендациям я буду учиться



Ранг: 330.4 (мудрец), 334thx
Активность: 0.160.17
Статус: Участник
ILSpector Team

Создано: 11 марта 2019 15:34 · Поправил: Medsft
· Личное сообщение · #2

http://prntscr.com/mwatp8 все работает
Походу придется видео снять
https://www.screencast.com/t/zlppPUwoSi
http://prntscr.com/mwax4a

Ты мне должен



Ранг: 16.6 (новичок), 1thx
Активность: 0.030.16
Статус: Участник

Создано: 13 марта 2019 15:00 · Поправил: rukop84
· Личное сообщение · #3

Мастер Medsft, Спасибо! Видео и скриншоты оказались очень кстати. Сразу стало ясно как на самом деле следует работать в ILSpector. Когда есть образец для подражания, то многие эксперименты отпадают за ненадобностью

Кстати, возможно хорошей идеей будет добавить сделанное видео на Ваш youtube-канал (ILSpector - Хитрости применения). Там еще не было демонстрации в ILSpector'е новой функции Inject

На текущий момент застрял на байт-патчинге. Заменяю вызов метода на целевой, лишнее затираю как по инструкции, но приложение после таких изменений падает. Всю работу делаю в ILSpector'е

Описываю детально что делаю:
1. То, что было до изменений -> скрин: --> Link <--
2. То, что стало после патчинга -> скрин: --> Link <--



Ранг: 330.4 (мудрец), 334thx
Активность: 0.160.17
Статус: Участник
ILSpector Team

Создано: 13 марта 2019 19:27 · Поправил: Medsft
· Личное сообщение · #4

Вот отсюда инжекти https://dropmefiles.com/5GbYQ а дальше все как и делал
Не буду я тебе сейчас разницу объяснять между структурами и классами и способами хранения их в сборке

| Сообщение посчитали полезным: rukop84

Ранг: 16.6 (новичок), 1thx
Активность: 0.030.16
Статус: Участник

Создано: 14 марта 2019 19:36 · Поправил: rukop84
· Личное сообщение · #5

Medsft пишет:
Вот отсюда инжекти

Сделал инжект, сделал патч, все идеально работает, ничего не падает

Сейчас застрял на том, что пытаюсь воссоздать такой же файл для инжекта как и у Вас:
- код делаю такой же
- .NET Framework 2.0 такой же
- AssemblyVersion=0.0.0.0 такую же

!!!Но все равно файл dll для инжекта получается какой-то другой. На практике это отличие выражается вот в чем:
- Ваш файл после инжекта можно патчить хоть в ILSpector, хоть в любом hex-редакторе и ничего падать не будет
- а мой файл после инжекта можно патчить только в ILSpector. После изменений же в hex-редакторе приложение будет падать

Мастер, Medsft каких атрибутов не хватает в компиляции?
p.s.: для компиляции dll использую Visual Studio 10



Ранг: 330.4 (мудрец), 334thx
Активность: 0.160.17
Статус: Участник
ILSpector Team

Создано: 15 марта 2019 08:59 · Поправил: Medsft
· Личное сообщение · #6

rukop84 пишет:
получается какой-то другой
)))))))))))))))))))))))))))))))))))))))))))))))))))))))))
ты хоть пришли посмотреть то на это чудо

Еще: в ILSpectore есть встроенный assembly comparer.Видал? ))))))))))))))))



Ранг: 16.6 (новичок), 1thx
Активность: 0.030.16
Статус: Участник

Создано: 15 марта 2019 10:07
· Личное сообщение · #7

чудо здесь: --> Link <--

Medsft пишет:
в ILSpectore есть встроенный assembly comparer.Видал?

как им компеить так и не понял. Делаю так:
- загружаю в ILSpector один файл dll -> на нем ПКМ -> Compare Assembly -> в диалоговом окне выбираю dll для сравнения -> Ок -> Но ничего не происходит



Ранг: 330.4 (мудрец), 334thx
Активность: 0.160.17
Статус: Участник
ILSpector Team

Создано: 15 марта 2019 11:44 · Поправил: Medsft
· Личное сообщение · #8

rukop84 пишет:
Но ничего не происходит
бага какаято
https://dropmefiles.com/4ju8z вот вроде последняя версия.Проверил comparer comparer работает. Только не устанавливай на C диск.

Добавлено спустя 1 минуту
разницы не вижу между твоим и моим файликом
а следовательно в hex - редакторе ты чтото делаешь неправильно

Добавлено спустя 5 минут
rukop84 пишет:
можно патчить только в ILSpector
сними нам кино чтоли как ты это делаешь



Ранг: 16.6 (новичок), 1thx
Активность: 0.030.16
Статус: Участник

Создано: 15 марта 2019 13:39 · Поправил: rukop84
· Личное сообщение · #9

Medsft пишет:
разницы не вижу между твоим и моим файликом

Ну, очень интересно!!! Благодаря той версии ILSpector, которую Вы прислали я вижу сплошные различия, сделал скрин: --> Link <--

Хорошо бы, если бы Вы прокомментировали эти различия. И Главное - как создать файл подобный Вашему?!

Мастер, а как в ILSpector убрать результаты сравнения? Никаких кнопок закрытия не нашел, и чтобы очистить пространство приходится его перезапускать

Добавлено спустя 1 час 56 минут
А еще заметил по работоспособности ILSpector:
- сравниваю файлы -> удаляю файл из проекта -> закрываю ILSpector
!!!Но запущенный процесс при этом не завершается, приходится прибивать его вручную в диспетчере задач

Добавлено спустя 4 часа 41 минуту
В общем придумал как себе устроить самопроверку со своим файлом dll:
1. Сделать инжект dll + патч в ILSpector + сохранить
2. Сделать инжект dll + патч в hex + сохранить
3. Сравнить по байтам сборки в п.1 и п.2

После того, как выполнил проверку оказалось, что сборка патченная в hex-редакторе не падает (как было раньше). А сами файлы отличаются одним байтом

Вывод: совпал с тем, что сделал Мастер:
Medsft пишет:
следовательно в hex - редакторе ты что-то делаешь неправильно


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

Мастер Medsft, Спасибо за помощь и наставничество, и за терпение тоже

Сегодня и завтра здесь еще можно будет что-либо написать. В Вс Тему закрою



Ранг: 330.4 (мудрец), 334thx
Активность: 0.160.17
Статус: Участник
ILSpector Team

Создано: 15 марта 2019 19:50
· Личное сообщение · #10

rukop84 пишет:
ILSpector убрать результаты сравнения
оттуда же откуда вызвал, пкм закрыть компарер

Добавлено спустя 1 минуту
rukop84 пишет:
как создать файл подобный Вашему?!
слышал в студии есть разные архитектуры, поэксперементируй: any CPU, x86, mixed



Ранг: 16.6 (новичок), 1thx
Активность: 0.030.16
Статус: Участник

Создано: 15 марта 2019 19:53
· Личное сообщение · #11

понял



Ранг: 330.4 (мудрец), 334thx
Активность: 0.160.17
Статус: Участник
ILSpector Team

Создано: 15 марта 2019 19:54
· Личное сообщение · #12

Кстати версию спектора забирайте кому надо быстрее, там короткий период жизни



Ранг: 16.6 (новичок), 1thx
Активность: 0.030.16
Статус: Участник

Создано: 15 марта 2019 20:03
· Личное сообщение · #13

Medsft пишет:
пкм закрыть компарер

что-то такого я не обнаружил, сделал скрин: --> Link <--


<< . 1 . 2 .
 eXeL@B —› Вопросы новичков —› Простые способы замены кода в dotNet
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати