Skip to content

Commit 80d5a46

Browse files
committed
first commit
0 parents  commit 80d5a46

37 files changed

+5270
-0
lines changed

.github/workflows/release.yml

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
name: Jarida Release
2+
3+
on:
4+
workflow_dispatch:
5+
6+
permissions:
7+
contents: write
8+
9+
jobs:
10+
build-release:
11+
runs-on: ubuntu-latest
12+
steps:
13+
- name: Checkout
14+
uses: actions/checkout@v4
15+
with:
16+
fetch-depth: 0
17+
18+
- name: Set up JDK
19+
uses: actions/setup-java@v4
20+
with:
21+
distribution: temurin
22+
java-version: '21'
23+
24+
- name: Bump version
25+
id: bump
26+
run: |
27+
python - <<'PY'
28+
import xml.etree.ElementTree as ET
29+
import re
30+
from pathlib import Path
31+
32+
pom = Path("pom.xml")
33+
tree = ET.parse(pom)
34+
root = tree.getroot()
35+
ns = {"m": "http://maven.apache.org/POM/4.0.0"}
36+
version = root.find("m:version", ns)
37+
if version is None or not version.text:
38+
raise SystemExit("Version not found in pom.xml")
39+
m = re.match(r"^(\\d+)\\.(\\d+)\\.(\\d+)$", version.text.strip())
40+
if not m:
41+
raise SystemExit(f"Unexpected version format: {version.text}")
42+
major, minor, patch = map(int, m.groups())
43+
patch += 1
44+
new_version = f"{major}.{minor}.{patch}"
45+
version.text = new_version
46+
tree.write(pom, encoding="utf-8", xml_declaration=True)
47+
print(new_version)
48+
PY
49+
echo "version=$(python - <<'PY'\nimport xml.etree.ElementTree as ET\nimport re\nns={'m':'http://maven.apache.org/POM/4.0.0'}\nroot=ET.parse('pom.xml').getroot()\nversion=root.find('m:version', ns).text.strip()\nprint(version)\nPY)" >> "$GITHUB_OUTPUT"
50+
51+
- name: Build
52+
run: mvn -DskipTests package
53+
54+
- name: Commit version bump
55+
run: |
56+
git config user.name "github-actions[bot]"
57+
git config user.email "github-actions[bot]@users.noreply.github.com"
58+
git add pom.xml
59+
git commit -m "chore: bump version to ${{ steps.bump.outputs.version }}" || exit 0
60+
git tag "v${{ steps.bump.outputs.version }}"
61+
git push origin HEAD --tags
62+
63+
- name: Release
64+
uses: softprops/action-gh-release@v2
65+
with:
66+
tag_name: v${{ steps.bump.outputs.version }}
67+
name: Jarida v${{ steps.bump.outputs.version }}
68+
files: target/jarida-jadx-plugin-${{ steps.bump.outputs.version }}.jar

.gitignore

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
target/
2+
build/
3+
.m2repo/
4+
.m2-tmp/
5+
6+
# IDEs
7+
.idea/
8+
*.iml
9+
.classpath
10+
.project
11+
.settings/
12+
.vscode/
13+
14+
# OS/files
15+
.DS_Store
16+
Thumbs.db
17+
*.log
18+
*.tmp

