eXeLab
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС ВЗЛОМ
выпущен 2 августа!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

Русский / Russian English / Английский

Сейчас на форуме: Voron2033
 · Начало · Статистика · Регистрация · Поиск · ПРАВИЛА ФОРУМА · Язык · RSS · SVN ·

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

Ранг: 42.9 (посетитель)
Статус: Участник

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

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

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

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


Ранг: 291.1 (наставник)
Статус: Участник

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

zds

> assemblyBinding

А что это ?

И что за хэши ?


Ранг: 329.2 (мудрец)
Статус: Участник
born to be evil

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

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

Ранг: 42.9 (посетитель)
Статус: Участник

Создано: 25 августа 2017 11:45 New!
Цитата · Личное сообщение · #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, тоже не думал, что такое возможно стандартными средствами


Ранг: 291.1 (наставник)
Статус: Участник

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

zds

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

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


Ранг: 329.2 (мудрец)
Статус: Участник
born to be evil

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

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


Ранг: 291.1 (наставник)
Статус: Участник

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

ajax

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

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

Ранг: 0.0 (гость)
Статус: Участник

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

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

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


Ранг: 291.1 (наставник)
Статус: Участник

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

shellstorm

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

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

Выводы:

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

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

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

Ранг: 0.0 (гость)
Статус: Участник

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

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

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


Ранг: 291.1 (наставник)
Статус: Участник

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

shellstorm

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

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

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


Ранг: 0.0 (гость)
Статус: Участник

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

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

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

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

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

Ранг: 69.7 (постоянный)
Статус: Участник

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

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

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


Ранг: 482.5 (мудрец)
Статус: Участник
_Вечный_Студент_

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

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


Можем индусам сказать "спасибо" за их "код".
Кто с ними работал напрямую, тот поймет.
 eXeL@B —› Вопросы новичков —› C# подмена класса\метода через конфиг файл

Оригинальный DVD-ROM: eXeL@B DVD !

Вы находитесь на форуме сайта EXELAB.RU
Проект ReactOS