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

 eXeL@B —› Программирование —› Лoадер для .NET
Посл.ответ Сообщение

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

Создано: 09 сентября 2014 13:57
· Личное сообщение · #1

Привет всем!

Вообщем появился вопрос. Нужно в памяти попатчить dll'ку, она написана на .net

Раньше обходился сканом по сигнатуре (если что это mono), но в неё добавил хрен знает сколько однотипных методов и способ с сигнатурой отваливается.

Суть вопроса такова - как можно выйти на адрес метода в памяти? (всю инфу о нём я имею).




Ранг: 158.5 (ветеран), 219thx
Активность: 0.120.01
Статус: Участник

Создано: 09 сентября 2014 14:27 · Поправил: ZaZa
· Личное сообщение · #2

Это поможет?

Скрин с Simply Assembly Explorer...


А еще можно смещение в IDA подсмотреть...

-----
One death is a tragedy, one million is a statistic.




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

Создано: 09 сентября 2014 15:41
· Личное сообщение · #3

ZaZa пишет:
А еще можно смещение в IDA подсмотреть...

Смещение относительно чего?




Ранг: 158.5 (ветеран), 219thx
Активность: 0.120.01
Статус: Участник

Создано: 10 сентября 2014 06:45 · Поправил: ZaZa
· Личное сообщение · #4

vovanre пишет:
Смещение относительно чего?

Относительно начала файла...





А получить метод с помощью --> Module::ResolveMethod <--, используя в качестве параметра TOKEN не пробовал?
Пускай Microsoft сам все делает... Ну или Mono.Cecil...

-----
One death is a tragedy, one million is a statistic.





Ранг: 218.9 (наставник), 42thx
Активность: 0.160
Статус: Участник
dotnet

Создано: 13 сентября 2014 18:00 · Поправил: Nimnul
· Личное сообщение · #5

ZaZa

То что ты советуешь относится к PE адресам исходного IL. Эта методика не сработает. После того как JIT прошелся по методу, изменения исходного IL не имеет смысла.

vovanre Я полагаю ты патчишь в памяти то что выдает JIT т.е. asm если это так то читани это. И по ссылкам из статьи зайди. Если вкраце то на все методы идут заглушки, если заглушка вызывается тогда JIT компилит метод в Native и патчит в заглушке адрес. Если постараться можно найти таблицу соответствия методам и заглушка\скомпилированным функциям.

Есть и другой способ, который не потребует от тебя переделывать код. Просто вставь в нужный тебе метод свою сигнатуру и не парься. Например можно вставить 13 nop'ов. Для поиска прибавь сигнатурe байты скомпилированного метода и будет у тебя unique sign даже при условии что одинаковых методов несколько.

Добавлено спустя 11 минут
Таже статья на русском http://www.cyberguru.ru/microsoft-net/net-framework/clr-method-injection.html?showall=1

-----
have a nice day




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

Создано: 14 сентября 2014 00:21
· Личное сообщение · #6

Nimnul пишет:
Я полагаю ты патчишь в памяти то что выдает JIT

Нет, я прямо байт код в памяти патчу. Я говорю о моно,там такое прокатывает.

Вообщем пока как временный костыль я сделал хук на mono_runtime_invoke и перенаправляю на аналогичную функцию в моей dll'ке (перед эти я её загружаю), конечно тут возможности просто нереальны, но больно часто крашит когда хукаешь. Причём я не могу понять почему, ошибки летят из недр kernel32. Вообщем сейчас попробую через VEH хукнуть.




Ранг: 218.9 (наставник), 42thx
Активность: 0.160
Статус: Участник
dotnet

Создано: 14 сентября 2014 00:31 · Поправил: Nimnul
· Личное сообщение · #7

vovanre

Я не понял, проблема в том что ошибки летят или в том, что ты адрес найти не можешь? Если тебе нужен IL тогда делай то что говорит ZAZA правда я не уверен что это смещение относительно начала файла, возможно это смещение относительно начала секции. Секции размещаются в памяти не так как в файле...

Добавлено спустя 3 минуты
Кстати лоадер ты можешь написать на C# в референс добавь ехе проги, и пока она не используется делай с ней что хочешь. После патча вызывай из exe функцию Main, это будет работать универсально.

Добавлено спустя 5 минут
А что за прога?, если это не фотошоп кинь куда нить я завтра поковыряю, вспомню старые навыки хоть

-----
have a nice day



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


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