浅尝Restful Fast Request插件,一句话完成 逆向过程
本文根据吾爱破解论坛,作者:lvbuqing的帖子浅尝Restful Fast Request插件,一句话完成 逆向过程进行操作复现
1.插件简介
2.破解流程
2.1 检测1-ide层
根据Jetbrains官网插件开发文档了解到,付费插件的配置文件中都会有product-descriptor
标签
属性介绍
属性名 | 描述 |
---|---|
code | 销售系统中使用的插件产品代码,代码必须提前和Jetbrains约定好,按照要求来。 |
release-date | 格式中主要版本发布的日期YYYYMMDD |
release-version | 特殊数字格式的主要版本 |
安装完重新idea后会卡在
,所以先解决这个第一层校验。
1.找到插件的lib
目录
我使用的Toolbox
,目录在:C:\Users\Administrator\AppData\Local\JetBrains\Toolbox\apps\IDEA-U\ch-0\231.8109.175.plugins\Restful Fast Request\lib
该插件的关键jar
包为:instrumented-restful-fast-request-pro-2023.1.3.2.jar
2.直接使用压缩包打开jar
文件,使用vscode
编辑 META-INF\plugin.xml
直接移除这一行。
3.我们重新打开idea ,发现已经去掉了收费标识,,我们需要启用后重启
2.2 检测2-插件层
虽然功能键已经展示出来,但是点击后还是无法使用,会提示先激活插件。
jar
包解压,发现程序做了国际化,然后全局检索关键字
得到关键key
值为:ActivatePluginNeed
使用Jadx
对程序进行反编译后全局搜索关键key
发现如下的调用
继续查l11Il1III1111.l111I1llllI()
这个方法
也就是让这个方法返回false
接下来的问题就是如何修改原来的jar
文件中的字节码文件
可以根据Javassist
来实现
3.Javassist
Javassist (Java Programming Assistant) makes Java bytecode manipulation simple. It is a class library for editing bytecodes in Java; it enables Java programs to define a new class at runtime and to modify a class file when the JVM loads it. Unlike other similar bytecode editors, Javassist provides two levels of API: source level and bytecode level. If the users use the source-level API, they can edit a class file without knowledge of the specifications of the Java bytecode. The whole API is designed with only the vocabulary of the Java language. You can even specify inserted bytecode in the form of source text; Javassist compiles it on the fly. On the other hand, the bytecode-level API allows the users to directly edit a class file as other editors.
3.1 什么是javassist
javassist
是一个处理Java字节码的jar包,里面有很多类。
3.2 什么是ClassPool
可以想象成一个容器,里面放着指定路径下的class文件,使用javassist对类进行操作的时候,必须先创建一个ClassPool。
它也可以暂时存放我们编辑的class文件,等写完后再拿出来放到指定的位置。我们对class文件的操作是在ClassPool中的进行的。
假如我们想获取一个Class文件进行修改,如果ClassPool的路径中没有它,那么我们是找不到的,必须使用insertClassPath();
函数将class文件路径导入ClassPool中才可以。
如果我们不自定义路径,那么它的类的搜索路径包括平台库、扩展库以及由-classpath选项或CLASSPATH环境变量指定的搜索路径。
3.3 什么是CtClass
CtClass是javassist中的一个类文件,它的对象可以理解成一个class文件的抽象表示。
一个CtClass对象可以用来修改一个class文件。
4.Javassist实操修改字节码文件
4.1 项目导包
<dependency>
<groupId>org.javassist</groupId>
<artifactId>javassist</artifactId>
<version>3.27.0-GA</version>
</dependency>
4.2 编写代码
package com.lisok.test;
import javassist.*;
import java.io.IOException;
public class HookMain {
public static void hookMethod() throws NotFoundException, CannotCompileException, IOException {
ClassPool pool = ClassPool.getDefault();
// jar包路径
pool.insertClassPath("D:\\Tools\\AndroidReverse\\instrumented-restful-fast-request-pro-2023.1.3.2.jar");
CtClass driverClass = pool.get("io.github.kings1990.plugin.fastrequest.cofig.l11Il1III1111");
CtMethod[] declaredMethods = driverClass.getDeclaredMethods();
CtMethod hookMethod = null;
for (CtMethod declaredMethod : declaredMethods) {
String name = declaredMethod.getName();
if (name.equals("l111I1llllI")) {
hookMethod = declaredMethod;
break;
}
}
if (hookMethod != null) {
System.out.println(hookMethod.getDeclaringClass());
hookMethod.setBody("return false;");
}
driverClass.writeFile("writefile");
}
public static void main(String[] args) {
try {
hookMethod();
} catch (NotFoundException | CannotCompileException | IOException e) {
e.printStackTrace();
}
}
}
运行后项目会出现writefile
目录,找到目标文件后,使用压缩包打开原jar
文件进行替换即可。
5.效果图
引用
1.浅尝Restful Fast Request插件,一句话完成 逆向过程:https://www.52pojie.cn/forum.php?mod=viewthread&tid=1776910&pid=46474186&page=1&extra=#pid46474186
2.Javassist by jboss-javassist:https://www.javassist.org/
3.java中javassist、ClassPool、CtClass、Apache CC2链学习:https://blog.csdn.net/qq_41874930/article/details/121273650
4.Javassist用法详解:https://www.jb51.net/article/205638.htm
按照方法做的,现在什么都显示不了了
同样的问题,请问你解决了吗
旧版的可能还有用,新版已经失效了,请注意发布时间。
按照文档做的,并没有成功,能用邮箱交流一下吗?
主要就是提示激活插件的那个一步
你是怎么做的,成功了吗
没有
大佬 jar包能分析一下吗