日期:2014-05-18  浏览次数:21330 次

如何让DLL验证自身是否被修改过?
如题,
由于项目相关的东西很多,要用代码混淆会很麻烦,涉及的东西也很多。其他防止反编译的办法也挺不合适目前情况的只能人为的作一些验证和部分的加密。
目前的这个主要DLL希望能验证自身是否被修改过。
请问该如何处理?
具体验证的凭据还没想好,打算用PublicKeyToken或者其他类似的程序集自身的信息。
假如我用PublicKeyToken,可是当我想把它的值写死到程序内部,一编译,PublicKeyToken又变了。
请高人帮忙哦。 NET 2.0的DLL。

------解决方案--------------------
用签名。。。。。
------解决方案--------------------
微软提供了相应的解决方案:延迟签名
------解决方案--------------------
学习
------解决方案--------------------
studying...
------解决方案--------------------
如果你使用的 FCL 版本为 2.0 或以后
可是使用一种被称为 “友元程序集” 的属性来达到目的
他可以规定程序集的调用者必须具备一定的条件
具体的,你可以查看MSDN相关内容
很容易使用
------解决方案--------------------
http://www.cnblogs.com/wagner/archive/2007/04/24/726015.html
可能对楼主有帮助
------解决方案--------------------
看看微软是如何解决的
------解决方案--------------------
进来学习
------解决方案--------------------
你要DLL自己验证自己是否被修改了?........
那强名称不行..

我也来学习一下...
------解决方案--------------------
帮下..
以前也用过强命名...
------解决方案--------------------
学习一下,帮顶!!
------解决方案--------------------
探讨
微软提供了相应的解决方案:延迟签名

------解决方案--------------------
用延迟签名
------解决方案--------------------
进来学习,听说过延迟签名。没有具体用到过。
------解决方案--------------------
如果对方很强,无论你怎么签名加密都是徒劳。
如果对方很弱,无论你写多少注释他们都看不懂。
------解决方案--------------------
自己判断自己是不是被修改过肯定有问题,既然已经被修改了,自然也就可以修改你判断这部分变化的代码。互相验证才是比较保险的。
------解决方案--------------------
vs里面的每编译一次dll,都会有一个新的版本编号,不妨从这方面考虑一下
------解决方案--------------------
探讨
引用楼主 fengyecsdn 的帖子:

假如我用PublicKeyToken,可是当我想把它的值写死到程序内部,一编译,PublicKeyToken又变了。


这个应该是你自己的问题,当一个snk文件确定后,程序集被签名后的PublicKeyToken是固定的,
而别人也没有可能生产一个具有相同PublicKeyToken的程序集
友元程序集就是利用了这一点
至于楼上有兄弟说去匹配程序集的哈希值
建议不要那样做
因为hash值得算法并非固定不变
微软很可能在将来的版本…

------解决方案--------------------
验证自身被修改过?

你是说自己验证自己?

如果你自己都被别人修改了,别人的方法取代了你的方法,你还怎么验证?
------解决方案--------------------
探讨
进来学习

------解决方案--------------------
如果你不加密,你不论怎么验证dll是否被修改,别人都会去修改你用来进行验证的这段代码。最简单地,把判断语句的“==”改为“!=”就跳过去了。
------解决方案--------------------
而且根本不用反编译再重新编译,直接使用汇编找出它的位置修改dll的相应字节(指令)码即可。
------解决方案--------------------
学习
------解决方案--------------------
强名称加签名。
如果说要破解那是没办法的,毕竟底层IL可以被重编译。