V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
charseer
V2EX  ›  程序员

话说是不是本地的软件任何认证过程均可破

  •  
  •   charseer · 2019-12-18 21:37:03 +08:00 via iPhone · 5154 次点击
    这是一个创建于 1800 天前的主题,其中的信息可能已经有所发展或是发生改变。
    就比如一个本地软件需要判断客户输入的序列码之类的,被直接反编译你的 so 文件,找到鉴权之类的函数,然后直接修改判断是否相等的步骤,即不用真的序列码也可永远认证通过

    思路类似下面这些
    https://www.kanxue.com/book-24-104.htm

    那么有没有什么好点的防范方法能让成本提高一些的?
    49 条回复    2019-12-19 22:38:49 +08:00
    kizunai
        1
    kizunai  
       2019-12-18 21:52:14 +08:00 via iPad
    是,
    除了强制联网,其他没有
    WispZhan
        2
    WispZhan  
       2019-12-18 21:54:20 +08:00
    哪怕你用 Window 的驱动签名认证一样破。 目前成本最高的应该也就这个了。
    CallMeReznov
        3
    CallMeReznov  
       2019-12-18 21:57:34 +08:00
    我看过一篇序列号生成器的制作教程,秀到让人头皮发麻的那种.
    通过软件直接反编译出源码,找到序列号验证那块的代码.
    新建一个 C#项目,拖好控件,粘贴代码.编译完成

    整个过程 10 分钟不要.....
    charseer
        4
    charseer  
    OP
       2019-12-18 22:01:16 +08:00 via iPhone
    @kizunai 我咋感觉强制联网也没用。。找到你联网判断的那个“=”号判断步骤直接跳过不就完了。。
    nicevar
        5
    nicevar  
       2019-12-18 22:01:31 +08:00   ❤️ 1
    理论上是这样的,但是实际上保护力度一旦加强就会阻挡住绝大多数的人,就像 windows 软件发展到后期出现一些猛壳,就很难处理了。
    主要还是看你的软件有多大价值,一般的安卓软件就腾讯的乐固或者 360 这些提供的免费加固就够用了,要想强度更大的直接加钱,乐固专业版一年三四千吧,企业版一年八万左右,要不然就自己开发。
    Buges
        6
    Buges  
       2019-12-18 22:05:05 +08:00 via Android
    只要软件“可”离线运行,就可以被离线运行。
    最简单的办法是核心逻辑放在服务端,本地无需什么验证,破解者要破解就得自己实现这部分代码并嵌入进去。

    当然把单击应用的逻辑强行放在服务端做是很屑的做法,不过楼上那种用兲朝特产加固加壳的就更屑了。
    nicevar
        7
    nicevar  
       2019-12-18 22:06:19 +08:00
    @charseer 难度提高了,那个‘=’号的判断很多人就找不到了,比如 so 库,直接加密了,重写了加载机制,就算拿到 so 库拖进 IDA 里面都识别不了,就挡住一大堆半桶水的人了
    UnknownR
        8
    UnknownR  
       2019-12-18 22:09:15 +08:00
    所以现在都要联网验证和订阅
    kizunai
        9
    kizunai  
       2019-12-18 22:10:22 +08:00 via iPad
    @charseer 可以把数据都存到服务器的数据库里,不在本地保存
    xuanbg
        10
    xuanbg  
       2019-12-18 22:37:13 +08:00
    是的,除非数据和代码分离,把数据放在服务端,否则任何防破解的办法都是可以绕过的。
    yujiang
        11
    yujiang  
       2019-12-18 22:51:42 +08:00 via Android
    是的,所以建议代数分离,每次运行时判断虚拟机,然后本地确认软件没被改动,通过以后再云端鉴权,搞一些机码绑定,二步验证,多处校验(玩阴的这时若鉴定为盗版就返回一些奇奇怪怪的东西)客户端合法数据在云端计算后再返回,
    ysc3839
        12
    ysc3839  
       2019-12-18 23:44:50 +08:00 via Android
    @CallMeReznov 那是那软件太弱了,首先上个非对称加密算法,客户端里只有公钥,就做不了注册机了,其次使用编译成原生代码的语言,会提高逆向的难度。
    crab
        13
    crab  
       2019-12-19 00:13:14 +08:00   ❤️ 1
    @ysc3839 把客户端的公钥替换成自己的公钥就可以。
    ashong
        14
    ashong  
       2019-12-19 00:21:45 +08:00 via iPhone
    防君子不防小人,即便联网验证也会被破
    akira
        15
    akira  
       2019-12-19 00:42:56 +08:00
    各种加固咯,这样可以提高破解成本。
    danmu17
        16
    danmu17  
       2019-12-19 00:54:25 +08:00
    软件防破解的本质是提高门槛。任何领域的控制盗版的有效手段只有两种.
    减少成品的曝光,提高产品的售价。
    成立自己的反制团队以及说客团队,在司法和政治两个层面打击潜在的威胁。

    其他任何手段本质上都是自欺欺人,但是如果能成功骗到老板或者客户的钱的话,其实也就达成目的了,所以也很流行,毕竟绝大多数人的工作都涉及到欺骗与谎言。
    realpg
        17
    realpg  
       2019-12-19 01:18:31 +08:00   ❤️ 2
    本地只有 UI (浏览器壳)
    一切逻辑远程服务器化 输出 HTML 可破
    nvkou
        18
    nvkou  
       2019-12-19 01:31:53 +08:00 via Android
    DRM 搞过头也不见得好。君不见游戏圈常见“您可能是正版软件的受害者”。
    respawn
        19
    respawn  
       2019-12-19 01:38:29 +08:00   ❤️ 1
    最好的反破解是让软件足够好,并且价位合适,让用户心甘情愿付费.
    please0stop
        20
    please0stop  
       2019-12-19 01:53:25 +08:00 via Android
    @Buges 或许可以修改逻辑,让服务器把缺的代码送过来
    danmu17
        21
    danmu17  
       2019-12-19 02:45:35 +08:00
    @realpg 如果你把所有运算都放到服务器上去做的话,对于绝大多数软件而言这样的成本比盗版满天飞还要高。如果你把部分运算放在本地还相信处理的结果的话,你开发的就不是软件而是漏洞了。你的说法的本质其实不是 webapp 而是 citrix,只是因为受限于你的认知,所以你不知道自己在说什么。
    danmu17
        22
    danmu17  
       2019-12-19 02:52:15 +08:00
    @nvkou DRM 的本质仍然不是防破解而是以牺牲用户体验以及隐私为代价,通过类似木马病毒的机制全方位的监控用户的系统来延缓破解的速度,以单机游戏为例,让正版体验不如盗版的 DRM 的目的也只是尝试着盗版比正版晚几周出现(并不是总能成功)。
    binux
        23
    binux  
       2019-12-19 02:58:27 +08:00
    @danmu17 #22 「通过类似木马病毒的机制全方位的监控用户的系统来延缓破解的速度」有正常认知的人将这个行为称为「防破解」
    danmu17
        24
    danmu17  
       2019-12-19 03:28:53 +08:00
    @binux 信口开河说出这种不专业的话之前,你需要先去了解一下 StarForce 这类 DRM 的运作机制,然后再去了解一下常见的木马病毒隐藏保护自己以及监控系统的机制。最后你就会明白这类 DRM 采用的类似木马病毒的机制全方位的监控用户的系统来延缓破解的速度的手段,和楼上几乎所有帖子里面说的正常认知的人所知道的防破解的手段的不同了。
    binux
        25
    binux  
       2019-12-19 03:33:32 +08:00
    @danmu17 #24 反调试是防破解的一环,不爽不要玩。
    danmu17
        26
    danmu17  
       2019-12-19 03:36:52 +08:00
    @binux 那你需要去了解一下 StarForce 这类 DRM 的运作机制,再去了解一下常见的反调试手段,最后你就会明白这类 DRM 采用的类似木马病毒的机制全方位的监控用户的系统来延缓破解的速度的手段,和楼上几乎所有帖子里面说的正常认知的人所知道的反调试的手段的不同了。
    binux
        27
    binux  
       2019-12-19 03:49:48 +08:00
    @danmu17 #26 你自己都说了
    「手段的不同」
    「手段的不同」
    你陷入了真正的荷兰人谬论
    binux
        28
    binux  
       2019-12-19 03:52:06 +08:00
    @binux #27 真正的苏格兰人谬论
    danmu17
        29
    danmu17  
       2019-12-19 04:35:56 +08:00
    @binux 那你需要去认真阅读一下我的回复,再去了解一下常见的苏格兰人谬论,最后你就会明白你自认为的苏格兰人谬论,和几乎所有正常认知的人所知道的苏格兰人谬论的不同了。另外基于你只会诡辩而没有任何理解能力的现实,已拉黑不再回复你浪费时间了。
    ericgui
        30
    ericgui  
       2019-12-19 04:48:33 +08:00
    搞点暗桩什么的
    electriccubes
        31
    electriccubes  
       2019-12-19 04:53:29 +08:00
    @respawn #19 有理
    moguiyu
        32
    moguiyu  
       2019-12-19 05:11:29 +08:00
    Dirac live 就是本地只有简单的界面,核心运算还是在云端,所以 license 就容易控制多了,我理解。
    whywhywhy
        33
    whywhywhy  
       2019-12-19 08:10:02 +08:00
    @please0stop 除非你能把服务器黑了,否则没可能,就像现在各网游,本质上也是一部分在服务器上运行,一部分在本地运行,你叫服务器把缺的代码送过来……不现实啊哥们
    shakoon
        34
    shakoon  
       2019-12-19 08:27:29 +08:00
    看到破解话题,想到前几天参加的某项目会议上,有人说到项目需要用到的某软件目前没有采购正版是否需要考虑采购一份,某领导一脸鄙视说:没有正版就不做开发了? xx 年前我还做开发时,就没用过一个正版的开发软件,但是我写出来的代码都是正版,都是我写的!全场哗然
    CallMeReznov
        35
    CallMeReznov  
       2019-12-19 08:29:19 +08:00 via Android
    @shakoon 主动打电话去人公司让人法务发函过来打脸。
    mxT52CRuqR6o5
        36
    mxT52CRuqR6o5  
       2019-12-19 08:59:21 +08:00 via Android
    当然是的,顶级保护技术 d 加密(vmp+各种暗桩)不也是可以破解
    lc7029
        37
    lc7029  
       2019-12-19 09:04:28 +08:00
    参考微软游戏机,数据在内存里也是加密的,读入 CPU 后才由内存控制器解密。
    秘钥出厂前在 CPU 生成,此后无法修改和读取。
    更新时烧掉芯片的某些电路,全盘复制也不能强制降级。
    如果做到这些,估计可以防破解了
    zappos
        38
    zappos  
       2019-12-19 11:06:12 +08:00 via Android
    把功能部分搬服务器,然后不登录就用不了。
    zappos
        39
    zappos  
       2019-12-19 11:10:59 +08:00 via Android
    @nicevar 得了吧,就那四大强壳,早就不知道被轮了多少遍了。要不是我觉得其它领域更有意思,我也专门研究这个。
    aver4vex
        40
    aver4vex  
       2019-12-19 11:18:41 +08:00
    加壳,反破解。
    henices
        41
    henices  
       2019-12-19 11:21:00 +08:00
    @zappos 的说法说对的 “功能部分搬服务器,然后不登录就用不了”
    aver4vex
        42
    aver4vex  
       2019-12-19 11:21:42 +08:00
    所有的加密都是增加破解难度,都无法从根本上解决问题。
    终极解决办法就是楼上说的,数据放服务器,或者逻辑处理也放服务器。本地就是一个输入和展示的功能。
    nicevar
        43
    nicevar  
       2019-12-19 11:48:39 +08:00
    @zappos 别吹了好吗,当年出来的时候有几个能轮了,你告诉我?最早轮的也是我之前公司的那几个人
    Mohanson
        44
    Mohanson  
       2019-12-19 11:55:59 +08:00 via Android
    反盗版最服任天堂。任天堂的游戏卡带开机都会显示一个 Nintendo 的 Logo, 游戏机如果检测不到这个 Logo 就会拒绝加载游戏卡带。如果你敢盗版卡带,不好意思,我不是用著作权和知识产权侵权告你,我是直接告你商标侵权。这个可比知识产权侵权严重多了…
    xenme
        45
    xenme  
       2019-12-19 11:56:38 +08:00
    本地认证只是难易的问题

    看看你的市场目标有多大,加上对应强度的加壳加密就足够了。
    没有足够的利益,即使你明文比较,也没人看,能防住你的用户就可以了。
    si
        46
    si  
       2019-12-19 12:06:51 +08:00
    无论怎么弄,只要功能在本地都可以被破解,没有被破解的都是成本问题而已。
    只有把功能放到服务器上,本地提交数据给服务器,服务器返回处理结果给本地显示,这种除了黑掉服务器之外没有办法破解。
    不过成本会比较高,除了要防范被黑,还要考虑被打,别人 DDOS 影响也大。
    除非你的软件价值极高,能把成本赚回来,或者不在乎会不会被打。
    himesens
        47
    himesens  
       2019-12-19 13:49:05 +08:00
    1、部分功能做成多人在线或者联网模式 2、一个强大的法务部
    xcstream
        48
    xcstream  
       2019-12-19 14:46:16 +08:00
    1 理论上是的 2 找各种加密工具
    ysc3839
        49
    ysc3839  
       2019-12-19 22:38:49 +08:00
    @crab 我知道可以,但这不是真正意义上的注册机了,还得对程序进行修改。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2782 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 15:12 · PVG 23:12 · LAX 07:12 · JFK 10:12
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.