首页 新闻 搜索 专区 学院

两个问题,拜托了。

0
悬赏园豆:50 [已解决问题] 解决于 2008-06-23 10:51
<P>没有分了,所以给了50,实在不好意思啊。</P> <P>&nbsp;问题一:</P> <P>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; static private bool ValidatePublicKeyToken()<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; StringBuilder sPublicKeyToken = new StringBuilder();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; byte[] baPublicKeyToken = Assembly.GetEntryAssembly().GetName().GetPublicKeyToken();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; foreach (byte b in baPublicKeyToken)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sPublicKeyToken.AppendFormat("{0:x2}", b);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if ("52b73f80d00d732b" == sPublicKeyToken.ToString())<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return true;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return false;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</P> <P>&nbsp;用上面这段代码来验证DLL,以防止非法调用。这样验证的话用反射还能不能非法调用呢?</P> <P>PublicKeyToken能仿制吗?我用的.net 2.0</P> <P>&nbsp;</P> <P>&nbsp;</P> <P>&nbsp;</P> <P>问题二:</P> <P>这段代码 int a=10;</P> <P>在VC6(我记得是)中输入最后的;后代码会变成 int a = 10;</P> <P>为什么在VC++2008 pro 中输入最后的;就不能变成int a = 10;这样了。该怎么设置啊?</P>
问题补充: 对不起,问题一少问了一句。 请问用同一个snk签名的程序集的PublicKeyToken 都一样吗?
JieNet的主页 JieNet | 初学一级 | 园豆:0
提问于:2008-06-16 21:05
< >
分享
最佳答案
0
先回答第二个问题: Tools->Options->Text Editor->C#->Formatting->Spacing中有是否插入空格的设置。但是,不知道为什么C++下面没有。 第一个问题: Zealic说的有道理,只能通过deerchao提到的加壳的方式来提高破解的难度。另外,如果你的程序集进行了强签名。理论上用户无法伪造。除非他偷到你的snk文件。 因此,你只需要在你的代码中进行多次PublicKey的验证,也可以很大的提高用户破解的难度。 反破解和反跟踪也有很多技巧,总之是通过降低你的代码的可读性来实现的。因此适可而止。
Colin Han | 老鸟四级 |园豆:3041 | 2008-06-17 13:17
其他回答(3)
0
问题二, “在语句结束时格式化代码”
沙加 | 园豆:3680 (老鸟四级) | 2008-06-16 21:26
0
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 都一样吗
Zealic | 园豆:200 (初学一级) | 2008-06-17 10:09
0
关注这个问题,等待snk签名牛人解答
风海迷沙 | 园豆:4453 (老鸟四级) | 2008-06-17 10:16
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册