Обратный инжиниринг .NET C #, что означает эта строка? - PullRequest
2 голосов
/ 06 марта 2012

У меня следующая строка, полученная с помощью ilSpy

p[var1] = (t[var1] + z.c[var1 % z.c.Length]) % 'Ā';

p, t и c - массив символов [].

мой вопрос: как он может + персонажи? t [var1] + z.c [someNumber] - 2 символа, а затем он модулирует результат с числом «A» в конце.

Ответы [ 3 ]

4 голосов
/ 06 марта 2012

char является целочисленным типом, как и int и long, поэтому вы можете сложить их вместе и использовать % для значения экземпляра char.

Так же, как вы можете добавить int s и % их.

Это объясняет, почему вышеприведенный работает .

Что это означает - это другой вопрос, и он не так очевиден.Это может быть char, который использовался из-за его диапазона, но используется как целочисленный тип.Хладнокровно, что это функция, которая преобразует символы нижнего регистра в верхний регистр (или наоборот), но без большего контекста невозможно сказать.

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

0 голосов
/ 06 марта 2012

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

Код Ā (U + 0100, латинская заглавная буква A с макроном) равен 256, что говорит о том, что t, c и p представляют некоторую строку в однобайтовой кодировке, например как ASCII. Тогда код, который вы получили от ilSpy, имеет смысл. Например (я только что переименовал t, c и p):

encrypted[index] = (source[index] + z.passPhrase[index % z.passPhrase.Length]) % 256;

Здесь у нас есть простой шифратор, который циклически добавляет парольную фразу в исходную строку.

0 голосов
/ 06 марта 2012

Если вы добавляете символы, вы фактически вызываете оператор Int +, потому что сложение не определено для char. По сути, символы также являются числовыми значениями (просто отображаются по-разному), так что это не проблема. Он, вероятно, модифицирует результат с помощью 'Ā' (числовое значение: 256), чтобы результат находился в диапазоне 1-байтового символа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...