一段防止反编译的代码(托管代码),看能不能防主
有空看看:
有兴趣的朋友来攻克一个难关
请看下面的代码:
using System;
using System.Text;
using System.Text.RegularExpressions;
using System.Web.Mail;
using System.Threading;
namespace NewDemo
{
class A
{
private string p = "y";
private string p1="*";
private string p2="&";
private string p3="&d*";
private string p4="#a";
private string p5="k";
private string p6="#|";
private string p7="{";
private string p8="d+";
private string p9="_7";
private string p10="+";
private string p11="]";
private string p12="}";
private string p13="-1";
private string p14="?";
private string p15="9";
private string p16="c";
private string p17="u";
private string p18="<";
private string p19="_xi";
private string p20="1&";
private string p21="op";
private string p22=".";
private string p23="yan";
private string p24="";
public string Password()
{
return p24 + p24 + p23 + p19 + p13 + p24 + p24 + p15 + p2 + p1 + p24 + p24;
}
}
class Demo
{
static void Main()
{
A a = new A();
Console.WriteLine( a.Password() );
return;
}
}
}
现在如果没有源代码,只有一个exe,当然不会有console.writeline这一行了。
你能不能得出 Password() 的返回值?
当然这个exe被混淆了。
混淆结果如下:
namespace NewDemo
{
using System;
internal class a
{
// Methods
public a()
{
this.a = "y";
this.@as = "*";
this.@as = "&";
this.@as = "&d*";
this.@as = "#a";
this.@as = "k";
this.@as = "#|";
this.@as = "{";
this.@as = "d+";
this.@as = "_7";
this.@as = "+";
this.@as = "]";
this.@as = "}";
this.@as = "-1";
this.@as = "?";
this.@as = "9";
this.@as = "c";
this.@as = "u";
this.@as = "<";
this.@as = "_xi";
this.@as = "1&";
this.@as = "op";
this.@as = ".";
this.@as = "yan";
this.@as = "";
}
public string Password()
{
string[] textArray1 = new string[] { this.@as, this.@as, this.@as, this.@as, this.@as, this.@as, this.@as, this.@as, this.@as, this.@as, this.@as, this.@as } ;
return string.Concat(textArray1);
}
// Fields
private string a;
private string @as;
private string @as;
private string @as;
private string @as;
private string @as;
private string @as;
private string @as;
private string @as;
private string @as;
private string @as;
private string @as;
private string @as;
private string @as;
private string @as;
private string @as;
private string @as;
private string @as;
private string @as;
private string @as;
private string @as;
private string @as;
private string @as;
private string @as;
private string @as;
}
}
这就是混淆结果
你能知道password为多少?
我的目的就是为了防止反编译(当然绝对的防止是不可能,做到要花很大的力气就可以了),讨论一下能不能比较容易的被破解,如果那样的话,我将做进一步的修改