逆向工程.NET C#这行是什么意思?

时间:2012-03-06 11:11:53

标签: .net c#-4.0 reverse-engineering ilspy

我使用ilSpy检索了以下行

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

p,t和c是char array []。

我的问题是:他怎么能+人物? t [var1] + z.c [someNumber]是2个字符,然后他在结尾处用数字'A'对结果进行模块化。

3 个答案:

答案 0 :(得分:4)

char是一种整数类型,就像intlong一样,因此您可以将它们一起添加并使用%来表示char的值实例。

与您添加int%的方式相同。

这解释了上述的工作原理

意味着什么是一个不同的问题,并不是那么明显。它可能是由于其范围而使用char,但是用作整数类型。很冷,这是一个将小写字符转换为大写字母的函数(反之亦然),但如果没有更多的上下文,则无法分辨。

您正在使用的反编译器完全有可能误解(或无法完全解释)IL并向您展示与IL等效的内容,但这与原始代码不同。

答案 1 :(得分:0)

如果添加字符,则实际上是调用Int运算符+,因为未在char上定义添加。基本上,字符是数值(只是以不同的方式显示),所以这没问题。他可能用'Â'(数值:256)修改结果,以便结果在1字节的char范围内。

答案 2 :(得分:0)

作为Oded pointed out,ilSpy检索到的表达式在语法上是有效的,但我认为原始代码是不同的。

Ā(U + 0100,拉丁大写字母A与Macron)的代码为256,表明tcp代表某些代码字符串采用单字节编码,如ASCII。那么你从ilSpy获得的代码确实有意义。例如(我刚刚重命名为tcp):

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

这里我们有一个简单的加密器,它会循环地为原始字符串添加一些密码。