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

 eXeL@B —› Программирование —› [Unity WebPlayer] Загрузить dll с диска.
Посл.ответ Сообщение

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

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

Здравия. У меня мозги закипают.

Задачка такова, перенаправить загружаемую с инета дллку на локальную.

Конечный код такой -> http://privatepaste.com/d298b23780 (берегите глаза)

Не работает. В отладчике всё окей, всё загружается, всё return MONO_IMAGE_OK. Потом где то в недрах возникает ошибка чтения. Отследить как ошибка вылетает я не смог.

Может кто то встречался с такой задачей, можете подсказать в чём проблема?




Ранг: 110.8 (ветеран), 104thx
Активность: 0.090.01
Статус: Участник

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

что значит "перенаправить загружаемую с инета дллку на локальную" ??

vovanre пишет:
Конечный код такой -> http://privatepaste.com/d298b23780 (берегите глаза)


Рипнутый код не говорит ниочем.



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

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

Rainbow пишет:
что значит "перенаправить загружаемую с инета дллку на локальную" ??

Юнити грузит с сервера дллку (Assembly-CSharp.dll), далее грузит её в Mono через mono_image_open_from_data_with_name, ну а потом уже игра запускается.

Моя задача, что бы Юнити загрузило мою Assembly-CSharp.dll вместо того, что бы её грузить её с сервера.


Полный код -> http://privatepaste.com/ec38f0dc93




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

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

vovanre
это принципиально не дать ей грузить что-то с сервера? просто хукнуть LoadLibrary какой-нибудь, через что она работает, и подменить имя либы. сомнительно, что в юнити организована загрузка либ собственным методом, типа из памяти

добавлено: тады ждать, пока кто-то из .net-гуру глянет топик

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




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

Создано: 21 ноября 2014 10:44 · Поправил: vovanre
· Личное сообщение · #5

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

Поверьте, они грузят с памяти, я это уже хорошо изучил. Тут пару моментов:


1) Это .Net либа.
1.1) Так как это .net, алго загрузки совершённо другой.
2) Я и хукнул, но моно не кушает по неизвестной мне причине.

(я уже подумываю найти сурсы этой версии моно и перекомпилить, но так и не нашёл какую версию юзает юнити.)




Ранг: 748.2 (! !), 390thx
Активность: 0.370
Статус: Участник
bytecode!

Создано: 21 ноября 2014 13:00 · Поправил: 4kusNick
· Личное сообщение · #6

vovanre
Unity использует свою, модифицированную версию Mono. Причём база у неё довольно старая.

Assembly-CSharp.dll содержится в webplayer сборке (.unity3d файл). Эти сборки можно редактировать, в том числе, можно заменить там этот файл и подсунуть браузеру уже пропатченную сборку.
Если такой workflow не подходит, то можно попробовать патчить или полностью подменять dll в памяти, но это уже посложнее.

-----
Флэш, ява, дотнет - на завтрак, обед и ужин. Unity3D на закуску.




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

Создано: 21 ноября 2014 15:08
· Личное сообщение · #7

4kusNick пишет:
Если такой workflow не подходит, то можно попробовать патчить или полностью подменять dll в памяти, но это уже посложнее.

Стоп. Вот это решит массу моих проблем.
Можно редактировать отдельные участки кода (это я умею через сигны) или полностью перезагружать dll ?




Ранг: 110.8 (ветеран), 104thx
Активность: 0.090.01
Статус: Участник

Создано: 21 ноября 2014 15:12 · Поправил: Rainbow
· Личное сообщение · #8

vovanre пишет:
Поверьте, они грузят с памяти, я это уже хорошо изучил.


По логике вещей, если софт грузит либу из памяти - его код должен содержать функцию VirtualLoadLibrary. Собсно, если ты уже изучил этот код, то по идее знать должен где она находится. Можно попробовать ее направить на обычный LoadLibrary, как посоветовал AJAX. .NET сборки просто используют свой формат, который в свою очередь содержит точку входа в MSIL, если я правильно понимаю. Какая по сути разница, будет у нее 2 OEP (PE OEP + MSIL OEP) или одно (PE)? Думаю должно сработать.



Ранг: 105.6 (ветеран), 69thx
Активность: 0.060
Статус: Участник

Создано: 21 ноября 2014 15:25
· Личное сообщение · #9

vovanre Что-то я никак понять не могу чего ты хочешь добиться. В Assembly-CSharp.dll находится основной код веб-приложения. Эта dll находится внутри unity3d-файла. Нафига нужно городить огород, если можно просто заменить эту либу внутри unity3d-файла. После чего именно она будет грузиться.




Ранг: 748.2 (! !), 390thx
Активность: 0.370
Статус: Участник
bytecode!

Создано: 21 ноября 2014 21:12
· Личное сообщение · #10

vovanre пишет:
Можно редактировать отдельные участки кода (это я умею через сигны) или полностью перезагружать dll ?

Отдельные участки точно можно - в сети видел примеры инжекта своего кода в mono сборку, уже подгруженную в память ну и всякие AoB патчи для Cheat Engine по тому же принципу работают.

