.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 1
三四年前看雪论坛的关于 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
chinafeng 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 的。
|
30
tilv37 2017-04-25 09:48:35 +08:00
实心代码用 C++
|