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

 eXeL@B —› Вопросы новичков —› C# подмена класса\метода через конфиг файл
Посл.ответ Сообщение

Ранг: 57.0 (постоянный), 10thx
Активность: 0.050.08
Статус: Участник

Создано: 25 августа 2017 01:23
· Личное сообщение · #1

Здравствуйте

Пару раз использовал assemblyBinding для подмены оригинальной dll на патченную. При этом оригинальная оставалась на месте и проходила все проверки на хэши, строгие имена.

Есть ли что-то подобное для подмены только определенного класса или метода?




Ранг: 337.5 (мудрец), 348thx
Активность: 2.112.42
Статус: Участник

Создано: 25 августа 2017 01:32
· Личное сообщение · #2

zds

> assemblyBinding

А что это ?

И что за хэши ?

-----
vx





Ранг: 337.6 (мудрец), 224thx
Активность: 0.210.1
Статус: Участник
born to be evil

Создано: 25 августа 2017 08:44
· Личное сообщение · #3

difexacaw
--> Link <--
хэши - селфчек, так понимаю
zds
не думаю. как вы себе это представляете?

-----
От многой мудрости много скорби, и умножающий знание умножает печаль




Ранг: 57.0 (постоянный), 10thx
Активность: 0.050.08
Статус: Участник

Создано: 25 августа 2017 11:45
· Личное сообщение · #4

difexacaw
assemblyBinding - в конфиг файле можно сделать перенапреление на свою сборку с другим именем и в другом месте https://msdn.microsoft.com/ru-ru/library/twy1dw1e(v=vs.110).aspx
была прога, где нужно было пропатчить пару байт в одной dll. Но возникала проблема, что в других сборках была проверка этой dll по хэшу, строгим именам. В свою очередь эти сборки проверялись в других и так далее, все нарастало как снежный ком. В общей сложности пришлось бы патчить примерно 20 файлов.
добавив assemblyBinding в конфиг файл я решил задачу с минимальными усилиями. Оригинальная dll лежала на своем месте и проходила все проверки, патченная же лежала в другом месте и подгружалась автоматически.
здесь конечно повезло, то что разработчик находил местоположение dll по местоположению главной сборки, а не находил сборку например по какому-нибудь классу из нее (Assembly.GetAssembly (Type))

ajax
не знаю, думал может есть что-то подобное. до того как я случайно не нашел assemblyBinding, тоже не думал, что такое возможно стандартными средствами




Ранг: 337.5 (мудрец), 348thx
Активность: 2.112.42
Статус: Участник

Создано: 25 августа 2017 12:03 · Поправил: difexacaw
· Личное сообщение · #5

zds

> была проверка этой dll по хэшу, строгим именам.

Это же защита от dll-hijacking, судя по всему это не баг .net, а фича . Вам же нужно это обойти. Или я что то не правильно понял ?

-----
vx





Ранг: 337.6 (мудрец), 224thx
Активность: 0.210.1
Статус: Участник
born to be evil

Создано: 25 августа 2017 14:28 · Поправил: ajax
· Личное сообщение · #6

zds
биндинг даж на ms расписан, че тут думать было.
сейчас прикинул - теоритически подмена возможна, либо JIT-хуком. но, хз как внутренние механизмы дотнета отнесутся к таким редиректам. либо просто мемпатчем байткода. вопрос - нахрена это?
difexacaw
ему класс/процедуру в IL либе надо подменить своим кодом. в памяти, так понимаю

-----
От многой мудрости много скорби, и умножающий знание умножает печаль





Ранг: 337.5 (мудрец), 348thx
Активность: 2.112.42
Статус: Участник

Создано: 26 августа 2017 00:55
· Личное сообщение · #7

ajax

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

Пересмотреть изначальную задачу.

-----
vx




Ранг: -0.7 (гость), 170thx
Активность: 0.540
Статус: Участник

Создано: 26 августа 2017 01:25
· Личное сообщение · #8

difexacaw пишет: Если это так, то получается что это дичайший изврат, помимо этого не совместимый с защитой.

В C#\Java\etc это штатная работа. На хабре была статья с подробным разбором горячей замены кода и обхода подписи сборки.




Ранг: 337.5 (мудрец), 348thx
Активность: 2.112.42
Статус: Участник

Создано: 26 августа 2017 02:48
· Личное сообщение · #9

