pyjadx
JADX के लिए JPype के माध्यम से Python बाइंडिंग्स। Android APK और DEX फ़ाइलों को Python से Java स्रोत में डीकंपाइल करें।
from pyjadx import Jadx
with Jadx("app.apk") as jadx:
for cls in jadx.classes:
print(cls.full_name)
print(cls.code)
pyjadx क्यों?
JADX एक अग्रणी ओपन-सोर्स Android डीकंपाइलर है — यह Dalvik बाइटकोड से साफ Java/Kotlin स्रोत उत्पन्न करता है, class hierarchies, generics, exception handling और annotations को संरक्षित करता है। pyjadx इसे बिना सबप्रोसेस ओवरहेड के Python में लाता है: JADX JPype के माध्यम से इन-प्रोसेस चलता है।
इंस्टॉल करें
आवश्यकताएँ: JDK 11+ (JADX JARs पहली बार उपयोग पर स्वचालित रूप से डाउनलोड हो जाते हैं)।
त्वरित आरंभ
from pyjadx import Jadx
with Jadx("app.apk") as jadx:
# सभी शीर्ष-स्तरीय क्लासेस (आंतरिक क्लासेस cls.inner_classes के माध्यम से)
for cls in jadx.classes:
print(cls.full_name, len(cls.methods), "methods")
# पूर्ण योग्य नाम से खोजें
main = jadx.search_class("com.example.MainActivity")
if main:
print(main.code)
# मेथड-स्तरीय डीकंपाइलेशन
for method in main.methods:
print(f"{method.name}: {method.code}")
# क्रॉस-रेफरेंसेस
for method in main.methods:
print(f"{method.name} called by: {[c.name for c in method.callers]}")
# पैकेज नेविगेशन
for pkg in jadx.packages:
print(pkg.name, len(pkg.classes), "classes")
समर्थित इनपुट
| प्रारूप | उदाहरण |
|---|
| APK | Jadx("app.apk") |
| DEX | Jadx("classes.dex") |
| Multi-DEX APK | पारदर्शी रूप से संभाला जाता है — सभी क्लासेस मर्ज हो जाती हैं |
API संदर्भ
Jadx(path, *, threads=None, mode="auto", code_cache=False)
मुख्य प्रवेश बिंदु। कॉन्टेक्स्ट मैनेजर के रूप में उपयोग करें या load()/close() को मैन्युअल रूप से कॉल करें।
गुण:
मेथड्स:
JavaClass
JavaMethod
JavaField
JavaPackage
एस्केप हैच
प्रत्येक रैपर अपने अंतर्निहित JADX Java ऑब्जेक्ट को .java के माध्यम से एक्सपोज़ करता है। यह आपको किसी भी JADX API को कॉल करने देता है जिसे हमने अभी तक रैप नहीं किया है:
with Jadx("app.apk") as jadx:
cls = jadx.search_class("com.example.Foo")
# JADX Java API को सीधे कॉल करें
code_info = cls.java.getCodeInfo()
JVM सह-अस्तित्व
pyjadx एक ही प्रक्रिया में अन्य JPype उपभोक्ताओं (जैसे PyGhidra) के साथ सह-अस्तित्व में रहता है। यदि JVM पहले से चल रहा है, तो pyjadx.start() मौजूदा क्लासपथ में JADX JARs जोड़ता है। यदि नहीं, तो यह एक शुरू करता है।
import pyghidra
pyghidra.start() # Ghidra के लिए JVM शुरू करता है
import pyjadx
pyjadx.start() # मौजूदा JVM में JADX JARs जोड़ता है — कोई विरोध नहीं
कॉन्फ़िगरेशन
कस्टम JADX इंस्टॉलेशन:
# पर्यावरण चर के माध्यम से
# export JADX_HOME=/opt/jadx
# या रनटाइम पर
import pyjadx
pyjadx.start(jadx_home="/opt/jadx")
JAR कैशिंग: JADX JARs पहली बार उपयोग पर Maven Central से स्वचालित रूप से डाउनलोड होते हैं और ~/.pyjadx/jars/<version>/ पर कैश हो जाते हैं।
लाइसेंस
MIT