Lompat ke konten
dokumentasi.id
Commit dd5271a
v2
Star6,4 rb

Kamu membaca versi lama. Halaman ini hanya bisa dibaca.

3

Instalasi dan Dependensi

APKLeaks bisa dipasang lewat tiga jalur: paket PyPI, salinan source, atau image Docker. Ketiganya berujung pada kelas APKLeaks yang sama, sehingga hasil pemasangan hanya berbeda pada artefak yang tersedia di disk. Di samping paketnya sendiri, ada dua dependency yang menentukan apakah pemindaian bisa berjalan: pustaka Python pyaxmlparser dan binary jadx.

graph TD
    pypi["pip3 install apkleaks"] --> ep["entry point apkleaks.cli:main"]
    source["git clone + pip3 install -r requirements.txt"] --> tree["working tree: apkleaks.py, config/regexes.json"]
    docker["docker pull dwisiswant0/apkleaks:latest"] --> image["image python:3-slim + openjdk-17-jre-headless + jadx 1.2.0"]
    ep --> cls["APKLeaks.__init__"]
    tree --> cls
    image --> cls
    req["requirements.txt: pyaxmlparser>=0.3.24"] --> cls
    cls --> jadx["self.jadx"]
    image -.->|"symlink /usr/local/bin/jadx"| jadx
    cls --> apkinfo["apk_info() lewat pyaxmlparser.APK"]
    style pypi fill:#2d7d46,color:#fff
    style source fill:#2d7d46,color:#fff
    style tree fill:#2d7d46,color:#fff
    style ep fill:#2d7d46,color:#fff
    style docker fill:#336791,color:#fff
    style image fill:#336791,color:#fff
    style req fill:#8b5cf6,color:#fff
    style apkinfo fill:#8b5cf6,color:#fff
    style cls fill:#f59e0b,color:#000
    style jadx fill:#f59e0b,color:#000
%% fig: Tiga jalur pemasangan menuju satu kelas APKLeaks
%% desc: Setiap jalur pemasangan menyediakan paket apkleaks, konfigurasi pola, dan binary jadx dengan cara yang berbeda, lalu bertemu di APKLeaks.__init__.
Fig. 1: Tiga jalur pemasangan menuju satu kelas APKLeaksSetiap jalur pemasangan menyediakan paket apkleaks, konfigurasi pola, dan binary jadx dengan cara yang berbeda, lalu bertemu di APKLeaks.__init__.

Jalur pemasangan

JalurPerintahArtefak yang munculRujukan
PyPIpip3 install apkleakspaket apkleaks dan entry point apkleaks di PATHREADME.md:27-31
Sourcegit clone lalu pip3 install -r requirements.txtworking tree berisi apkleaks.py dan config/README.md:33-41
Dockerdocker pull dwisiswant0/apkleaks:latestimage dengan python:3-slim, JRE, dan jadxREADME.md:43-49

Jalur PyPI mengandalkan metadata di pyproject.toml. Berkas itu menetapkan requires-python = ">=3.8" dan mendaftarkan entry point apkleaks = "apkleaks.cli:main", sehingga setelah pemasangan perintah apkleaks langsung tersedia di shell (pyproject.toml:13-17). Daftar dependency tidak ditulis manual di pyproject.toml; nilainya diambil dari requirements.txt lewat dynamic = ["dependencies", "version"] (pyproject.toml:22-24).

Pemasangan lewat PyPI juga harus membawa berkas pola default. Karena itu pyproject.toml menyertakan paket config* dan memasang *.json sebagai package data (pyproject.toml:26-30). Tanpa bagian ini, config/regexes.json tidak ikut terpasang. Peran berkas tersebut dijelaskan di Kustomisasi Pola Sendiri.

Jalur source hanya membutuhkan clone repository dan satu perintah pip3 install -r requirements.txt (README.md:33-41). Untuk pekerjaan yang berulang, Makefile menyediakan target venv dan setup yang membuat virtualenv lalu memasang requirements.txt beserta build dan twine (Makefile:16-25).

