关于.net assembly的防止反编译和防篡改。
第一个篇blog,呵呵。
看看飞翔的一篇post为程序签名能够保护.net程序不受篡改? ,自己也做过这方面的一些工作,有些体会。
.NET对于分发程序的保护是很脆弱的。对于简单的Assembly,完全可以使用ildasm->remove public key & change any license checking code -> ilasm to dll/exe,实现篡改。对于复杂的Assembly,完全可以使用传统的Crack方法,跟踪内存地址,修改Assembly,为了再防止clr检查strong name,再把framework中的mscorsn.dll给破解了。
想到了framework中带的licensemanger和那套License机制,真的是防君子不防小人,简直就不堪一击,sigh。还有些什么pure managed的xxx license软件,用来作license组件,也是防君子的,在初级cracker手上就不照了。其实想想也是,.net和java最初一样,目标是面向企业应用,不像桌面程序,重点不在这里。
对于reverse-engineered的简单的解决办法就是像飞翔所说,混淆+sn,防止其他人steal your code。试用了一些混淆器,比如vs.net2003里边带的premetive就还不错(专业版),还有remotesoft的protector看起来也挺不错的(可惜一直拿不到试用版,哪位老兄有此荣幸?大家分享分享
)。
对于防篡改和非法使用,则除了需要混淆和签名外,还有大量的工作需要作,如检查framework文件完整性(包括内存中的),系统加载的其他module的完整性,使用emit等技术隐藏关键代码,或者像遇到过的一个软件"codecharge"一样,处处都是检查点(启动软件居然都要检查、写近千个注册表项、检查代码分散在各处、对于检查出来的破解故意做的不稳定,但也不是总是出错......).At last the cracker was driven crazy!![]()
![]()
破解和反破解,始终是魔与道的关系,没有止境。关键还是提高自己的产品质量。
口水话一萝,聊作第一篇。
浙公网安备 33010602011771号