README.md

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
# Jarida — Android Runtime Dynamic Tracing
2+
3+
<div align="center">
4+
<pre>
5+
────────────────────────────────────────────────────────────────────────────────
6+
J A R I D A | JADX × Frida | Android Reverse Engineering Toolkit
7+
────────────────────────────────────────────────────────────────────────────────
8+
</pre>
9+
</div>
10+
11+
Jarida (Jadx + Frida) is a Jadx GUI plugin that lets you trace and optionally patch Java method return values **at runtime** using Frida, directly from Jadx’s decompiled view.
12+
13+
## Motivation
14+
Static analysis tells you what the code *could* do. Jarida shows what it *actually* does at runtime, without leaving Jadx. The goal is fast, practical inspection: choose a method → hook it → watch arguments and results live.
15+
16+
## Showcase
17+
![](assets/showcase.gif)
18+
19+
## Key features
20+
21+
- **Exact overload resolution**, supports overloaded methods, static/instance methods, arrays, primitives, objects.
22+
- **Hook logs**: arguments, return value, thread name, optional stack trace.
23+
- **Return patching**: constant / expression / conditional / full script.
24+
- **Multi-hooking**: keep adding hooks without restarting the app.
25+
- **Hook indicators** in Jadx code view.
26+
27+
## Requirements
28+
- Jadx GUI **1.5.x** (tested with 1.5.3)
29+
- Python + `frida` + `frida-tools`
30+
- `adb` in PATH
31+
- `frida-server` running on your device/emulator
32+
33+
## Build (local)
34+
Maven pulls the required Jadx dependencies automatically.
35+
36+
Build:
37+
```
38+
mvn -DskipTests package
39+
```
40+
41+
Jar output:
42+
```
43+
target/jarida-jadx-plugin-<version>.jar
44+
```
45+
46+
## Install in Jadx GUI
47+
1. Open Jadx GUI
48+
2. **Plugins → Install plugin**
49+
3. Select the built jar
50+
4. Restart Jadx
51+
52+
## Troubleshooting
53+
- **Frida CLI not found:** check `frida` and `frida-tools` are installed and on PATH.
54+
- **No device:** confirm `adb devices -l` shows your device.
55+
- **frida-server not running:** restart it from ADB shell.
56+
- **Attach fails:** try Spawn mode or select the correct PID.
57+

assets/showcase.gif

43.2 MB
Loading

pom.xml

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<project xmlns="http://maven.apache.org/POM/4.0.0"
3+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4+
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
5+
<modelVersion>4.0.0</modelVersion>
6+
7+
<groupId>com.jarida</groupId>
8+
<artifactId>jarida-jadx-plugin</artifactId>
9+
<version>0.1.0</version>
10+
<name>Jarida Jadx Plugin</name>
11+
12+
<properties>
13+
<maven.compiler.source>1.8</maven.compiler.source>
14+
<maven.compiler.target>1.8</maven.compiler.target>
15+
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
16+
</properties>
17+
18+
<dependencies>
19+
<dependency>
20+
<groupId>io.github.skylot</groupId>
21+
<artifactId>jadx-core</artifactId>
22+
<version>1.5.3</version>
23+
<scope>provided</scope>
24+
</dependency>
25+
<dependency>
26+
<groupId>io.github.skylot</groupId>
27+
<artifactId>jadx-gui</artifactId>
28+
<version>1.5.3</version>
29+
<scope>provided</scope>
30+
</dependency>
31+
</dependencies>
32+
33+
<repositories>
34+
<repository>
35+
<id>google</id>
36+
<name>Google Maven</name>
37+
<url>https://dl.google.com/dl/android/maven2/</url>
38+
</repository>
39+
</repositories>
40+
41+
<build>
42+
<resources>
43+
<resource>
44+
<directory>src/main/resources</directory>
45+
</resource>
46+
</resources>
47+
<plugins>
48+
<plugin>
49+
<groupId>org.apache.maven.plugins</groupId>
50+
<artifactId>maven-compiler-plugin</artifactId>
51+
<version>3.11.0</version>
52+
<configuration>
53+
<source>${maven.compiler.source}</source>
54+
<target>${maven.compiler.target}</target>
55+
</configuration>
56+
</plugin>
57+
<plugin>
58+
<groupId>org.apache.maven.plugins</groupId>
59+
<artifactId>maven-jar-plugin</artifactId>
60+
<version>3.3.0</version>
61+
<configuration>
62+
<archive>
63+
<manifest>
64+
<addDefaultImplementationEntries>true</addDefaultImplementationEntries>
65+
</manifest>
66+
<manifestEntries>
67+
<Implementation-Title>Jarida Jadx Plugin</Implementation-Title>
68+
<Implementation-Version>${project.version}</Implementation-Version>
69+
</manifestEntries>
70+
</archive>
71+
</configuration>
72+
</plugin>
73+
</plugins>
74+
</build>
75+
</project>

0 commit comments

Comments
 (0)