破解Java软件,这里提供两种思路, 1)修改主程序,使主程序不调用验证器; 2)修改验证器, 使验证器始终返回true.
用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文件即可.
分享到:
相关推荐
Javaagent和javassist是Java开发中的两个重要工具,它们在软件开发中有着广泛的应用,特别是在动态代理、代码增强和字节码操作等领域。本篇将详细介绍这两个技术,并结合实际示例进行解析。 首先,让我们来了解`...
### 借助jclasslib与javassist修改Java class字节码 #### 一、引言 在软件开发过程中,有时我们可能面临一种情况:即需要对已经编译好的`.class`文件进行修改,但手中并没有对应的源代码。这种情况下,我们可以...
通过这个工具,开发者无需重新编译源代码就能对Java类进行修改和增强,这对于理解和调试已部署的软件或者创建元编程应用非常有用。 Javassist主要提供了以下功能: 1. **字节码生成**:Javassist可以动态生成类的...
在IT行业中,`Java Agent`和`javassist`是两个非常关键的技术,它们在软件开发、测试和性能优化中发挥着重要作用。`Java Agent`允许我们对Java应用程序进行预处理,比如字节码注入,而`javassist`库则提供了一个方便...
在学习这部分内容时,读者可能需要创建一个名为`fruity88`的项目,并使用`javassist-3.9.0.jar`来实现某些动态类生成或字节码操作的功能。 总的来说,这个压缩包包含的资源是学习《Thinking in Java》第四版中关于...
使用这个版本,开发者可以将Javaassist集成到他们的项目中,通过引入相应的jar包(javassist.jar)来利用其提供的功能。 在实际应用中,Javaassist的工作流程通常包括以下步骤: 1. 加载类:首先,你需要使用`...
《深入理解Java动态代理:jbosss-javassist与JByteMode整合》 在Java开发中,有时我们需要在运行时动态地修改或增强类的行为,这时动态代理技术就显得尤为重要。Javassist和JByteMode是两个强大的工具,分别在不同...
Javassist(JAVA编程助手)进行JAVA字节码操作 易于理解的它是一个用于在Java中编辑字节码的类库;它支持Java 程序在运行时定义一个新类,并在 JVM加载它。与其他类似的字节码编辑器不同,Javassist提供了 API的...
`javassist-3.7.ga.jar` 文件是 Javaassist 库的一个版本,版本号为 3.7 GA(General Availability),意味着这是一个公开可用的稳定版本。 Javaassist 提供了一系列的 API,使得开发者可以方便地读取、修改和创建 ...
总之,Javassist通过其灵活的API使得在运行时对Java代码进行修改变得简单,它在代码热更新、插件系统等领域有着广泛的应用。`HotPatchDemo`是一个很好的实例,帮助我们理解如何实际操作这一过程。通过熟练掌握...
7. **TypeConverter**:Javaassist 提供了转换机制,将 Java 对象与字节码表达式之间进行转换,使得你可以方便地在字节码操作中使用 Java 对象。 8. **ClassFile** 和 **ConstPool**:这两个类分别代表 Class 文件...
Javassist(JAVA 编程助手)使 Java 字节码操作变得简单。它是Java中用于编辑字节码的类库;它使 Java 程序能够在运行时定义新类,并在 JVM 加载时修改类文件。与其他类似的字节码编辑器不同,Javassist 提供两个...
在实际操作中,我们可能会使用如 ASM、ByteBuddy 或 Javassist 这样的字节码库来帮助创建和应用 ClassFileTransformer。这些库提供了友好的 API,让我们能够方便地读取、修改和生成字节码。 然而,这种方法并不总是...
Java字节码工程工具包Javassist 版本 3版权所有 (C) 1999-2023 Shigeru Chiba,保留所有权利。Javassist(JAVA 编程助手)使 Java 字节码操作变得简单。它是一个用于编辑 Java 字节码的类库它使 Java 程序能够在运行...
Java Agent技术是Java平台提供的...通过研究和运行这样的演示项目,开发者可以学习如何创建自己的Java Agent,掌握使用字节码操作库来动态修改Java应用程序的能力,以及如何在实际的软件开发和系统维护中应用这一技术。
这个 "javassist-3.15.0-GA.jar" 文件就是一个 JAR 包,包含了 Javaassist 库的所有类和方法,使得开发者可以直接在他们的项目中引用和使用。 Javaassist 提供了一套API,可以方便地对字节码进行操作。这些操作包括...
2. **使用加壳技术**:理论上讲,Java可以使用类似于C语言的加壳技术,但在实际操作中存在诸多限制。例如,Java虚拟机(JVM)本身并不支持动态加载加密后的类文件。 #### 三、Java加壳的可能性与实践 传统观点认为,...
4. **字节码表达式**:Javaassist支持一个类似于Java语法的表达式API,可以用它来生成字节码。这种表达式可以被转换为对应的字节码序列,进而添加到类的方法中。 5. **与反射的结合**:虽然Java的反射API已经足够...
阿里巴巴作为全球知名的技术公司,其对软件开发有着严格的规范和标准,尤其是对于Java编程语言。最新发布的《Alibaba Java Coding Guidelines 2.1.1》是对Java开发人员的一份重要指南,旨在提升代码质量,保证项目...
通过上述知识点的详细解读,可以看出,论文所探讨的解析器对于处理大型Java软件系统的错误定位和故障分析具有重要实践价值。借助Java反射机制和Javassist等工具,可以有效地建立类方法关系图,并进一步扩展为软件...