GOLANG 联网程序如何防破解

2020-08-08 20:49:14 +08:00
 iyear

看到 https://www.v2ex.com/t/696622 的帖子,情况有点不同所以另开一帖问一下……

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

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

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

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

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

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

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

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

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

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

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

当然你密钥要处理一下,不能直接写成文本,否则 IDA 一看就能看出来,好歹把字符串切分一下,在 Base64 一下,一般情况就足够用了
iyear
2020-08-09 11:07:26 +08:00
@teawithlife #10
@playniuniu #11
目前看来这样的思路是较为简洁和实用的
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
2020-08-10 09:46:48 +08:00
市面上有一些卖加密的厂商可以尝试下,我买过一把硬件锁,类似于银行那种 usb-key 一把几十块吧

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/696747

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX