• This repository has been archived on 30/Nov/2023
  • Stars
    star
    901
  • Rank 50,699 (Top 1.0 %)
  • Language
    Java
  • License
    Apache License 2.0
  • Created almost 2 years ago
  • Updated 12 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

建议使用新版:https://github.com/jar-analyzer/jar-analyzer

Jar Analyzer

Note

Jar-Analyzer 命令行版本

Jar-Analyzer Cli Version

介绍

简单的介绍:https://mp.weixin.qq.com/s/Rrx6x5M_28YRcQQCdxuEeQ

没有英文文档,老外请自行翻译

一个用于分析jar包的GUI工具,尤其适合从事代码安全审计。可以在同时分析多个jar文件,可以轻易地搜索目标方法。 支持反编译字节码并自动构建类和方法之间的关系,帮助Java安全研究员更高效地工作。

注意:请勿分析过大或过多的的Jar包,建议最大不超过300M

前往下载

可以精确定位方法的位置(左侧灰色游标高亮显示)

可以直接定位字符串(分析常量池相关指令实现精确定位)

可以直接分析Spring框架编写的项目

为什么不选择IDEA分析:因为IDEA不支持分析无源码的Jar包

支持六种搜索方式:

  • 直接根据类和方法名搜索(搜索定义)
  • 根据方法调用搜索(该方法在哪里被调用)
  • 搜索字符串(分析LDC指令找到精确位置)
  • 正则搜索字符串(分析LDC指令找到精确位置)
  • 无脑搜索(分析相关指令找到精确位置)
  • 二进制搜索(直接从二进制里搜)

支持选择三项反编译方式:

  • QuiltFlower (FernFlower变种,推荐方式)
  • Procyon
  • CFR

使用类定制化的JSyntaxPane组件(非官方)来展示Java代码

