能否用 python 写一个软件授权工具? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
kingmo888
V2EX    Python

能否用 python 写一个软件授权工具?

  •  2
     
  •   kingmo888 2016-07-06 20:42:29 +08:00 7053 次点击
    这是一个创建于 3386 天前的主题,其中的信息可能已经有所发展或是发生改变。

    RT ,在线授权验证。。。 或者本地验证。。

    不过分强调安全性(防破解性)。

    找了一下相关资料,没有 python 这方面的内容。都是什么软件加密狗之类的。

    请问有这方面的资料或者 demo 可看吗?

    20 条回复    2016-07-07 16:51:50 +08:00
    SlipStupig
        1
    SlipStupig  
       2016-07-06 21:31:20 +08:00   9
    这个我刚好开发完一整套验证,本地就不要想了( python 本身可以完全解密出来,当然可以考虑加密,但是可以进行断点没什么意义), python 做个服务端,然后协议全程是加密。
    简单说一下交互流程(稍微有点复杂,目前服务端还没出现协议破解)。
    1.本地需要一个公钥服务器存储的是一个私钥(这样可以做到一机一 key ),客户端发起请求给服务端一条指令然后发送公钥给服务端验证,如果验证成功进入 ( 2 ),如果失败就返回错误
    2.服务端返回一条指令询问客户端版本和支持的加密算法列表,客户端回应成功后进入 ( 3 ), 否则断开
    3.服务端返回一个 salt 、 key 和加密算法,客户端使用 salt+key 并用协商的加密算法进行发送,发送几个东西: MAC 地址+激活 ID (如果有硬狗的话,应当验证硬狗的证书和 UID ),客户端证书(防止中间人),如果服务端解密成功后,验证信息是否正确,返回一个秘钥给客户端去恢复关键部分代码(这个地方有点傻 X ,但是对协议没影响),如果正确就走到 ( 4 )
    4.验证成功后给客户端一个 SessionID 和 cookies ( cookies 的秘钥在服务端存储),然后每 10s 客户端发送一个心跳,如果心跳超时 30s 就直接销毁掉 SessionID 和 Cookies ,

    图解:
    1. C ---请求私钥---> S
    S <-----------验证证书是否正确-----------> C

    2. C ===[‘ query ’, RC4|MD5|RSA|AES...]======》 S <=== [加密算法, salt, key] ===>C

    3. C--->密码算法( salt+key , 要发送的数据内容)----> Server

    4 . !Server 验证成功
    |
    |
    =====>发送解密 key =====>client 解密函数(内存起始地址,内存结束地址,内存加密算法, "key") ===>执行关键函数
    verydxz
        2
    verydxz  
       2016-07-06 21:33:40 +08:00
    MARK
    kingmo888
        3
    kingmo888  
    OP
       2016-07-06 22:34:23 +08:00
    @verydxz 话说好复杂的赶脚。完全云里雾里。
    kingmo888
        4
    kingmo888  
    OP
       2016-07-06 22:34:45 +08:00
    @verydxz 其实我只是要防君子不防小人那样。。。
    SlipStupig
        5
    SlipStupig  
       2016-07-07 02:27:09 +08:00
    @kingmo888 我做了软件逆向两年,遇到各种奇葩的破解方法,我这套算是能是能抗住一般破解者,强力的破解者可能会进行模拟服务端指令,证书欺骗,指令重放,弱密钥破解,总之破解这行只要能有人破一定扛不住
    sallowdish
        6
    sallowdish  
       2016-07-07 03:53:54 +08:00
    @SlipStupig 感 encryption key 考不大靠啊,之前有看 blackhat 一 talk 是 bluetooth 的,大致就是 competing 然後 server 以要重新 pair ,然後就可以 sniffer cert ,後面所有所有的交流都可以 decrypt 了。。。之前做的目 mgr 是用 pre-shared key 的, server 和 client 都有一份,就不用交 key 了。。一多的可以再 server 上 table ,然後每一 copy 的 SN 是 id ,然後 server 端自己 db query 相的 key 。
    sallowdish
        7
    sallowdish  
       2016-07-07 03:55:44 +08:00
    @SlipStupig 有 security 的 background ,完全感的哈,中文技方面也不溜,意看看就好
    darkbill
        8
    darkbill  
       2016-07-07 08:27:51 +08:00
    Mark
    alittletrain
        9
    alittletrain  
       2016-07-07 08:46:49 +08:00
    讲真,没有不会被破解的软件。
    sxd
        10
    sxd  
       2016-07-07 08:55:05 +08:00
    其实 me 觉得 楼上 say 的都 very 对
    missdeer
        11
    missdeer  
       2016-07-07 09:09:11 +08:00
    讲道理, 1 楼的方法虽然比较传统,但真应该好好断句
    iphantom
        12
    iphantom  
       2016-07-07 09:13:30 +08:00
    @missdeer 哈哈哈
    billwsy
        13
    billwsy  
       2016-07-07 09:19:30 +08:00 via iPhone
    @SlipStupig 所以你的安全性完全是靠那一个密钥来保护关键部分代码,那其实解密一次破解者就拿到关键代码了…
    clino
        14
    clino  
       2016-07-07 09:28:35 +08:00
    @SlipStupig
    @alittletrain
    https://zh.wikipedia.org/wiki/Denuvo
    "她还称按照目前的加密技术趋势发展,两年后 PC 游戏将无法破解"
    crab
        15
    crab  
       2016-07-07 09:33:56 +08:00
    @SlipStupig 这方法不行了。早期的网络验证都是用这套,验证通过后传回来关键数据。
    SlipStupig
        16
    SlipStupig  
       2016-07-07 09:41:22 +08:00
    @billwsy 还可以找到关键性 Call 直接脱机都行,关键是你能不能找到?这块我只是打个比方,其实我可以绕更大的圈,这个就更麻烦了

    @sallowdish 前提是你的公钥和私钥要 match 啊,我的 key 是客户端发出去的时候,每次 key 都是随机的,协议本身安全性我认为还行,如果证书欺骗做一个 fake 的客户端可以强制认证 cert
    SlipStupig
        17
    SlipStupig  
       2016-07-07 09:44:38 +08:00
    @crab 这个争议可能比较大,我自己也觉得客户端 SMC 不好,但是可以进行绕圈,不一定是关键数据 SMC ,但是不影响协议安全
    akafeng
        18
    akafeng  
       2016-07-07 09:46:23 +08:00 via iPhone
    Mark
    wmhx
        19
    wmhx  
       2016-07-07 11:42:34 +08:00
    参考 qq 的各种钻的验证.
    alqaz
        20
    alqaz  
       2016-07-07 16:51:50 +08:00
    一楼说的是不是证书认证大概过程?
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1038 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 28ms UTC 23:00 PVG 07:00 LAX 16:00 JFK 19:00
    Do have faith in what you're doing.
    ubao 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