.NET强签名及混淆解决方案

来源:互联网 发布:中国招标软件 编辑:程序博客网 时间:2024/06/08 08:52
.NET强签名及混淆解决方案
前提是程序已经开发完成。
(一)强签名处理:
1)生成公钥/私钥对
   sn -k ObarKeyPair.snk
2)提取出公钥并存放在public.snk中。public.snk的目的是为了便于分发;在ObarKeyPair.snk中的私钥是无法提取出来的
  sn -p ObarKeyPair.snk public.snk
3)对第三方组件进行强签名处理,否则无法编译通过
1.反编译第三方组件资源,目前项目中使用的第三方组件包括SmartThreadPool和log4net
反编译时可以先跳转到组件所在目录 cd /d {$dir}
ildasm SmartThreadPool.dll /out:SmartThreadPool.il
反编译之后得到SmartThreadPool.il和SmartThreadPool.res
2.为第三方组件增加强签名处理
ilasm SmartThreadPool.il /res:SmartThreadPool.res /dll /key:ObarKeyPair.snk /out:SmartThreadPool.dll
4)对当前项目中需要进行强签名的项目增加public.snk公开签名
1.勾选延迟签名,目的是为了在混淆之后进行重新签名
2.重新编译项目, 此时所有的项目都无法进行执行或者调试
(二)混淆处理
1)使用Dotfuscator Software Services社区版对组件或者可执行程序进行混淆
1.社区版不支持泛型,因此跳过对泛型的重命名操作
(三)再次强签名处理
1)对之前强签名时使用了公钥进行的组件进行再次签名,应该能做成批处理文件
举例:
sn -R BLL.dll ObarKeyPair.snk
sn -R CmdResultParser.dll ObarKeyPair.snk
sn -R ControlExtensions.dll ObarKeyPair.snk
sn -R DAL.dll ObarKeyPair.snk
sn -R IDAL.dll ObarKeyPair.snk
sn -R Model.dll ObarKeyPair.snk
sn -R ObarAPI.dll ObarKeyPair.snk
sn -R OBARUtil.dll ObarKeyPair.snk
sn -R XmlCmd.dll ObarKeyPair.snk
sn -R E-OBAR.exe ObarKeyPair.snk
2)完成强签名之后就可以正常的运行程序了
(四)利用反射工具或者反编译工具可以看到代码已经进行了混淆
1).结果代码得到了混淆了
2).发现强签名之后进行混淆操作,公开函数也被混淆了。这个有点奇怪
3).强签名后替换DLL会发生程序集版本调用异常