На счёт полной подмены Assembly-CSharp.dll - такого я не видел, и не уверен что это вообще реально, наверное тут я загнул =) Всё-таки это основная либа, а не второстепенная, потому эффективно подменять её надо в момент подгрузки, что вы собственно и пытаетесь сделать.

Но я до сих пор не понимаю ваших целей, возможно такой огород там не к чему и как мы с JohnyDoe уже писали, вероятно будет проще просто подменить dll в самой сборке, автоматизировав этот процесс для массового потребителя при необходимости.

-----
Флэш, ява, дотнет - на завтрак, обед и ужин. Unity3D на закуску.




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

Создано: 21 ноября 2014 21:20
· Личное сообщение · #11

4kusNick пишет:
вероятно будет проще просто подменить dll

Я наверно очень туплю. Но как подменить либу в сборке, если эта сборка каждый раз с нета грузитья?

Добавлено спустя -59 минут
4kusNick пишет:
в сети видел примеры инжекта своего кода в mono сборку

Увы это не прокатит.




Ранг: 748.2 (! !), 390thx
Активность: 0.370
Статус: Участник
bytecode!

Создано: 21 ноября 2014 23:11
· Личное сообщение · #12

vovanre пишет:
Я наверно очень туплю. Но как подменить либу в сборке, если эта сборка каждый раз с нета грузитья?

Так пропатченную сборку можно легко подсовывать вместо оригинальной. Либо руками в кэше заменять, либо через какой-нибудь Charles (там есть такая фича - map local - может подсовывать локальный файл вместо оригинального).

-----
Флэш, ява, дотнет - на завтрак, обед и ужин. Unity3D на закуску.




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

Создано: 22 ноября 2014 00:23
· Личное сообщение · #13

4kusNick пишет:
Либо руками в кэше заменять

Если ты говоришь об этом кеше \Unity\WebPlayer\mono то там чисто.
4kusNick пишет:
Charles

В первую очередь побывал, Charles не видит передачи файла.




Ранг: 748.2 (! !), 390thx
Активность: 0.370
Статус: Участник
bytecode!

Создано: 22 ноября 2014 05:10
· Личное сообщение · #14

vovanre пишет:
Если ты говоришь об этом кеше \Unity\WebPlayer\mono то там чисто.

Не, я про кэш браузера.

vovanre пишет:
В первую очередь побывал, Charles не видит передачи файла.

Попробуйте обновить его до последней версии и использовать в связке с последней версией Firefox.
Я только что проверил - все вроде работает, как и раньше. Проверял на этой демке: http://unitysunshine.com/demo

Вот сборка отловилась: http://i.imgur.com/7jy45aS.png

-----
Флэш, ява, дотнет - на завтрак, обед и ужин. Unity3D на закуску.




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

Создано: 22 ноября 2014 13:49
· Личное сообщение · #15

4kusNick пишет:
Я только что проверил - все вроде работает,

Странно, на хроме не ловило, а лисе ловит.

Случаем альтернатив нет ибо автоматизировать будет муторно?




Ранг: 748.2 (! !), 390thx
Активность: 0.370
Статус: Участник
bytecode!

Создано: 22 ноября 2014 14:24
· Личное сообщение · #16

Мне пока таких средств хватало, не было необходимости весь процесс автоматизировать
Но, как вариант, если есть хорошие познания в нативе, то наверное можно сам WebPlayer хукать, чтобы он палёную .unity3d сборку грузил вместо оригинала. Я точно не знаю как он сборку подгружает, так что возможно это не сработает, просто идея.

-----
Флэш, ява, дотнет - на завтрак, обед и ужин. Unity3D на закуску.




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

Создано: 25 ноября 2014 23:07
· Личное сообщение · #17

Наконец появилось время нормально заняться этим.

Нашёл функцию в webplayer_win которая за загрузку отвечает и восстановил прототип (кому надо скину в лс).

Но я не могу нормально продебажить свой код, что то паранормальное.
Смотрим -> Вот прыжок на мой хук ->


Адрес прыжка -> 74494920 -> Нажимаем F8 ->


Может я чего то не понимаю?




Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 26 ноября 2014 10:37
· Личное сообщение · #18

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

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


Ранг: 681.5 (! !), 405thx
Активность: 0.420.21
Статус: Участник
ALIEN Hack Team

Создано: 26 ноября 2014 12:48
· Личное сообщение · #19

А какой charles есть последний покряканый?

-----
Stuck to the plan, always think that we would stand up, never ran.





Ранг: 748.2 (! !), 390thx
Активность: 0.370
Статус: Участник
bytecode!

Создано: 26 ноября 2014 14:19
· Личное сообщение · #20

ARCHANGEL
На руборде в последнем сообщении рабочая пара лежит, её пока вроде не забанили в последних версиях.

-----
Флэш, ява, дотнет - на завтрак, обед и ужин. Unity3D на закуску.




Ранг: 33.4 (посетитель), 24thx
Активность: 0.020
Статус: Участник

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

4kusNick
4kusNick пишет:
не забанили в последних версиях


банан не сложно патчится


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


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