Unity D-Assembly - PullRequest
       96

Unity D-Assembly

0 голосов
/ 05 августа 2020

Я пытаюсь перепроектировать свою игру. Игра написана с youtube "Brackeys", у него есть обучающая серия. Куб - это игра, в которой постоянная сила толкает куб, чтобы он проходил мимо объектов. Однако я добавил немного больше функциональности. Сейчас я пытаюсь «сломать свою игру». Я хочу знать, как кто-то мог украсть мой исходный код и защитить его. Я использую dotPeek от JetBrains, теперь собственно вопрос. Когда мы пишем что-то в единстве, это переводится в IL. Для тех, кто наткнулся на эту ветку и кому просто интересно, вот как это выглядит.

// [16 5 - 16 65]
IL_0000: ldarg.0      // this
IL_0001: call         instance class [UnityEngine.CoreModule]UnityEngine.Transform [UnityEngine.CoreModule]UnityEngine.Component::get_transform()
IL_0006: ldarg.0      // this
IL_0007: ldfld        class [UnityEngine.CoreModule]UnityEngine.Transform FollowPlayer::player
IL_000c: callvirt     instance valuetype [UnityEngine.CoreModule]UnityEngine.Vector3 [UnityEngine.CoreModule]UnityEngine.Transform::get_position()
IL_0011: ldarg.0      // this
IL_0012: ldfld        valuetype [UnityEngine.CoreModule]UnityEngine.Vector3 FollowPlayer::offset
IL_0017: call         valuetype [UnityEngine.CoreModule]UnityEngine.Vector3 [UnityEngine.CoreModule]UnityEngine.Vector3::op_Addition(valuetype [UnityEngine.CoreModule]UnityEngine.Vector3, valuetype [UnityEngine.CoreModule]UnityEngine.Vector3)
IL_001c: callvirt     instance void [UnityEngine.CoreModule]UnityEngine.Transform::set_position(valuetype [UnityEngine.CoreModule]UnityEngine.Vector3)
IL_0021: ret

Простая функция, которая преобразует положение камеры, чтобы следовать за игроком. Код функции следующий:

     public Transform player;
 public Vector3 offset;

 private void Update()
 {
   this.transform.position = this.player.position + this.offset;
 }

Итак, как мне узнать, если я не построил игру, очевидно, что это поле «publi c Transform player» принимает ссылка на объект (какой объект)? Сборка должна знать, потому что в противном случае она должна изменить положение моей камеры на основе чего-то еще, например, препятствия.

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

Когда я go обращаюсь к метаданным этой конкретной сборки, я натыкаюсь на кое-что интересное (по крайней мере думаю, что это так).

Я пошел в TypeRef в надежде найти несколько читаемых ссылок, чтобы увидеть, что это преобразование принимает координаты моего Player, а не что-то еще. Далее по строке мы go к TypeReferences, go к классу, который нас интересует,

Во-вторых, мы go к интересующему нас полю, которое, очевидно, является Player. Нас приветствуют некоторой информацией, наиболее важной, на мой взгляд, является доступ к полям атрибутов поля, и там мы натыкаемся на элемент «Управляемый компилятором», на который нельзя ссылаться.

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

...