GOLANG 联网程序如何防破解 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
iyear
V2EX    Go 编程语言

GOLANG 联网程序如何防破解

  •  
  •   iyear
    iyear 2020-08-08 20:49:14 +08:00 4574 次点击
    这是一个创建于 1897 天前的主题,其中的信息可能已经有所发展或是发生改变。

    看到 t/696622 的帖子,情况有点不同所以另开一帖问一下……

    刚好自己有个小项目想写个授权,自带联网属性

    目前思路是启动时服务端带 sign 验证,每天不定时后台验证,失败就关闭前台的关键功能(当然不是马上关闭,防止授权服务器炸了所有都用不了)

    授权过程不能放在用户操作过程中进行,只能后台。

    关键功能无法放在服务端运行。

    如何提高破解的难度?求大佬解答

    不会做的太复杂,真的防也防不住

    解决后会把方案和思路放在附言里。

    14 条回复    2020-08-10 09:46:48 +08:00
    ooh
        1
    ooh  
       2020-08-08 21:06:12 +08:00
    对称加密 生成一个 license 文件, 每个操作里面写一个 validate
    ooh
        2
    ooh  
       2020-08-08 21:08:16 +08:00
    @ooh 靠不没写完发出去了,流一个 validate 注释,批量把 validate 替换成实现代码,这尼玛就算破解也要一个个去改吧
    iyear
        3
    iyear  
    OP
       2020-08-08 21:08:51 +08:00
    @ooh #1 感谢大佬,回头研究一下
    Aoang
        4
    Aoang  
       2020-08-08 21:10:49 +08:00 via Android
    调动态链接库,然后上数字签名,程序、链接库双向校验签名。

    程序抽离出关键数据至服务端,然后加上登录,服务端根据 IP 和设备的硬件 ID 来做风控。

    程序也可以独立成多个,然后服务端下载后由程序调用执行,通过风控来处理。

    用户登录之后才能下载程序,用户下载的程序自带特征码,随便破解,你看到破解版的之后看看特征码是哪个用户的就行了。
    iyear
        5
    iyear  
    OP
       2020-08-08 21:12:59 +08:00
    @Aoang #4 感谢,不过这个有点复杂。。目前水平好像还做不到这样子。而且小项目只是想借这个学习一下防破解的思路,以后说不定会用到
    loading
        6
    loading  
       2020-08-08 21:17:03 +08:00 via Android
    @ooh 都是一样的代码,编译器不会直接帮你优化成一个?
    xcstream
        7
    xcstream  
       2020-08-08 21:57:58 +08:00
    定时任务
    nifengwobei
        8
    nifengwobei  
       2020-08-09 00:42:43 +08:00
    这防那防 还怎么写好代码 大厂都防不住 个人的 防菜逼不防大佬
    iyear
        9
    iyear  
    OP
       2020-08-09 02:01:43 +08:00 via Android
    @nifengwobei 所以想一个简易的授权方式
    teawithlife
        10
    teawithlife  
       2020-08-09 08:27:07 +08:00
    对付联网验证的方法,常用的要么就是直接跳过验证的代码,要么就是做一个假的服务器进行应答
    对付这两种方法,需要做到:
    1. 部分计算逻辑得放到服务器实现,确保程序需要连接真正的服务器,计算之前服务器可以做授权验证
    2. 验证时引入随机数和时间因素,防止重放攻击
    playniuniu
        11
    playniuniu  
       2020-08-09 09:44:18 +08:00
    时间戳+你的密钥,算个 md5 之类的放在 Http Header 请求里面,然后比如每调用关键功能 100 次,就请求一下服务端,看看授权情况,授权出错就 +1,出错 3 次关服务。我觉得这样就基本可以了。

    当然你密钥要处理一下,不能直接写成文本,否则 IDA 一看就能看出来,好歹把字符串切分一下,在 Base64 一下,一般情况就足够用了
    iyear
        12
    iyear  
    OP
       2020-08-09 11:07:26 +08:00
    @teawithlife #10
    @playniuniu #11
    目前看来这样的思路是较为简洁和实用的
    toomlo
        13
    toomlo  
       2020-08-09 16:38:59 +08:00
    很多人编译 Go 程序时没注意过 go buildmode,其中一个比较特殊的 buildmode=pie,可以生成地址无关的二进制文件,进而结合 ASLR 技术加强自身安全性。这对 Go 自身的内存安全机制来说,是个锦上添花的特性。配图中的内容把这个特性的好处解释的挺清楚了。

    其实这个 buildmode 还有一个鲜为人知的效果:在用此模式编译出的二进制文件面前,当前业界公开的 Go binary parse script/plugin for disassemblers 就跪了,分析不了

    来自: https://m.weibo.cn/1811826364/4530166044824131
    chengxiao
        14
    chengxiao  
       2020-08-10 09:46:48 +08:00
    市面上有一些卖加密的厂商可以尝试下,我买过一把硬件锁,类似于银行那种 usb-key 一把几十块吧
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1233 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 17:37 PVG 01:37 LAX 10:37 JFK 13:37
    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