.net 的商业软件如何做到不被其他人逆向出源码? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
phantomer
V2EX    .NET

.net 的商业软件如何做到不被其他人逆向出源码?

  •  
  •   phantomer 2017-04-22 20:42:03 +08:00 8252 次点击
    这是一个创建于 3101 天前的主题,其中的信息可能已经有所发展或是发生改变。

    .net 的商业软件如何做到不被其他人逆向出源码? 楼主目前工作遇到一个甲方希望自己的.net 商业软件无法被逆。 楼主多方打听了几个好基友,搞二进制的大佬,他们对.net 这方便也是比较接触的少,问了几家安全公司也几乎没搞加固.net 这方面的产品。

    所以我想问下大家,或大家所在的公司开发的.net 商业软件是如何加壳和混淆代码的?

    31 条回复    2017-04-25 09:49:00 +08:00
    phantomer
        1
    phantomer  
    OP
       2017-04-22 20:43:36 +08:00
    LZ 也给几个二进制大佬给的方案给了客户看,但是客户做依旧是可以被清楚的逆回来,看到源码
    Cbdy
        2
    Cbdy  
       2017-04-22 20:48:12 +08:00 via Android
    之前在 v 站看到过 Java 软件反逆向工程的讨论,可以去找来参考一下
    我感觉无外乎动中间码,动编译器和运行时了
    xenme
        3
    xenme  
       2017-04-22 20:48:18 +08:00 via iPhone
    先混淆名称,即使逆向完,看起来也头疼
    sun1991
        4
    sun1991  
       2017-04-22 20:48:47 +08:00
    keyword: .net obfuscator, 增加逆向难度. 要不考虑核心算法用 C 写.
    coderfox
        5
    coderfox  
       2017-04-22 20:49:53 +08:00 via Android
    用 CoreCLR ,修改文件解析部分做加密。
    可以参考腾讯做 Unity 加密的过程,以及 KLab 做 lua 加密的过程。
    liyvhg
        6
    liyvhg  
       2017-04-22 20:50:30 +08:00 via Android
    加多层壳上硬件 key 授权、上网络认证
    然而都没有好的办法防破(和楼主的想法可能有点出入)
    .net 是否是一种运行时解析的语言?
    JustFuckingDoIt
        7
    JustFuckingDoIt  
       2017-04-22 20:50:32 +08:00
    混淆
    JustFuckingDoIt
        8
    JustFuckingDoIt  
       2017-04-22 20:52:18 +08:00
    检测逆向工具,发现就崩溃或者格硬盘
    lany
        9
    lany  
       2017-04-22 20:53:03 +08:00
    DNGuard 能起到一部分作用
    h4x3rotab
        10
    h4x3rotab  
       2017-04-22 20:56:18 +08:00
    混淆、加猛壳。关键代码能放服务器就放服务器,不能可以考虑用 c++写。
    Pyjamas
        11
    Pyjamas  
       2017-04-22 21:05:59 +08:00
    混淆、反调试,目的在于增加逆向成本,当逆向成本过大的时候人家就不会来搞你了。
    无法被逆感觉不可能啊
    Mutoo
        12
    Mutoo  
       2017-04-22 21:08:57 +08:00
    商业应用可以考虑硬件加密狗咯,关键代码放到加密狗里,其它部分被逆向也没什么用。
    typcn
        13
    typcn  
       2017-04-22 21:12:27 +08:00
    90% 以上的工具全是垃圾,没什么用处

    我觉得唯一有难度的就是 DNGuard ,免费版也没用,那个商业版开了 HVM 之后效果非常强,之前遇到一软件,搞了一周多没搞定。
    kokutou
        14
    kokutou  
       2017-04-22 21:31:15 +08:00 via Android
    搜索 任意加密工具的名字 + 看雪
    就知道大概的强度了。。。
    Magentaize
        15
    Magentaize  
       2017-04-22 22:13:20 +08:00
    用 IL 写,逆向出来是不能被 MSBuild 编译的
    hjc4869
        16
    hjc4869  
       2017-04-22 22:16:24 +08:00
    这种需求一般混淆一下让逆出来的代码不可维护就差不多了吧
    neoblackcap
        17
    neoblackcap  
       2017-04-22 22:19:16 +08:00
    纵观各家的解决方案,我认为还是硬件狗最实际,而且最好是要求客户签 EULA , EULA 里面写明不允许逆向否则走法律途径。
    visonme
        18
    visonme  
       2017-04-22 22:41:30 +08:00   1
    三四年前看雪论坛的关于 net 的安全讨论还是很火的,上面也有不少这方面的资料,楼主可以搜搜,或许能找到一些有用的东西。(记得看雪某牛还出了本关于 net 安全的书,也可以看看,有几年了)

    说说自己以前公司的做法吧。
    1. 加壳 /混淆是肯定的,买商业软件,这些钱省不得。
    2. 对于部分核心的代码,自己内部做加密混淆或者模糊处理。
    3. 不要直接启动 net 主程序,通过 shel (一个简单的 exe 应用) l 来启动, shell 的作用就是做到一个环境的检测(我们那时候主要做调试环境和相关进程的检测)。
    4.通过 hack 技术,主要通过 hook 部分底层函数。
    czkwg8
        19
    czkwg8  
       2017-04-22 23:25:04 +08:00
    早已讨论过这个问题
    核心部分改用 C\C++编写
    .net 始终还是比较容易被逆的
    shot
        20
    shot  
       2017-04-22 23:25:42 +08:00
    https://github.com/yck1509/ConfuserEx

    功能非常强大,对付 中低水平的反编译和逆向工程绰绰有余。
    但是由于被黑客用于病毒加壳,当混淆等级过高时有很大几率被杀毒软件误伤,特别是某国产数字厂。
    kuretru
        21
    kuretru  
       2017-04-22 23:33:05 +08:00 via iPhone
    核心代码封装成 web 服务调用
    wdlth
        22
    wdlth  
       2017-04-22 23:42:14 +08:00
    没有所谓的无法被逆,连 Denuvo 那种级别的都可以被搞定,各种只有增加难度,延长时间而已。
    lauix
        23
    lauix  
       2017-04-22 23:42:46 +08:00
    二进制逆向我懂,反逆向我认为不存在。你怎么加密都能逆向回来,只是难度大不大而已。所以建议加壳混淆,不要有注释,代码尽量写乱点,自己看不懂这种程度最好。
    Mitt
        24
    Mitt  
       2017-04-22 23:50:44 +08:00   1
    @lauix 道理我都懂。。 但是哪个编译器会把注释编译到程序里的。
    zjlin1984
        25
    zjlin1984  
       2017-04-23 00:48:57 +08:00
    @visonme 能不能举个例子
    akafeng
        26
    akafeng  
       2017-04-23 10:24:05 +08:00
    DNGuard + Safengine, 核心函数用 C++ 或者其他语言重写, 也可在服务器上跑
    之前做商业软件, 需要用到一个 RSA 加密, 我丢到我服务器跑, 就算程序最后破解了, 也没太大作用
    朋友有个程序用的就是楼上说的一个方法, 一个子程序先启动, 循环检测环境和各类情况, 然后再调用起主程序
    Net 的混淆和破解还是挺容易的, 毕竟本身有中间层, 相当于扒光了
    beginor
        27
    beginor  
       2017-04-23 18:48:38 +08:00 via Android
    如果能兼容 mono 的话,可以试试它的静态编译。 虽然.net 也有本地编译,不过只支持 UWP 应用
    Jboys
        28
    Jboys  
       2017-04-23 19:59:36 +08:00
    以前的一个项目,公司买的有商业软件。驻场开发那边的人负责打包安装等一系列售后。
    zke1e
        29
    zke1e  
       2017-04-24 17:03:38 +08:00
    .net 做客户端很尴尬,确实太容易被破解了,个人觉得能用 c++写就尽量用 c++写,目前因为 u3d 游戏发展很好所以针对.net 的保护也有一些方案了,不过目前主要还是针对 u3d 的。
    tilv37 /td>
        30
    tilv37  
       2017-04-25 09:48:35 +08:00
    实心代码用 C++
    tilv37
        31
    tilv37  
       2017-04-25 09:49:00 +08:00
    @tilv37 核心
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     860 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 30ms UTC 22:00 PVG 06:00 LAX 15:00 JFK 18:00
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86