要为软件写加密狗程序,用的是深思洛克的精锐E,据说是精锐IV的精简版,至于如何精简我也不清楚。想逆向思维一下,先来看看大家是如何破解的。
据我的理解,所谓智能卡芯片狗,就是某公司在做SOC(内部包含处理器,RAM,持久化存储)时,固化了某些安全选项在SOC里面,比如某些内容用密码(PIN)保护,只能写入,不能读出。同时也可能固化某些安全算法在里面。而早期的狗,可能是厂家没有实力或财力自己去设计IC和流片,通常购买8位或16位的处理器,然后附加上EEPROM一类的存储芯片,这种存储分离的结构很容易被读出保护的内容。
如果想破解这种智能卡芯片,只能去逆向硬件,SOC的生产厂家通常会对SOC的强度作出一定的保障,业界有硬件逆向能力的可能没有兴趣去破解这种芯片,而有能力的又对这种民用小东西感兴趣的恐怕没有多少。
那么问题就回到了这种狗的软件上。软件保护我考虑又分成几个阶段。
1、软件给出x
2、狗根据x返回y,即y=f(x)
3、软件根据x和y判断狗的有效性。
1破解者能够和你一样明白,源码(汇编)面前,了无秘密。
2根据前面的描述暂时认为破解者不能硬复制,但是如果你的f很简单的话,通过记录(x,y)集合,可以猜到,然后写入狗里面,也相当于硬复制。
3破解者可以干掉这个过程,暴破。
1和3是软件的功力问题,仅仅针对2,我有个想法是:用RSA算法,把私钥写到狗里面,把公钥保存到软件中,然后验证时,软件随便送一个随机数到狗里面,狗做了别的算法后把结果附加这个随机数,然后用私钥加密送出,软件拿到密文后用公钥解密,如果随机数相同说明是自己的狗,然后再处理其他信息。这样的话是否trace所有的通讯信息也没有用,因为你找不到私钥,所以你不可能不改动软件的情况下复制狗。
如果RSA能够保证狗不被“硬”复制的话,下一步我的想法是内嵌一个自己写的脚本语言,字节码和解释器都自己设计,1和3用脚本语言来完成,这样你要分析我的check(x,y)就得先分析出我的脚本语言解释器,相当于把复杂度用一个放大函数给放大了。
只使用RSA也不一定安全,一个简单的破解思路就是密钥对的替换。因为尽管私钥不在软件中,所谓在狗硬件内永远也不出来。但公钥一定在软件中,如果我向狗里放一个自己的私钥,然后将对应的公钥替换掉软件中原来的,不就得了?
飞天写的那本《软件加密原理及应用》中,提出的概念“算法外置”,才是破解者的地狱。
只使用RSA也不一定安全,一个简单的破解思路就是密钥对的替换。因为尽管私钥不在软件中,所谓在狗硬件内永远也不出来。但公钥一定在软件中,如果我向狗里放一个自己的私钥,然后将对应的公钥替换掉软件中原来的,不就得了?
飞天写的那本《软件加密原理及应用》中,提出的概念“算法外置”,才是破解者的地狱。
是的,这个我有考虑,不是只用RSA,是说用RSA可以保证2,即破解者不能在不更改软件的情况下来复制狗。
算法外置,在目前的应用中,还不太实际,现在的主流狗的计算资源和通讯速度有限,只能内置很简单的算法,既然这样的话,就没有必要内置功能性的算法在狗里面,只是内置一些保护性的代码。而使用复杂的硬件外设的话,比如某些软硬结合的产品,又背离我们的初衷。
还有个建议就是,使用self modify code,适当用狗修改电脑上的源码,防止直接用客户端猜出破解.
多谢建议,如果用虚拟机的话,我考虑把一部分功能性脚本预先用公钥加密,然后存放到程序里,运行时送到狗里用私钥解密,然后送回来到VM里面执行。这样可以防止无狗破解,因为仅用私钥,不存功能代码,能避免因为软件升级而必须升级狗的困境。
如果不考虑效率问题,那建议用最新的产品,,,SENSELOCK不是和VMP公司合作推出新的东西了吗。
不会有效率问题,我说的脚本和VM同VMProtect没有关系,是自己实现一种解释型脚本语言和相应的解释执行器,也不是所有的逻辑都跑在VM里面,仅仅是保护部分,同时交叉部分功能性代码。
VM防破解的重点在于没人愿意花精力去先分析你的VM字节码和执行过程,一旦成为流行VM,那破解也不在话下了。可以认为x86是市面上最流行的VM!
确实,以上所有的都是增加破解的难度,只要是本地执行,就一定可以破解。主要是防止像某些网页写的那样:Hook通讯记录后,直接给出加密狗复制品。
直接复制出通讯的方法已经被封杀,现在的狗可以据说可以做到通讯量撑爆硬盘.
据我了解,这还是目前猜测狗算法的主流方法。现在的狗通讯时没做多少特殊处理,因为理论上也没有太多东西可做!这里的通讯也不仅仅是指硬件通讯。