Jalur Docker berbeda karena semua dependency sistem sudah dipanggang di dalam image. Dockerfile memakai basis python:3-slim, memasang openjdk-17-jre-headless dan unzip, lalu mengunduh jadx-1.2.0.zip, mengekstraknya ke /opt/jadx, dan membuat symlink /usr/local/bin/jadx (Dockerfile:1-16). Sisa Dockerfile menyalin requirements.txt, menjalankan python -m ensurepip dan pip install -r requirements.txt, lalu menyalin seluruh konteks ke /app dengan ENTRYPOINT ["python", "/app/apkleaks.py"] (Dockerfile:18-25). Karena entry point berupa daftar argumen, opsi CLI Docker ditulis setelah nama image, seperti yang dicontohkan di Penggunaan CLI.

Dependensi Python

Hanya ada satu dependency Python yang dideklarasikan, yaitu pyaxmlparser>=0.3.24 (requirements.txt:1). Pustaka ini diimpor sebagai from pyaxmlparser import APK (apkleaks/apkleaks.py:19) dan dipakai oleh apk_info() yang mengembalikan APK(self.file) (apkleaks/apkleaks.py:41-42). Artinya, metadata APK seperti nama paket dan versi dibaca oleh pyaxmlparser, bukan oleh jadx.

Dependensi binary jadx

jadx adalah dependency yang tidak diselesaikan oleh pip. Pada __init__, APKLeaks mencari binary itu lewat shutil.which("jadx"); jika tidak ditemukan, ia memakai cadangan ../jadx/bin/jadx di luar direktori paket, dengan akhiran .bat bila os.name == "nt" (apkleaks/apkleaks.py:36). README menegaskan bahwa jadx diunduh otomatis ketika tidak ada di sistem (README.md:51-53).

stateDiagram-v2
    [*] --> CekJadx
    CekJadx --> JadxSiap: os.path.exists(self.jadx)
    CekJadx --> Tanya: "Can't find jadx binary."
    Tanya --> Unduh: jawaban yes atau y
    Tanya --> Batal: jawaban no atau n
    Unduh --> JadxSiap: dependencies() ekstrak jadx 1.2.0
    Unduh --> Gagal: exception saat urlopen atau ZipFile
    Batal --> [*]
    Gagal --> [*]
    JadxSiap --> [*]
    style CekJadx fill:#f59e0b,color:#000
    style Tanya fill:#f59e0b,color:#000
    style Unduh fill:#8b5cf6,color:#fff
    style JadxSiap fill:#2d7d46,color:#fff
    style Batal fill:#dc2626,color:#fff
    style Gagal fill:#dc2626,color:#fff
%% fig: Penyelesaian binary jadx di integrity()
%% desc: integrity() memeriksa keberadaan jadx, menawarkan unduhan lewat dependencies(), dan berhenti bila pengguna menolak atau unduhan gagal.
Fig. 2: Penyelesaian binary jadx di integrity()integrity() memeriksa keberadaan jadx, menawarkan unduhan lewat dependencies(), dan berhenti bila pengguna menolak atau unduhan gagal.

Pemeriksaan itu terjadi di integrity() yang dipanggil main() sebelum decompile(). Bila os.path.exists(self.jadx) bernilai salah, APKLeaks mencetak Can't find jadx binary. lalu menanyakan Do you want to download jadx? (Y/n) dengan jawaban kosong dianggap yes (apkleaks/apkleaks.py:55-77). Bila jawabannya negatif, program berhenti dengan pesan ** Aborted. (apkleaks/apkleaks.py:76-77).

Pengunduhan ditangani dependencies(). Fungsi ini mengambil arsip dari URL rilis jadx-1.2.0.zip, mengekstraknya ke direktori jadx di sebelah paket, lalu menjalankan os.chmod(self.jadx, 33268) agar binary bisa dieksekusi; kegagalan apa pun dicetak sebagai peringatan lalu diakhiri sys.exit() (apkleaks/apkleaks.py:44-53).

⚠️ Jalur source tidak menyertakan jadx. Bila sistem belum punya jadx di PATH dan pengguna menolak unduhan, proses berhenti di integrity() sebelum APK pernah dibaca (apkleaks/apkleaks.py:55-77). Jalur Docker tidak terkena masalah ini karena image sudah memasang jadx dan symlink-nya (Dockerfile:12-16).

Setelah jadx tersedia, decompile() menyusun argumen [self.jadx, self.file, "-d", self.tempdir] dan menambahkan isi --args bila diberikan (apkleaks/apkleaks.py:89-98). Rincian opsi tersebut dibahas di Opsi CLI dan Argumen Disassembler.