欢迎光临 Rick 's BLOG
日志首页  | C# .Net编程  | 原创作品  | 生活点滴  | C\C++相关  | 多媒体相关※ERMP  | VB相关  | 其它运维与编程  |  留言簿
native compile 保护的dotNet本地程序还原成dotNet IL程序集 .Net 加密原理,方法体加密信息对应关系的实现(一)
未知  .Net Native Image 还原的原理和加强保护的方法
[ 发布日期:17年前 (2007-08-30) ]   [ 来自:rick@博客园 ] [分类:原创作品]
在 net 2.0 中 ngen 能生成 native code 的 image,但是它同时会保留原始程序集的 MetaData 和ILCode 。
这就是还原的关键。同样的,知道了还原方法后加强保护也很容易实现。

ni 文件中的元数据和普通元数据相比多包含了一个 NativeHeader。
在 NativeHeader 中第12个入口是 OrgMetaData的 RVA和Size,第13个入口是 OrgILcode的 RVA 和Size。


我是一个偶然机会发现ni包含原始metadata,然后强制方法重新进入Jit,截获IL代码。
根据查找到的OrgMetaData的 RVA 和 Size 我在 NativeHeader 中找到了一个匹配的,再根据截获的IL的RVA,
推测出它下面的那个RVA和Size可能是OrgILCode的,经测试果然是这样。
OrgMetaData中的每个方法对应一个RVA值,这个值 加上 OrgILCode的RVA就是实际RVA了。

这样提取出MetaData和ILCode就可以还原了。

要加强保护也容易,擦除 ILCode 就行了,因为net 2.0 ngen生成的 ni 文件真正包含了 native code,可以不需要 ILCode 运行。

ngen保护方式有一个遗憾,就是发布时需要附带一个虚拟框架环境。

我写了一个小工具来实现这种 ngen 的保护,不过我还没有自己实现虚拟框架环境,直接使用了 fetion程序里面的那个虚拟框架环境来运行ngen保护的文件。

这样处理后的ni文件能100%防止 IL代码泄露,不过美中不足的是抗破解能力比较差,ngen后native代码的位置就都固定了,不会变化,相当于win32程序裸奔。

目前还没有第三方工具能实现对这种 native 程序的保护,不知道今后是否会出现。
引用通告地址 (0):
复制引用地址https://www.rickw.cn/trackback/196
复制引用地址https://www.rickw.cn/trackback/196/GBK
[ 分类:原创作品  | 查看:3380 ]

暂时没有评论,快来发表一个评论吧。
发表评论
作者:   用户:[访客] 
评论:

表  情
禁止表情 | 禁止UBB | 禁止图片 | 识别链接
对不起,你没有权限上传附件!
验证:
 
PoweredBy R-Blog V1.00 © 2004-2024 WWW.RICKW.CN, Processed in second(s) , 7 queries    京ICP备17058477号-5