锁定老帖子 主题:用javassist破解java软件
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2010-05-07
最后修改:2010-05-09
用javassist可以实现这两种方式, 本质上一样的, 都是修改class文件达到目的. 很明显, 第一种烦琐, 第二种简单. 以下以第二种为例, 简单模拟一下. 这是主程序: package trial.crack; public class App { public static void main(String[] args){ System.out.println(Checker.check()); } } 这是验证器: package trial.crack; public class Checker { public static boolean check(){ return false; } } 验证器的check方法负责验证工作, 该方法始终返回false. 这是Cracker: package trial.crack; import java.lang.reflect.Method; import javassist.ClassPool; import javassist.CtClass; import javassist.CtMethod; import javassist.NotFoundException; public class Cracker { public static void main(String[] args) throws Exception { String classname = "trial.crack.Checker"; String methodname = "check"; ClassPool pool = ClassPool.getDefault(); CtClass cc = pool.get(classname); printClass(classname); try { CtMethod fMethod = cc.getDeclaredMethod(methodname, null); fMethod.setBody("return true;"); cc.writeFile("D:/Program Files/workspace_myeclipse/javassist-sample/bin"); } catch (NotFoundException e) { System.out.println(methodname + " not found!"); } } public static void printClass(String classname) { try { System.out.println("Methods of Class " + classname + ":"); Class c = Class.forName(classname); Method[] method = c.getDeclaredMethods(); for (int i = 0; i < method.length; i++) { System.out.println(method[i]); } System.out.println(); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } Cracker的原理: 修改Checker的check方法的函数体, 使其始终返回true. 然后将修改写到硬盘上(这里使用的是项目的bin目录,即class文件存放地),也就是生成字节码(.class文件), 来覆盖原来的class文件. 演示: 1)编译运行App 2)编译运行Cracker 3)运行APP 可以看到, 对于步骤1)和步骤3),控制台上会先后打印出: false true 硬解成功. 实战破解时, 采用类似的方式修改验证器,然后生成class文件到任意指定的目录, 然后将class文件覆盖软件原来的class文件即可. 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2010-05-07
如果是破解其他java程序,你怎么得到验证器的类名和方法名?
|
|
返回顶楼 | |
发表时间:2010-05-07
whoamiwangwb 写道 如果是破解其他java程序,你怎么得到验证器的类名和方法名?
反编译主程序. 不过如果主程序使用了反反编译的招术, 那么, 视采用的是哪种反反编译技术, 会加大反编译难度, 或者从反编译后得出来的代码中很难找到我们需要的信息. 呵呵, 复杂了. |
|
返回顶楼 | |
发表时间:2010-05-08
谁做验证的程序会用一个方法来返回true和false,也太。。。。闻所未闻
|
|
返回顶楼 | |
发表时间:2010-05-08
是啊,比如对java字节码做一个简单的移位加密处理等等,那如何破解呢还
|
|
返回顶楼 | |
发表时间:2010-05-08
只能反编译.看源代码.找出加密部分.然后..再找出解密部分.或者自己解密.经验啊,,,不要鄙视我.呵呵
|
|
返回顶楼 | |
发表时间:2010-05-08
最后修改:2010-05-08
嗯, 看来仅仅是想当然的东西, 实用价值不大.
一般需要破解的也就是收费的商用软件吧, 而他们反反编译一般会做得非常好. |
|
返回顶楼 | |
发表时间:2010-05-08
java大多部署互联网服务。。。联网认证我觉得才是王道啊,哈哈
|
|
返回顶楼 | |
发表时间:2010-05-08
有那么麻烦吗?现在的反编译软件很多,如:jak,jd之类的,直接拖进去不就ok?想看什么都可以喽,不过对已经混淆的代码,还是需要时间去研究的。
|
|
返回顶楼 | |
发表时间:2010-05-08
如果中国没有盗版,每个人都为他们使用的软件付钱。那么我们程序员的工资至少提高一倍。但是我们每天都在叫嚣自己工作多么不值。但是我去肆无忌惮的无视着别人的劳动。
|
|
返回顶楼 | |