1
iamwho 2020-07-25 20:56:49 +08:00
打开程序弹窗提醒用户联网。
|
2
l549349545 2020-07-25 20:57:04 +08:00 via Android
离线就是机器码混淆呗
|
4
okface OP 还有就是想实现期限内激活码有效,比如使用个半年一年的自动失效,这个离线可以实现吗。。
|
5
ysc3839 2020-07-25 21:05:10 +08:00 via Android
非对称加密算法,可以参考一下 RSA 的原理,自己实现一个。注册码用私钥生成,软件里用公钥验证。
这么做能确保第三方很难实现生成注册码的工具,不过防不了一个注册码重复使用。 |
6
AX5N 2020-07-25 21:06:08 +08:00
没搞过,我猜就是设计一个可逆的算法,可以胡乱写一个?
时效这个应该也是可以实现的,保证激活码解码后带有日期信息就得了。 |
8
chinvo 2020-07-25 21:10:20 +08:00
都 python 的了, 也没啥意义...
最简单用 序列号 + 机器序列号 算个校验码就完事儿了 |
9
tivizi 2020-07-25 21:11:11 +08:00 via iPhone
抛开软件破解不谈。
非对称加密是个好的解决办法。 CA 证书给客户签发的证书中包括有效期,机器识别码等信息,作为授权码。软件放 CA 公开证书,验证授权码的有效性,并检验授权码有效期,以及机器识别码是否一致等。 |
10
qile1 2020-07-25 21:12:48 +08:00 via Android
晚上有个开业的 python 实现注册码的项目
其实把 mac 或者硬盘 id 做个简单的 md5 验证,时间做 bas64 编码在做几个位运算就可以 |
11
AX5N 2020-07-25 21:15:44 +08:00
这个主要取决于你的对手是什么人,是老实的普通人,还是鸡贼的普通人。后者自己不会搞,但可以找朋友搞啊。又或者是肯花钱的鸡贼的普通人,愿意花大价钱找非常专业的人搞。又或者是懂点技术,但不会破解也不会拉下脸找人搞的技术员。
说真的,破解一个非专业方案的软件并不需要多少技术,就是时间多少而已。你可以算一下对方脱壳+解密+逆向你的算法需要的时间成本来决定。如果你只觉得你这个软件值 50 块,对方要花 100 个小时来破解,那就让他去破解吧。 |
12
mxT52CRuqR6o5 2020-07-25 21:15:47 +08:00 via Android
用户执行的是 exe 不,是的话可以直接用一些现成的方案(当然想破解也很好破解,毕竟代码都在 python 那边,保护不了代码)
|
13
loading 2020-07-25 21:30:01 +08:00 via Android
我上次因为特殊原因需要破 j 一个非常偏门的小型业内软件(属于个人软件),我从学习到成功,还没到半天,实际操作只用了 10 分钟。
楼主你随便选个方案就行了,不用太费神。 |
14
tanranran 2020-07-25 21:35:09 +08:00
加密狗
|
17
kokutou 2020-07-25 21:46:21 +08:00 via Android
内置 rsa key 配合读取硬盘序列号(这个要注意固态硬盘序列号很长或者杂牌固态没有序列号。。。),读取网卡 mac 地址,Windows 系统 uuid 等等实现一机一码和防止简单算号。
然后还要注意留各种暗桩。 最后上个 tmd 壳 vmp 壳 时间可以在注册码里写进去。 时间验证防不了人家修改系统时间。。。 如果是有客户端的系统,可以通过客户端和服务的对时间的方式防一防。。。 |
18
WeaPoon 2020-07-25 21:50:06 +08:00
这类网上应该很多,不过 py 有没有就不清楚了。
使用授权文件验证方式,把时间信息等的写入文件里,加密方式用 RAS 。 机器码对比等,机器码可以用主板硬盘等等硬件信息组合。 这样对方给你提供个机器码,你自己用机器码+时间+其他信息生成个授权文件即可。 |
19
Coioidea 2020-07-25 22:14:10 +08:00
硬盘信息学到了!那么硬件指纹有伪造手段吗?
|
20
abersheeran 2020-07-25 22:18:24 +08:00
直接参考 JWT 的手段。你用 RSA 算法签发。然后程序内嵌公钥,使用公钥对 JWT 验证。JWT 再包含一下有效期,完事了。没必要自己造轮子。
|
21
stillyu 2020-07-25 22:20:19 +08:00 1
涉及到时间,注册码这一类的都不行,用带内置时钟的加密狗
|
22
ifxo 2020-07-25 22:31:50 +08:00
简单就是 vmprotect,加壳防破解,激活码和时间限制全都有,还有很多虚拟化软件都可以做到,直接把你的 exe 文件打包,都挺贵的
|
23
love 2020-07-25 23:23:48 +08:00
lz 都说了只防君子不防小人,那用简单的过期时间+随机字串加密得到码,程序里解码就行
|
24
silymore 2020-07-26 00:04:11 +08:00 via iPhone
楼上说 rsa 的那种密钥都很长吧,几十字节,离线不好输入的,有短的方案吗,普通软件 12 或者 16 位那种是怎么弄的
|
25
wangyzj 2020-07-26 00:49:06 +08:00
20200726 << 1
|
29
ysc3839 2020-07-26 06:27:01 +08:00 via Android
@silymore 要短的话只能缩短 RSA 密钥的位数,但安全性会大大降低。
网上许多输入短注册码的程序被破解出注册机,可能不是因为开发商不知道用非对称加密算法,而且因为长度太短了很容易就被暴力破解了。 |
30
delectate 2020-07-26 08:12:14 +08:00
就看你肯付出的成本。
低成本就是 硬件 id+timestamp+随机码,注册码含时间限制或者永久激活信息; 中成本是硬件狗; 高成本是加上一个通信模块(如 4g 通信模块+电波 /gps 授时模块),根据硬件上报的数据进行判断。 不过,既然都离线了,就别整那些没用的,有一万种方法破解,强如微软不也无可奈何吗? |
31
zjgsamuel 2020-07-26 08:41:45 +08:00
硬件狗省事~
|
33
ychost 2020-07-26 10:36:39 +08:00
简单点,再复杂的都能破,参考 RSA 校验
|
34
CallMeReznov 2020-07-26 11:58:30 +08:00
你既然都说不懂了,就直接在脚本里写好 deadline 然后用 pyinstaller 打包,超过时间就不允许运行.
如果别人硬是想破解,py 的话怎么都能整出来源码啊 |
35
zxcslove 2020-07-26 12:30:46 +08:00 1
楼主啊,现在智能手机普及,可以视为一个变相联网的途径,可以考虑这方面做一些文章。比如有些软件通过公众号获取使用密码的思路。
|
36
learningman 2020-07-26 13:03:17 +08:00
如果用户是真的完全不懂。。。
我觉得 input() == key 就够了 |
37
realpg 2020-07-26 13:55:42 +08:00 2
给你个最简单的算法 不反破解的 只防啥也不懂的
向 C:\Users\{Username}\AppData\Local\ 首次启动,向目录写入一个文件 文件名为 register.db 文件内容为一个 50 位的随机数,两次 md5 后的字符串纯文本 然后 输入注册码的界面 显示一个机器码 这个机器码得出的方式为 那个文件的两次 md5 值,不是那个文件的内容,机器码为 32 位的 16 进制字符串,也可以将其转为 10 进制变为一个长数字 然后给你机器码 你用算法算成注册码给用户 用户填入得出授权是否有效 注册码生成算法为 预设到期日期假如为 20200901,转成字符串,拆解成 8 个字符 记为 A B C D E F G H 机器码进行 sha1 得出一个十六进制字符串,拆解成 char 数组,按以下索引顺序重新组合成一个字符串 其中 ABCDEFGH 是上文的字符 7,29,A,4,0,B,12,2,C,1,14,D,9,32,E,17,4,F,19,33,G,13,24,H,5,27,30,20 得到一个 28 位的字符串 然后将这个 28 位的字符串进行 SHA1 hash,得到一个字符串,取其中的第 9 位开始,连续取 4 位,字符串,作为校验码 然后将前面的 28 位字符串和这四位校验码进行拼接成一个字符串,作为注册码。 在离线 APP 验证时,先通过后四位计算注册码合法性 然后用机器码计算出 hash 判断前面的合法性,如果完全合法,提取出 ABCDEFGH 拼接成到期日期 |
39
phithon 2020-07-26 14:32:02 +08:00
你想的太复杂了,不考虑破解的情况下,就可以简单用 sha256 这类哈希来解决。
具体方案我举个例字。你首先准备一个你自己的密钥 key,你给用户签发注册码的时候,就是简单的这样: sha256(当前时间戳 time, key) 然后得到一个签名字符串 cert,然后你再把当前时间戳附在这个 cert 后面,形成一个新的字符串 cert:time,这个就是你给用户签发的注册码。 然后用户填写这个字符串以后,程序拿到这个字符串,用冒号分割,得到 cert 和 time 。然后程序先用自己内置的密钥 key 来重新计算一遍 sha256(time, key),和用户传入的 cert 比对,如果不相等,则直接退出;如果相等,我们再比较当前时间,和用户传入的时间 time 的差,是否超过你要求的期限,如果超过,也直接退出。 |
40
lopetver 2020-07-27 08:26:13 +08:00
建议去吾爱破解问下,那里矛与盾的激烈碰撞
|