[已解决问题] 两个问题,拜托了。
提问时间: 2008-06-16 21:05
悬赏分:50 浏览:348 次

没有分了,所以给了50,实在不好意思啊。

 问题一:

            static private bool ValidatePublicKeyToken()
        {
            StringBuilder sPublicKeyToken = new StringBuilder();
            byte[] baPublicKeyToken = Assembly.GetEntryAssembly().GetName().GetPublicKeyToken();
            foreach (byte b in baPublicKeyToken)
            {
                sPublicKeyToken.AppendFormat("{0:x2}", b);
            }
            if ("52b73f80d00d732b" == sPublicKeyToken.ToString())
                return true;
            return false;
        }

 用上面这段代码来验证DLL,以防止非法调用。这样验证的话用反射还能不能非法调用呢?

PublicKeyToken能仿制吗?我用的.net 2.0

 

 

 

问题二:

这段代码 int a=10;

在VC6(我记得是)中输入最后的;后代码会变成 int a = 10;

为什么在VC++2008 pro 中输入最后的;就不能变成int a = 10;这样了。该怎么设置啊?

提问者:JieNet - 初学一级

问题补充:对不起,问题一少问了一句。

请问用同一个snk签名的程序集的PublicKeyToken 都一样吗?

最佳答案
先回答第二个问题: Tools->Options->Text Editor->C#->Formatting->Spacing中有是否插入空格的设置。但是,不知道为什么C++下面没有。 第一个问题: Zealic说的有道理,只能通过deerchao提到的加壳的方式来提高破解的难度。另外,如果你的程序集进行了强签名。理论上用户无法伪造。除非他偷到你的snk文件。 因此,你只需要在你的代码中进行多次PublicKey的验证,也可以很大的提高用户破解的难度。 反破解和反跟踪也有很多技巧,总之是通过降低你的代码的可读性来实现的。因此适可而止。
2008/6/17 13:17:19 回答者:Colin Han


提问者对于答案的评价:3q
其它回答(3)
问题二, “在语句结束时格式化代码”
5个月前   回答者:沙加 - 老鸟四级
1.可以非法调用,比如你的 DLL 为 a.dll,非法调用者为 app.exe,理论上说,app.exe 是无法通过你上述代码的检测的,因为它几乎不可能与 a.dll 有相同的 token,但是可以通过曲线救国的方式来调用你的 dll。 a.反编译为 il 然后去除验证代码,重新编译。 b.通过 CLR Profiling 伪造 GetPublicKeyToken 的返回值。 c.查找你程序集中的漏洞或扩展点,通过你的程序集中的方法、委托作为入口程序集,间接执行他的程序。这样 GetEntryAssembly 返回就是你自己的程序集。 2.不太熟悉,看了下选项,貌似没有 C++ 的代码格式化功能,或者说,格式化功能过于简单。 3.用同一个 snk 签名的程序集 Token 是一样的。 同一个snk签名的程序集的PublicKeyToken 都一样吗
5个月前   回答者:Zealic - 初学一级
关注这个问题,等待snk签名牛人解答
5个月前   回答者:风海迷沙 - 小虾三级
评论
5个月前   JieNet :
回答者:沙加 - 老鸟四级

您好,非常感谢您的回答,但是我怎么找不到“在语句结束时格式化代码”这选项啊。
还有问题2问的是在VS2008中写C++代码如何像C#那样自动设置代码格式。
   您需要登录以后才能回答!
 

我要提问

我的问题


快到期问题



> 问题排行榜

相关内容

相关链接