中国共享软件联盟's Archiver

egoood 发表于 2009-12-30 09:55

共享软件防破解经验

[i=s] 本帖最后由 egoood 于 2009-12-30 11:40 编辑 [/i]

本人纯国内,软件已经好几年,月入2W,至今未被破解。
国内共享软件加密防破解很重要,谈谈经验以供分享。

一、加密防破解的目标
世上没有开不了的锁,世上也没有解不开的密,世上也没有攻破不了的城池
任何一种加密方法都不可能有绝对百分之百的安全,加密的目标不是百分之百,而通过各种方法综合使用,增加破解难度,最终达到[color=red][b]破解成本>破解收益[/b][/color],使破解者最终放弃尝试破解。

下面就一步步讲各种增加破解难度的方法,大家综合使用。

二、注册验证算法
以下ID为用户名或机器特征码,Input为用户注册输入值,Fun 为函数

if Input = Fun1(ID ) &&(1)
(1)式变形成为 if Fun1(ID) -Input=0   &&  (2)
(2)式变形成为 if Fun1(ID) -Input=Key  即 if Fun2(ID,Input)=Key  &&  (3)
(1)式是一个一元函数比较,正确注册码在内存出现,是明码比较,很容易被破解。
而(3)是一个二元函数比较,没有出现正确注册码,被破解难度已经很大。
我们把(3)式再改进 [color=red]if MD5(Fun(ID,Input)=Key的MD5值[/color]   &&  (4)
(4)在代码和内存中,看到的Key的MD5值,MD5几乎无法还原,这样注册验算与注册码生成算法完全不同,无法通过注册验证算法倒推注册码生成算法。写注册机的可能性极小。
即使用简单的减法或异或作为Fun,知道注册验算也很难反到注册码生成算法。
例if MD5(ID-Input)=B7A782741F667201B54880C925FAEC4B
实际上上述注册验算的注册码生成算法为SN=ID-10000   (省略字符串与数字转换)
很明显(4)式要比(1)式强得多

三楼继续

networktunnel 发表于 2009-12-30 10:17

哪一个软件?我分析一下破解难度

egoood 发表于 2009-12-30 10:28

[i=s] 本帖最后由 egoood 于 2009-12-30 12:47 编辑 [/i]

三、抓住小偷
1、 小偷(Cracker)有个习惯:尝试破解的第一件事就在注册窗口试着输入注册码,如果有窗口提示,就用内存跟踪到窗口之间的代码找到注册验算处,会分析里面的明码比较得到注册码,或通过修改跳转达到爆破,甚至分析验算写注册机达到破解目的。
     所以防破解的原则有:不能明码比较,不能验证后就弹出窗口。注册码输入处不应放注册验算代码,而应该是输入后重起在程序验证。
2、小偷有上述这个习惯,我们可以利用这个习惯设个陷阱抓住小偷。
    在注册码输入窗口我们不放注册验算代码,但我们可以放一个假的注册验算,先验证一个是否符合注册码格式,如下
    if  Input符合格式 then 写到硬盘然后退出软件
    else  [color=red]假验算[/color]
[color=red]假验算[/color]是装模作样进行注册验算,而且是明码比较,我们随便写一个如下:
  if input=MD5(ID+'123') then showmessage('注册成功')
  else  showmessage('注册失败')

     这样,在软件注册输入处的表现就是随便输几字符会弹出窗口提示“注册失败”,一般用户只会随便尝试输几下试试。
    而小偷(Cracker)则不同,会用内存跟踪通过查找文本'注册失败'找到假验算处,当小偷发现假验算处还有'注册成功'的窗口文本会非常高兴。也会看假验算的明码比较。他会尝试用看到比较明码输入注册码输入框。
     当小偷这么作时,软件会提示“注册成功”,他会一窃喜。而事实上并不是真正的注册成功,我们软件也就知道这个用户是小偷。因为正常用户是不会输入这个值的,只有Cracker才会输入这个值。
    这样我们就抓住了这个小偷,

3、 抓住小偷后累他
      抓住小偷后千万不要搞破坏。因为破坏他电脑系统
      A会引起他的察觉,知道这是一个陷阱,他可通过虚似机等计术防范,你达不到效果;
      B会引起他报复,他可能会将你的软件放到破解论坛群起而攻之,这样被破解的概率会增加。
      抓到小偷后,我们玩他就好了,不要破坏他的电脑系统。我们可以在他电脑硬盘上偷偷写一个标志,有这个标志软件就在一定时间内(如一个月)不进行真的注册验算,代码绕过真的注册验算。在这个月内即使他输入正确的注册码也不能注册。
     这样累他一个月,Cracker再怎么尝试再怎么内存跟踪,也找不到真的注册验算。一个月后激情过去,大多数人就放弃了。

egoood 发表于 2009-12-30 10:29

自已占楼待续

egoood 发表于 2009-12-30 10:29

自已占楼待续

webouse 发表于 2009-12-30 10:35

关注,等待下文

论坛长老 发表于 2009-12-30 10:50

没有一个爆破案例? 是不是不是流行软件啊
我的深切感受是, 无论什么流行软件, 爆破总是一个接一个出现啊

egoood 发表于 2009-12-30 10:52

[quote]没有一个爆破案例? 是不是不是流行软件啊
我的深切感受是, 无论什么流行软件, 爆破总是一个接一个出现啊
[size=2][color=#999999]论坛长老 发表于 2009-12-30 10:50[/color] [url=http://www.cnsw.org/bbs/redirect.php?goto=findpost&pid=533784&ptid=95888][img]http://www.cnsw.org/bbs/images/common/back.gif[/img][/url][/size][/quote]

本人纯国内共享软件,软件已经好几年,月入2W元,至今未被破解。
网上曾见有多人尝试破解,但未成功。

yxsoft 发表于 2009-12-30 11:10

光算法没有用吧,一个NAG就搞定了

alpglide 发表于 2009-12-30 11:49

谢谢楼主分享,楼主继续

networktunnel 发表于 2009-12-30 12:17

难的是防爆破,就是自保护,其他用rsa非对称就可以了

ldt 发表于 2009-12-30 12:38

温柔地杀你 发表于 2009-12-30 13:57

写得很好,楼主要继续啊:victory:

CodeCoolie 发表于 2009-12-30 15:32

先拜2w刀

我的控件2.5版被高人用独特的欺骗手段给破了,不过3.0版,嘿嘿,拭目以待

猛龙过海 发表于 2009-12-30 16:03

强人啊,哈哈,很好的办法

游客 发表于 2009-12-30 16:04

经验不错,其实这就是防爆破的一种方法,破解者跟踪不到注册码比较处怎么爆破呢?
我的做法比较偷懒,rsa算法,(杜绝注册机),无数比较分支,随机择一分支比较,即使破解者能够跟踪到,要跟踪到所有分支估计要吐血(防范爆破)。
加一层猛壳(望而生畏),这样的情况下仍有loader破解。
最后保护措施是暗桩(杜绝破解)
最后只好自己发布破解版。

猛龙过海 发表于 2009-12-30 16:23

if MD5(Fun(ID,Input)=Key的MD5值  ------ (4)

破解者能否获取到FUN的返回值呢?

牛牛的爱 发表于 2009-12-30 19:33

[quote]经验不错,其实这就是防爆破的一种方法,破解者跟踪不到注册码比较处怎么爆破呢?
我的做法比较偷懒,rsa算法,(杜绝注册机),无数比较分支,随机择一分支比较,即使破解者能够跟踪到,要跟踪到所有分支估计要吐血 ...
[size=2][color=#999999]游客 发表于 2009-12-30 16:04[/color] [url=http://www.cnsw.org/bbs/redirect.php?goto=findpost&pid=533990&ptid=95888][img]http://www.cnsw.org/bbs/images/common/back.gif[/img][/url][/size][/quote]

这样还被破,太牛了吧

CodeCoolie 发表于 2009-12-30 19:36

[quote]

这样还被破,太牛了吧
[size=2][color=#999999]牛牛的爱 发表于 2009-12-30 19:33[/color] [url=http://www.cnsw.org/bbs/redirect.php?goto=findpost&pid=534058&ptid=95888][img]http://www.cnsw.org/bbs/images/common/back.gif[/img][/url][/size][/quote]

游客说没被破解,只好自己发布“破解版”

egoood 发表于 2009-12-30 19:52

[i=s] 本帖最后由 egoood 于 2009-12-30 19:56 编辑 [/i]

[quote]if MD5(Fun(ID,Input)=Key的MD5值  ------ (4)

破解者能否获取到FUN的返回值呢?
[size=2][color=#999999]猛龙过海 发表于 2009-12-30 16:23[/color] [url=http://www.cnsw.org/bbs/redirect.php?goto=findpost&pid=534005&ptid=95888][img]http://www.cnsw.org/bbs/images/common/back.gif[/img][/url][/size][/quote]
Cracker 获得Fun(ID,Input)这个值有什么用?
这是一个二元函数,参数一个是用户ID一个是用户注册码输入值
用户输入不同的值得到不同的结果。

页: [1] 2 3

Powered by Discuz! Archiver 7.0.0  © 2001-2009 Comsenz Inc.