有些加壳工具可能不兼容某些程序,导致加壳后出现异常。可以尝试使用其他加壳工具或者升级加壳工具版本。
NET加壳是对.NET程序进行保护的一种方式,主要目的是防止程序被破解或者修改。加壳可以将.NET程序中的元数据和IL代码,通过加密、压缩和混淆等技术,使得程序难以被反编译或者解密。
1.xml 文件少,内容也不多,常用于存储程序初始化的参数,可以将xml内容全部读取到内存里面,程序在运行过程中取内存,当程序要退出时,再保存到此xml中,如果此时xml文件不存在,可以重新创建;2.如果xml文件数量较多,内容也很大,常用于存代替部分数据库,可将这些文件放置在程序运行的目录底下,程序运行过程中取不到文件,则提示**文件被删除,程序将终止,如果内容被修改,则按修改后内容更新相应的参数;
3.如果只考虑不希望被修改,可以加密xml文件,程序需要时再解密;
4.不应花太多系统资源来限制文件不被删除,如果只考虑当被删除时出现提示并进行必要的自我保护,比如强制退出程序;
5.如果一定要考虑不允许删除、不允许修改,可了解一下病毒、木马程序的实现方式。
本文主要介绍一些dotNet加密保护工具的原理以及就其脱壳进行简单探讨 remotesoft protector maxtocode Net Reactor Cliprotector themida Net xenocode native piler DNGuard remotesoft protector 应该是一款比较老的 net加密保护工具了 看其官方网站似乎还是 年更新过 该软件没有提供试用版下载 相关资料比较少 去年接触过一个该软件保护的 Net程序 加密后的程序发布时需要附带native 的 dll 这款壳可以算是jit层的壳 是jit wrap 模式 通过hook getJit函数 拦截 jit 请求 在每次发生jit请求时其运行库会将加密的程序集完全 原地 解密还原 特点 整体解密 脱壳 拦截地层jit请求 然后中断 这时程序集已经完全解密 直接pe dump就行了 maxtocode 这个大家应该比较熟悉了 和 remotesoft protector 应该时前后脚起步的关系吧 其 x x x和 内核有很大差别 特点 单方法体解密 maxtocode x 版本没有用过 不过DST组的菩提曾经写过 maxtocode x 的脱壳机 maxtocdoe x 其内核是EE层 单方法体 原地 解密 编译之后再擦除解密的代码 脱壳 因为是 原地 解密 所以方法体代码逃不过profile的 可以在profile里面记录每个方法体 然后填充到文件中 方法二 nop 调 其内核 的擦除代码 这个不用修改其内核文件 只要还原 mscorwks dll 中其hook的第二处地方即可 这样方法体解密后就在内存中了 所有方法invoke一面 直接pe dump即可 maxtocode x 这个版本接触得比较多 我接触的第一个maxtocode版本就是 这一版其内核相对 x变动比较大 方法体已经不是原地 解密的了 也就是说profile已经不能监视到其il代码了 这算是一个巨大的进步吧 x的内核基本上是一样的 只是后续的版本针对反射做了一些小动作 脱壳 直接反射 修复后反射 方法二 直接调用其内核的解密函数进行脱壳 简单快速 maxtocode 企业版 Jit层内核 其在 ee 层和 jit层均安装了多处 hook 其内核在前面的文章里面有详细介绍 脱壳 因其jit层内核的漏洞 可以用简单的方式还原方法体 Hook Jit 后可以简单的进行方法体还原完成单个方法的脱壳 把每个方法都脱一面 填回文件即可 Net Reactor 一款很特别的 net加密壳 它有两种模式 application 和 library 第一种模式 是程序整体加密 然后创建一个native的loader 整体加密的脱壳很简单 dump 内存即可 第二种模式 加密后的程序集也要带一个native的dll 和maxtocode一样 加了很多静态构造函数 一个startup函数 但是在 startup函数调用后 即完成了程序集的全部 原地 解密 所以运行后直接dump内存就可以了 脱壳 直接pe dump CliProtector 一款jit层的加密壳 大概是去年年底发现的 当时我在进行DNGuard 的开发 经分析后发现其内核模式和当时DNGuard 的jit层内核很相似 分析后不久就发现了其jit层内核处理的一个漏洞 可以用简单的方式还原方法体 也就是最近在maxtocode 企业版中发现的那个 在我的DNGuard 中对这个漏洞进行了预防处理 个人感觉其模式兼容性比maxtocode 企业版要好 只是可惜 它除了有jit层漏洞 还偷了赖 IL代码没有加密 和我出的dnguard demo一样 只是把 il搬了一下位置 没有加密 不过对于jit层脱壳来说加不加密倒无所谓了 但这样可能导致破解者从另一个角度去脱壳了 特点 单方法体解密 脱壳 Jit hook 简单方法体还原 同maxtocode 企业版的脱壳方式 方法二 分析其加密文件结构 直接还原(因其il代码没有加密 可以不用考虑解密算法的研究) themida Net themida 是win 的一个强壳 它支持 Net的加密 其加密方式是整体加密 但是凭借其win anti的优势 相比其它整体加密的加密工具来说强度要高一点 不过也就仅仅那么一点 脱壳 过anti pe dump xenocode native piler xenocode 的专长是混淆保护 不过它也提供了一个所谓的生成本地代码的功能 其生成本地代码其实就是把 程序集打包 创建一个native loader 但是它的打包把framework都包进去了 也就是说打包后的程序可以在没有安装framework的机器上直接运行 代价是生成的文件体积非常大 因为它把十几兆的framework包进去了 脱壳 直接pe dump 方法二 分析其打包的文件格式直接解包(已有工具) DNGuard 内核模式同 maxtocode x 脱壳方式也雷同 DNGuard Jit层内核 同maxtocode 企业版和CLIProtector 相比少了一个漏洞 不能用简单方式还原方法体 如果破解者对jit内核工作非常熟悉 也能从jit层的结构体中重构出方法体 脱壳 Jit hook 结构体重构模式 总结 以上除了 maxtocode x DNGuard CLiProtector 外 其它工具加密的程序都存在profile漏洞 可以通过profile获取代码 综合兼容性和强度 CLiProtector 和 maxtocode 企业版 要好一些 DNGuard 的强度好一些 兼容性比较差 就只支持 v 的framework DNGuard新版已经开始采用兼容全部framework的模式了 上面的所有工具加密的程序集 都可以直接在jit层中截获 IL字节码 IL字节码不是方法体 它是方法体的一部分 只取得il字节码无法完成脱壳工作 但是已可反为MSIL汇编代码 进行算法分析了 DNGuard HVM的目标就是不让jit层截获可分析的IL字节码 lishixinzhi/Article/program/net/201311/11563
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)