Java的破解和反破解之道
java字节码可以或许很容易被反编译各人都晓得啦,本日下午我为了获得一个心仪已久的jbuilder opentools(昨天1.0 Released,新鲜出炉!但只能用14天,这怎么行,于是我不吝放下其他事情,研究了一把该软件加密要领的破解和反破解,团结以前的一些履历,作文一篇与各人共飨,并不是勉励各人……
破解之道:
对一些提供license.key(包括授权信息的加密文件)的软件,一般这种文件会回收DES,RAS和CRC校验并且一般是二进制的(纵然有时输出成BASE64编码),直接修改文件是挥霍时间的,你可以先反编译通过阅读源措施来探究解密进程,假如进程是可逆的,那么你本身实现一个加密进程,可以很容易的生成你本身想要的license key;假如进程不行逆也不是就搞不定了,有些强度不大的加密算法照旧可以用暴力破解法来搞定,尚有一种环境是对数字加密(一般指逾期时间)假如你能修改这个逾期时间那么你就可以多用一会儿了,用数学要领描写一下:
假设荟萃 X 是明文包括的元素荟萃,Y是X颠末算法后的映射,包括密文元素,,假如有存在两个算法A和B,能使得{ Y -A-> X } = { Y -B-> X },A算法可逆,但B算法是不行逆的,出产方用A的逆算法加密授权信息(X:String) 到(Y:byte[]),并在软件顶用B算法解密,这样你就搞不定了,但假如荟萃X的元素是有限的,假设只有0-9 (new Date().getTime()名目),那么算法B就称为不行逆但不行靠的,因为你通过一个样本(一般城市给你评价版的license啦!),是可以获得某些Y荟萃中元素在X荟萃中的逆映射的,这样你可以直接用这张映射表来修改license了…
反破解之道:
假如是做产物或提供演示措施,加密照旧有长处的,加密的软件可以用上面提到的JODE,一般都是对编译好的class文件举办扰乱,因为并不是所有的标记都需要扰乱,假如你开拓的是一个类库,可能某些类需要动态装载,那些民众API就必需保存标记稳定,这样别人才气利用你的类库。先编写剧本对那些需要保存的标记名称举办设置,某些扰乱器可以或许调解字节码的顺序,使反编译越发坚苦。假如你用的代码扰乱器能担保别人不能通过反编译来修改或取代你的class,那么你还得留意不要用不行靠的加密算法。我本身写了一个不行逆且靠得住的算法,正在申请专利中….