.Net Native Image 还原的原理和加强保护的方法

简介: 在 net 2.0 中 ngen 能生成 native code 的 image,但是它同时会保留原始程序集的 MetaData 和ILCode 。 这就是还原的关键。同样的,知道了还原方法后加强保护也很容易实现。
在 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 程序的保护,不知道今后是否会出现。

目录
相关文章
|
6月前
|
API 网络安全 数据安全/隐私保护
.NET邮箱API发送邮件的方法有哪些
本文介绍了.NET开发中使用邮箱API发送邮件的方法,包括SmtpClient类发送邮件、MailMessage类创建邮件消息、设置SmtpClient属性、同步/异步发送、错误处理、发送HTML格式邮件、带附件邮件以及多人邮件。AokSend提供高触达发信服务,适用于大规模验证码发送场景。了解这些技巧有助于开发者实现高效、可靠的邮件功能。
|
6月前
|
机器学习/深度学习 算法 网络架构
【CVPR2017】AOD-Net:端到端的除雾网络(原理&实操)
【CVPR2017】AOD-Net:端到端的除雾网络(原理&实操)
1449 0
【CVPR2017】AOD-Net:端到端的除雾网络(原理&实操)
|
6月前
|
开发框架 .NET
ASP.NET Core NET7 增加session的方法
ASP.NET Core NET7 增加session的方法
88 0
|
3月前
|
SQL 缓存 开发框架
分享一个 .NET EF6 应用二级缓存提高性能的方法
分享一个 .NET EF6 应用二级缓存提高性能的方法
|
28天前
|
机器学习/深度学习 编解码 算法
【小样本图像分割-4】nnU-Net: Self-adapting Framework for U-Net-Based Medical Image Segmentation
《nnU-Net: 自适应框架用于基于U-Net的医学图像分割》是一篇2018年的论文,发表在Nature上。该研究提出了一种自适应的医学图像分割框架nnU-Net,能够自动调整模型的超参数以适应不同的数据集。通过2D和3D U-Net及级联U-Net的组合,nnU-Net在10个医学分割数据集上取得了卓越的性能,无需手动调整。该方法强调数据增强、预处理和训练策略等技巧,为医学图像分割提供了一个强大的解决方案。
59 0
【小样本图像分割-4】nnU-Net: Self-adapting Framework for U-Net-Based Medical Image Segmentation
|
1月前
|
存储 开发框架 .NET
浅析.NET6中的await原理
浅析.NET6中的await原理
39 1
|
3月前
|
存储 算法 Java
深入理解.NET中的托管堆及其工作原理
【8月更文挑战第31天】
40 1
|
3月前
|
程序员 数据库
分享 2 个 .NET EF 6 只更新某些字段的方法
分享 2 个 .NET EF 6 只更新某些字段的方法
|
3月前
|
数据库
分享一个 .NET EF 6 扩展 Where 的方法
分享一个 .NET EF 6 扩展 Where 的方法
|
3月前
|
开发框架 前端开发 算法
分享 .NET EF6 查询并返回树形结构数据的 2 个思路和具体实现方法
分享 .NET EF6 查询并返回树形结构数据的 2 个思路和具体实现方法