作者datoguo (秋)
看板CodeJob
标题Re: [讨论] 序号保护机制
时间Mon Feb 23 21:53:26 2009
※ 引述《jlovet (Want 2 see u no more)》之铭言:
: 谢谢那个lib,
: 您说的都没有错,
: codeproject那的文件就把RSA用来作activation
: 我不用signature的原因是
: 虽然他可以保留住private key
: 但是他只是比对签章对不对,那些pediy的人还是可以很容易改掉一个指令
: 让签章就算不对也可以继续执行软体
可以考虑这样的做法:
先将一段重要的机械码以AES加密,设对称金钥为K,
RSA以公钥检验签章(解密)後,正确的序号可以得到正确的K,
再使用K将机械码解密,该段机械码执行完毕後再加密回来(要做一些防止dump的处理)。
如果使用了不正确的序号,会解出不正确的K'!=K,就无法解密并执行该段机械码。
如此可以使得破解者想籍由改掉指令而破解软体的困难度大增,
我除了这样做之外,还会做一些Anti-Debug及检验机械码是否有被窜改的动作。
其实这样仍然有可能被破解,只是增加破解者破解的困难度而已。
一套软体要做到完全不被破解不太可能,
但是我们可以做到短时间内不被破解,
让软体卖出後维持一段寿命,让公司赚钱,然後跟老板交差了事,呵呵呵。
: 如果用来sign软体本身当序号的话
: 那我就觉得有疑问了
: 对同一个文件不是应该会生出同样的signature吗?
这部份我是用RSA签章做,可以加一些参数,让它产生不同的签章,
然後再搭配前文的方式(用ECDSA就无法做到前文的方法了)。
我的做法是sign使用者名称时,再加上一些参数一起sign,
使得同样的使用者名称可以产生不同序号。
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 118.169.103.110
1F:推 jlovet:是,我是这麽做的,只是我是用ECIES.然後想办法让private 02/23 22:06
2F:→ jlovet:不能生出public,这样就可以放心把private放出去了 02/23 22:06
3F:→ jlovet:其实我搞不太懂RSA是怎麽样,EC就点跟数字简单多了... 02/23 22:07