.net 的商业软件如何做到不被其他人逆向出源码? 楼主目前工作遇到一个甲方希望自己的.net 商业软件无法被逆。 楼主多方打听了几个好基友,搞二进制的大佬,他们对.net 这方便也是比较接触的少,问了几家安全公司也几乎没搞加固.net 这方面的产品。
所以我想问下大家,或大家所在的公司开发的.net 商业软件是如何加壳和混淆代码的?
![]() | 1 phantomer OP LZ 也给几个二进制大佬给的方案给了客户看,但是客户做依旧是可以被清楚的逆回来,看到源码 |
2 Cbdy 2017-04-22 20:48:12 +08:00 via Android 之前在 v 站看到过 Java 软件反逆向工程的讨论,可以去找来参考一下 我感觉无外乎动中间码,动编译器和运行时了 |
3 xenme 2017-04-22 20:48:18 +08:00 via iPhone 先混淆名称,即使逆向完,看起来也头疼 |
![]() | 4 sun1991 2017-04-22 20:48:47 +08:00 keyword: .net obfuscator, 增加逆向难度. 要不考虑核心算法用 C 写. |
![]() | 5 coderfox 2017-04-22 20:49:53 +08:00 via Android 用 CoreCLR ,修改文件解析部分做加密。 可以参考腾讯做 Unity 加密的过程,以及 KLab 做 lua 加密的过程。 |
![]() | 6 liyvhg 2017-04-22 20:50:30 +08:00 via Android 加多层壳上硬件 key 授权、上网络认证 然而都没有好的办法防破(和楼主的想法可能有点出入) .net 是否是一种运行时解析的语言? |
![]() | 7 JustFuckingDoIt 2017-04-22 20:50:32 +08:00 混淆 |
![]() | 8 JustFuckingDoIt 2017-04-22 20:52:18 +08:00 检测逆向工具,发现就崩溃或者格硬盘 |
![]() | 9 lany 2017-04-22 20:53:03 +08:00 DNGuard 能起到一部分作用 |
![]() | 10 h4x3rotab 2017-04-22 20:56:18 +08:00 混淆、加猛壳。关键代码能放服务器就放服务器,不能可以考虑用 c++写。 |
![]() | 11 Pyjamas 2017-04-22 21:05:59 +08:00 混淆、反调试,目的在于增加逆向成本,当逆向成本过大的时候人家就不会来搞你了。 无法被逆感觉不可能啊 |
![]() | 12 Mutoo 2017-04-22 21:08:57 +08:00 商业应用可以考虑硬件加密狗咯,关键代码放到加密狗里,其它部分被逆向也没什么用。 |
![]() | 13 typcn 2017-04-22 21:12:27 +08:00 90% 以上的工具全是垃圾,没什么用处 我觉得唯一有难度的就是 DNGuard ,免费版也没用,那个商业版开了 HVM 之后效果非常强,之前遇到一软件,搞了一周多没搞定。 |
![]() | 14 kokutou 2017-04-22 21:31:15 +08:00 via Android 搜索 任意加密工具的名字 + 看雪 就知道大概的强度了。。。 |
15 Magentaize 2017-04-22 22:13:20 +08:00 用 IL 写,逆向出来是不能被 MSBuild 编译的 |
![]() | 16 hjc4869 2017-04-22 22:16:24 +08:00 这种需求一般混淆一下让逆出来的代码不可维护就差不多了吧 |
17 neoblackcap 2017-04-22 22:19:16 +08:00 纵观各家的解决方案,我认为还是硬件狗最实际,而且最好是要求客户签 EULA , EULA 里面写明不允许逆向否则走法律途径。 |
![]() | 18 visonme 2017-04-22 22:41:30 +08:00 ![]() 三四年前看雪论坛的关于 net 的安全讨论还是很火的,上面也有不少这方面的资料,楼主可以搜搜,或许能找到一些有用的东西。(记得看雪某牛还出了本关于 net 安全的书,也可以看看,有几年了) 说说自己以前公司的做法吧。 1. 加壳 /混淆是肯定的,买商业软件,这些钱省不得。 2. 对于部分核心的代码,自己内部做加密混淆或者模糊处理。 3. 不要直接启动 net 主程序,通过 shel (一个简单的 exe 应用) l 来启动, shell 的作用就是做到一个环境的检测(我们那时候主要做调试环境和相关进程的检测)。 4.通过 hack 技术,主要通过 hook 部分底层函数。 |
19 czkwg8 2017-04-22 23:25:04 +08:00 早已讨论过这个问题 核心部分改用 C\C++编写 .net 始终还是比较容易被逆的 |
![]() | 20 shot 2017-04-22 23:25:42 +08:00 https://github.com/yck1509/ConfuserEx 功能非常强大,对付 中低水平的反编译和逆向工程绰绰有余。 但是由于被黑客用于病毒加壳,当混淆等级过高时有很大几率被杀毒软件误伤,特别是某国产数字厂。 |
21 kuretru 2017-04-22 23:33:05 +08:00 via iPhone 核心代码封装成 web 服务调用 |
![]() | 22 wdlth 2017-04-22 23:42:14 +08:00 没有所谓的无法被逆,连 Denuvo 那种级别的都可以被搞定,各种只有增加难度,延长时间而已。 |
![]() | 23 lauix 2017-04-22 23:42:46 +08:00 二进制逆向我懂,反逆向我认为不存在。你怎么加密都能逆向回来,只是难度大不大而已。所以建议加壳混淆,不要有注释,代码尽量写乱点,自己看不懂这种程度最好。 |
![]() | 26 akafeng 2017-04-23 10:24:05 +08:00 DNGuard + Safengine, 核心函数用 C++ 或者其他语言重写, 也可在服务器上跑 之前做商业软件, 需要用到一个 RSA 加密, 我丢到我服务器跑, 就算程序最后破解了, 也没太大作用 朋友有个程序用的就是楼上说的一个方法, 一个子程序先启动, 循环检测环境和各类情况, 然后再调用起主程序 Net 的混淆和破解还是挺容易的, 毕竟本身有中间层, 相当于扒光了 |
![]() | 27 beginor 2017-04-23 18:48:38 +08:00 via Android 如果能兼容 mono 的话,可以试试它的静态编译。 虽然.net 也有本地编译,不过只支持 UWP 应用 |
28 Jboys 2017-04-23 19:59:36 +08:00 以前的一个项目,公司买的有商业软件。驻场开发那边的人负责打包安装等一系列售后。 |
29 zke1e 2017-04-24 17:03:38 +08:00 .net 做客户端很尴尬,确实太容易被破解了,个人觉得能用 c++写就尽量用 c++写,目前因为 u3d 游戏发展很好所以针对.net 的保护也有一些方案了,不过目前主要还是针对 u3d 的。 |
![]() | /td> | 30 tilv37 2017-04-25 09:48:35 +08:00 实心代码用 C++ |