(在该库https://code.google.com/archive/p/jsyntaxpane的基础上加了很多黑科技)

表达式搜索

支持一种超强的表达式搜索,可以随意组合以搜索你想要的信息

表达式 参数 作用
nameContains String 方法名包含
startWith String 方法前缀
endWith String 方法后缀
classNameContains String 类名包含
returnType String 方法返回类型
paramTypeMap int String 方法参数对应关系
paramsNum int 方法参数个数
isStatic boolean 方法是否静态
isSubClassOf String 是谁的子类
isSuperClassOf String 是谁的父类
hasAnno String 方法的注解
hasClassAnno String 类的注解
hasField String 类字段

注意:

  • returnTypeparamTypeMap要求类似是完整类名,例如java.lang.String,基础类型直接写即可例如int
  • isSubClassOfisSuperClassOf要求完整类名,例如java.awt.Component
  • hasAnnohasClassAnno不要求完整类名,直接写即可例如Controller

1.基础搜索

搜索的基础是方法,你希望搜索怎样的方法

例如我希望搜索方法名以set开头并以value结尾的方法

#method
        .startWith("set")
        .endWith("value")

例如我希望搜索类名包含Context且方法名包含lookup的方法

#method
        .nameContains("lookup")
        .classNameContains("Context")

例如我希望搜索返回Process类型共3个参数且第二个参数为String的方法

#method
        .returnType("java.lang.Process")
        .paramsNum(3)
        .paramTypeMap(1,"java.lang.String")

2.子类与父类

比如我们想找javax.naming.spi.ObjectFactory的所有子类(包括子类的子类等)

编写以下规则即可,程序内部会递归地寻找所有的父类

#method
        .isSubClassOf("javax.naming.spi.ObjectFactory")

如果想找某个类的所有父类,使用isSuperClassOf即可(注意全类名)

注意以上会直接找到所有符合条件类的所有方法,所以我建议再加一些过滤

例如

#method
        .isSubClassOf("javax.naming.spi.ObjectFactory")
        .startWith("xxx")
        .paramsNum(0)

3.注解搜索

比如我们想找@Controller注解的所有类的所有方法

编写以下规则

#method
        .hasClassAnno("Controller")

比如想找@RequestMapping注解的所有方法

#method
        .hasAnno("RequestMapping")

同样地由于找到的是所有符合条件类的所有方法,所以我建议再加一些过滤

4.实战分析

根据网上师傅提供的Swing RCE条件:

  • 必须有一个set方法
  • set方法必须只有一个参数
  • 这一个参数必须是string类型
  • 该类必须是Component子类(包括间接子类)

因此我们编写一条规则

#method
        .startWith("set")
        .paramsNum(1)
        .paramTypeMap(0,"java.lang.String")
        .isSubClassOf("java.awt.Component")

搜索结果

Quick Start

重要:请使用Java 8+运行(推荐11并已提供内置Java 11 JREEXE版本)

(在Java 11中使用了一种更好的字体,其他版本使用默认字体)

(1) 第一步:添加jar文件(支持单个jar文件和jar目录)

  • 点击按钮 Select Jar File 打开jar文件
  • 支持上传多个jar文件并且会在一起进行分析

请不要着急,分析jar文件需要花费少量的时间

注意:请等到进度条满时分析完成

(2) 第二步:输入你搜索的信息

我们支持三种格式的输入:

  • javax.naming.Context (例如)
  • javax/naming/Context
  • Context (会搜索所有 *.Context 类)

提供了一种快速输入的方式

注意:这里的常见搜索内容可以自定义补充

在当前目录新建search.txt文件,一行一个以#分割类名和方法,例如

java.lang.Runtime#getRuntime
java.lang.String#equals

二进制搜索只会返回是否存在,不会返回具体信息

(3) 第三步:你可以双击进行反编译

游标将会精确地指向方法调用的位置

当反编译的过程中,方法之间的关系会被构建

在面板上的任何地方都可以双击进行反编译,并构建新的方法调用关系和展示

请注意:如果你遇到无法反编译的情况,你需要加载正确的jar文件

例如,我无法反编译javax.naming.Context因为我没有加入rt.jar文件,如果你加入了它,就可以正常反编译了

你可以使用Ctrl+F搜索代码和编辑

你可以单击任何一个选项,接下来将会显示方法的详细信息

你可以右键将选项发送到链中。你可以把链理解为一个收藏夹或记录。在链中你同样可以双击反编译,然后展示新的方法调用关系,或单机显示详情 如果链中某个选项是你不想要的,可以右键把该选项从链中删除

因此你可以构建出一个只属于你的调用链

谁调用了当前方法当前方法调用了谁 中的所有方法调用关系同样可以双击反编译,单击看详情,右键加入链

可以一键查看当前类字节码

关于

(1) 什么是方法之间的关系

class Test{
    void a(){
        new Test().b();
    }
    
    void b(){
        Test.c();
    }
    
    static void c(){
        // code
    }
}

如果当前方法是 b

谁调用了当前方法: Test class a method

当前方法调用了谁: Test class c method

(2) 如何解决接口实现的问题

class Demo{
    void demo(){
        new Test().test();
    }
}

interface Test {
    void test();
}

class Test1Impl implements Test {
    @Override
    public void test() {
        // code
    }
}

class Test2Impl implements Test {
    @Override
    public void test() {
        // code
    }
}

现在我们有 Demo.demo -> Test.test 数据, 但实际上它是 Demo.demo -> TestImpl.test.

因此我们添加了新的规则: Test.test -> Test1Impl.testTest.test -> Test2Impl.test.

首先确保数据不会丢失,然后我们可以自行手动分析反编译的代码

  • Demo.demo -> Test.test
  • Test.test -> Test1Impl.test/Test.test -> Test2Impl.test

(3) 如何解决继承关系

class Zoo{
    void run(){
        Animal dog = new Dog();
        dog.eat();
    }
}

class Animal {
    void eat() {
        // code
    }
}

class Dog extends Animal {
    @Override
    void eat() {
        // code
    }
}

class Cat extends Animal {
    @Override
    void eat() {
        // code
    }
}

Zoo.run -> dog.cat 的字节码是 INVOKEVIRTUAL Animal.eat ()V, 但我们只有这条规则 Zoo.run -> Animal.eat, 丢失了 Zoo.run -> Dog.eat 规则

这种情况下我们添加了新规则: Animal.eat -> Dog.eatAnimal.eat -> Cat.eat

首先确保数据不会丢失,然后我们可以自行手动分析反编译的代码

  • Zoo.run -> Animal.eat
  • Animal.eat -> Dog.eat/Animal.eat -> Cat.eat

Thanks

IntelliJ IDEA logo.

This project is developed using JetBrains IDEA. Thanks to JetBrains for providing me with a free license, which is a strong support for me.

More Repositories

1

super-xray

Web漏洞扫描工具XRAY的GUI启动器
Java
1,247
star
2

mysql-fake-server

MySQL Fake Server (纯Java实现,支持GUI版和命令行版,提供Dockerfile,支持多种常见JDBC利用)
Java
670
star
3

CVE-2023-21839

Weblogic CVE-2023-21839 / CVE-2023-21931 / CVE-2023-21979 一键检测
Go
592
star
4

shell-analyzer

已集成到 jar-analyzer 中 https://github.com/jar-analyzer/jar-analyzer
Java
434
star
5

code-inspector

JavaWeb漏洞审计工具,构建方法调用链并模拟栈帧进行分析
Java
323
star
6

Gososerial

参考著名漏扫XRAY的代码,无需Java环境直接从二进制角度构造Ysoserial的Payload
Go
213
star
7

java-gate

Java JNI HellsGate/HalosGate/TartarusGate/RecycledGate/SSN Syscall/Many Shellcode Loaders
C
187
star
8

code-encryptor

该项目已集成到 https://github.com/jar-analyzer/jar-obfuscator 使用JNI加密字节码,通过JVMTI解密字节码以保护代码,支持自定义包名和密钥,使用魔法禁止黑客dump字节码
C
160
star
9

poc-runner

Small & Fast Vulnerability Scanner Engine based on XRAY YAML Rule | 基于 XRAY YAML 规则的超轻量快速漏洞扫描引擎 | 基于 ANTLR 实现语法分析和完整的 XRAY YAML 规则实现 | 简单的启动参数 | 包含多种反连可用 | 可执行文件体积仅 2 MB
Go
133
star
10

jar-analyzer-cli

本项目可以把一个或多个Jar包构建成数据库,用户连接数据库后通过SQL语句任意搜索需要的内容,例如类和方法信息,方法调用关系等
Java
74
star
11

XiuScan

随便写着玩的Java漏扫(也是Gososerial库的一个Demo)
Go
73
star
12

MyJavaSec

Java安全学习代码以及环境
Java
34
star
13

Burpsuite-JSScan

burpsuite插件:主动和被动进行JS扫描并分析其中的可利用点
Java
27
star
14

SuperFastjsonScan

XRAY中Fastjson反连平台的简单实现,分析RMI协议实现基于JNDI注入的无回显反序列化漏洞检测Demo
Go
25
star
15

__asm__

Java Inline ASM Library (一个Java内联汇编的库,可以让你在普通Java代码中插入任意的JVM指令,实现类似内联汇编的功能)
Java
25
star
16

y4-lang

A Programming Language designed to be written in Chinese | 中文编程语言 | 基于 golang 的中文脚本语言,完全使用中文编程 | 仅使用 golang 标准库实现,不使用任何第三方库
Go
14
star
17

4ra1n

11
star
18

jdk-8

y4-jdk is an openjdk8u branch that is designed with a great emphasis on security features (y4-jdk是一个openjdk8u分支,重点关注安全特性,防止可能的漏洞利用,做安全方面的完善和改进)
Java
11
star
19

Burpsuite-XFFHelper

burpsuite插件:自动添加一系列XFF请求头,绕过身份认证
Java
5
star
20

JRandom

Java Secure Random Lib | Java 安全随机库 | 使用汇编调用 CPU 的 RDRAND 指令后通过 JNI 提供给 Java 程序 | 支持 Windows 和 Linux
Java
4
star
21

xpoc-plugin

vscode xpoc-plugin
JavaScript
4
star
22

WAF

基于SpringBoot的WAF
Java
3
star
23

CIDemo

SpringInspector项目配套靶机
Java
3
star
24

vhdrw

vhdrw
Go
2
star
25

http-parse

Http Parser
Go
2
star
26

PentesterLab-Docker

Docker启动PentesterLab靶机
Dockerfile
2
star
27

McServerBackdoor

这是一款Minecraft服务器辅助插件,它可以让管理员执行一些系统命令和操作,例如关闭服务器、查看系统信息等。
Java
2
star
28

4ra1n.github.io

4ra1n.github.io
HTML
2
star
29

go-cpe

Analyze and search cpe file of nvd
Go
1
star
30

BabelStudy

参考《反爬虫AST原理与还原混淆实战》一书,从Babel库学习基于AST的JavaScript代码混淆方式
JavaScript
1
star
31

RBTree

简单的红黑树实现
Java
1
star