shellstorm

А у вас что еврейский ресурс с чушью и запредельным чсв пример для меня.

Поймите следующее. Если есть какое то обычное приложение, то для него можно применить любые методы, это нэйтив код и его можно разобрать на компоненты, сделав что угодно. Но это викс методы и инструменты, так апп не пишутся.
У тс же не нэйтив, а транслятор; инструменты и техники к этому не применимы. Вмешаться в байт код вм, хз на что опираясь.. я даже не представляю с чего начать, но понимаю что это пзц. Такое никуда не годится.
Для решения задачи нужна серия моторов. Каждый из которых обрабатывает выхлоп ниже стоящего по цепочке. Нужно взять вм под дебаг(визор), далее перейти на уровень выше, обработать непосредственно байт код, причём это всё чёрный ящик. Это даже не задача, это бред.

Выводы:

1. Использовать только средства конкретного IDE/среды. Тоесть не нарушать её целостность, не нужно колхозить, для решения, которое принято из за не понимания среды разработки.

2. Всё что нарушает защиту есть малварь. Посему никакой не стандартный метод не годится.

3. Колхозят только ньюби. Тоесть изучать сабж до просветления, тогда вопрос иссякнет сам собой.

-----
vx




Ранг: -0.7 (гость), 170thx
Активность: 0.540
Статус: Участник

Создано: 26 августа 2017 03:02
· Личное сообщение · #10

difexacaw пишет: А у вас что еврейский ресурс с чушью и запредельным чсв пример для меня.

У меня знание работы jit и знание того, что на том ресурсе есть подробная статья.
Касательно самих языков, они позволяют собирать код из приложения, заменять методы, классы на лету, это стандартная фича самой платформы. В google hot code upgrade, ну и конечно class injection. В серверном софте это вполне обычное обновление.




Ранг: 337.5 (мудрец), 348thx
Активность: 2.112.42
Статус: Участник

Создано: 26 августа 2017 03:13 · Поправил: difexacaw
· Личное сообщение · #11

shellstorm

На факав есть девчёнка которая куда лучше вас думаю шарит в этих jit, с ней можите и потягаться. Я же этот крэп знаю лишь поверхностно.

И по мойму это источник зла. Обычный инжект(OP) можно обнаружить и прибить, а jit нет. net это принципиально вредоносно. А учитывая уровень(скилл) знаний, тех кто это реализует - это ппц, как это вообще допустили к существованию не понимаю.

-----
vx


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

Ранг: -0.7 (гость), 170thx
Активность: 0.540
Статус: Участник

Создано: 26 августа 2017 03:53
· Личное сообщение · #12

difexacaw пишет: На факав есть девчёнка которая куда лучше вас думаю шарит в этих jit, с ней можите и потягаться.

Мне не 15 лет, я всего лишь объяснил элементарные вещи из 21 века. В некоторых языках это вообще киллер-фича, например в erlang и языках производных на его виртуальной машине. В описании языка можете почитать зачем это вообще нужно, там доступней описана идея чем в java вариантах. Касательно ТС, простых вариантов там нет, только вмешиваться в работу jit, а с подобными вопросами ему туда рано лезть, а то что проверку подписей можно снести, так неудивительно при доступе то к сборке, не понимаю по какому поводу у вас подгорело.

difexacaw пишет: это ппц, как это вообще допустили к существованию не понимаю.

Это не ппц, а очень нужный функционал, проще пересобирать весь проект или заменить метод\класс, может еще сервер остановить для обновления?




Ранг: 77.2 (постоянный), 74thx
Активность: 0.190.15
Статус: Участник

Создано: 26 августа 2017 04:15
· Личное сообщение · #13

difexacaw пишет:
Такое никуда не годится

Кому ты все это пишешь..




Ранг: 622.6 (!), 521thx
Активность: 0.330.89
Статус: Участник
_Вечный_Студент_

Создано: 26 августа 2017 04:41
· Личное сообщение · #14

difexacaw пишет:
учитывая уровень(скилл) знаний, тех кто это реализует - это ппц, как это вообще допустили к существованию не понимаю.


Можем индусам сказать "спасибо" за их "код".
Кто с ними работал напрямую, тот поймет.

-----
Give me a HANDLE and I will move the Earth.



 eXeL@B —› Вопросы новичков —› C# подмена класса\метода через конфиг файл
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати