1.45 GB
57,895 files
Updated 4 days ago
Name
Size
__pycache__
extracted
ghidra
jadx
jadx-fallback
jadx-splits
logs
reports
README.md7.62 kB
xet
build_reports.py4.07 kB
xet
extract_apks.py1.78 kB
xet
verify_artifacts.py4.97 kB
xet
README.md

Décompilation de Kimi pour Android

Application : com.moonshot.kimichat, version 3.1.4 (380), minimum Android API 26, cible API 36. Les trois APK fournis sont traités ensemble : base, ARM64 et ressources xxhdpi. Les originaux se trouvent dans le dossier parent ; leurs empreintes sont dans reports/SHA256SUMS.

Où commencer

Chemin Contenu
jadx/sources/ Code Java reconstitué par JADX 1.5.6, issu des trois DEX.
jadx/resources/AndroidManifest.xml Manifeste Android décodé.
jadx/resources/ Ressources décodées et assets.
jadx-splits/ Manifestes et ressources des APK complémentaires décodés séparément, avec leurs métadonnées de split.
jadx-fallback/sources/ Instructions DEX rendues par JADX en mode fallback, utiles pour les méthodes mal reconstituées.
extracted/ Extraction intégrale de chaque APK, avec DEX, ELF et ressources originaux.
ghidra/projects/KimiNative.gpr Projet Ghidra 12.1.2 des 22 bibliothèques ARM64 ; conserver le dossier .rep voisin.
ghidra/exports/<bibliothèque>/decompiled.c Pseudocode C produit par Ghidra.
ghidra/exports/<bibliothèque>/functions.tsv Adresse, nom, taille et résultat de chaque fonction détectée ; les thunks sont identifiés séparément.
ghidra/exports/<bibliothèque>/symbols.tsv Symboles, dont les imports externes et exports JNI.
ghidra/exports/<bibliothèque>/strings.tsv Chaînes reconnues dans le programme Ghidra.
ghidra/exports/<bibliothèque>/failed-functions.asm Désassemblage des fonctions dont l'export C a échoué ; vide en l'absence d'échec.
reports/ Inventaires, signatures, index de navigation et résultats de vérification.
logs/ Journaux complets de JADX, Ghidra et codes de sortie.

Points d'entrée pour le futur reverse engineering

  • Initialisation : jadx/sources/com/moonshot/kimichat/KimiApplication.java.
  • Activité principale : jadx/sources/com/moonshot/kimichat/MainActivity.java.
  • Configuration des domaines : jadx/sources/yx/r.java, avec des configurations de test dans yx/b0.java.
  • WebView : jadx/sources/com/moonshot/kimichat/webview/KimiWebView.java ; le constructeur expose un pont JavaScript nommé ipc.
  • Base locale : jadx/sources/com/moonshot/kimichat/common/db/KimiDatabase.java et KimiDatabase_Impl.java.
  • Pont JNI propre à l'application : jadx/sources/com/moonshot/kimichat/community/track/MSStainWrapper.java et ghidra/exports/libmsstainsdk.so/. Les exports ELF portent le préfixe Java_com_moonshot_kimichat_community_track_MSStainWrapper_.

Les noms courts de nombreux packages et classes résultent de l'obfuscation R8. Les métadonnées Kotlin conservées peuvent aider à retrouver le rôle de ces classes.

Les index reports/components.json, reports/native-bridges.tsv, reports/urls.tsv et reports/elf/ permettent de retrouver les composants Android, chargements de bibliothèques, déclarations natives, URL littérales et symboles ELF. Une URL présente dans le code ne prouve pas qu'elle est utilisée à l'exécution.

Limites des résultats

JADX a terminé la passe Java structurée avec le code de sortie 3 et 474 erreurs annoncées. Les fichiers produits contiennent 295 marqueurs JADX ERROR, 280 occurrences Method not decompiled, dans 224 fichiers contenant un marqueur d'erreur. Ces nombres mesurent des éléments différents. Les 27 117 fichiers Java de cette passe comprennent des classes fusionnées, internes et générées ; ils ne correspondent pas directement aux 30 652 définitions de classes des DEX.

La passe fallback a terminé avec le code 0 et produit 27 123 fichiers. Elle conserve une représentation des instructions et des branchements, dont les méthodes laissées incomplètes dans la passe structurée. Cette représentation n'est pas du Java compilable. Les trois DEX originaux restent disponibles pour vérifier les instructions exactes. reports/jadx-issues.tsv recense erreurs, avertissements et méthodes incomplètes avec leur emplacement.

Ghidra exporte le pseudocode des fonctions détectées par son analyse automatique. Les fonctions thunk figurent dans l'index et renvoient à leur cible ; elles n'ont pas de corps C séparé. Les avertissements d'analyse, erreurs de désassemblage et diagnostics du décompilateur figurent dans logs/ghidra-console.log. Les bibliothèques système Android et symboles de débogage externes ne sont pas fournis dans ces APK. Le pseudocode peut donc contenir des types approximatifs, appels non résolus et blocs mal reconstruits ; une analyse réussie ne garantit pas la découverte de chaque fonction ou l'exactitude de sa sémantique.

Le bilan des 22 bibliothèques est de 69 782 fonctions détectées : 62 989 exportées en C, 6 772 thunks et 21 échecs d'export C, accompagnés de leur désassemblage. Ces échecs concernent libbarhopper_v3.so (15), libliteavsdk.so (2), librive-android.so (2), libimage_processing_util_jni.so (1) et libtrustdevice.so (1). Le délai d'export est de 60 secondes par fonction.

Ces exports constituent une base d'analyse statique, pas un projet reconstruisant à l'identique le code source original. Le fonctionnement de l'application et les communications réseau restent à étudier lors du reverse engineering ultérieur.

Ouvrir et reproduire

Depuis /home/gwen/Kimi, ouvrir l'ensemble dans l'interface JADX :

jadx-gui Kimi.apk Kimi_split_config.arm64_v8a.apk Kimi_split_config.xxhdpi.apk

Lancer /opt/ghidra-12.1.2/ghidraRun, puis ouvrir le projet reverse/ghidra/projects/KimiNative.gpr avec File → Open Project. Les programmes sont dans le dossier de projet arm64-v8a.

Commandes utilisées pour les passes JADX :

jadx -j 8 --show-bad-code --comments-level info -d reverse/jadx \
  Kimi.apk Kimi_split_config.arm64_v8a.apk Kimi_split_config.xxhdpi.apk
jadx -j 8 -r --decompilation-mode fallback -d reverse/jadx-fallback \
  reverse/extracted/Kimi/classes.dex reverse/extracted/Kimi/classes2.dex \
  reverse/extracted/Kimi/classes3.dex

L'extraction et les index peuvent être régénérés avec :

python3 reverse/extract_apks.py
python3 reverse/build_reports.py

Commande d'import et d'analyse Ghidra initiale, à utiliser avec un nouveau nom de projet pour une nouvelle analyse :

GHIDRA_HEADLESS_MAXMEM=8G analyzeHeadless \
  /home/gwen/Kimi/reverse/ghidra/projects KimiNative \
  -import /home/gwen/Kimi/reverse/extracted/Kimi_split_config.arm64_v8a/lib/arm64-v8a \
  -recursive -max-cpu 6 \
  -scriptPath /home/gwen/Kimi/reverse/ghidra/scripts \
  -postScript ExportNative.java /home/gwen/Kimi/reverse/ghidra/exports

reports/verification.json contient les contrôles des APK extraits, des sorties JADX et du projet Ghidra sauvegardé. reports/ghidra-summary.tsv et les fichiers project-verification.tsv détaillent la couverture native et la vérification des empreintes des programmes rouverts depuis le projet.

Pour répéter la vérification des programmes sauvegardés, fermer le projet dans l'interface Ghidra, puis exécuter :

GHIDRA_HEADLESS_MAXMEM=4G analyzeHeadless \
  /home/gwen/Kimi/reverse/ghidra/projects KimiNative \
  -process '*.so' -recursive -noanalysis -readOnly \
  -scriptPath /home/gwen/Kimi/reverse/ghidra/scripts \
  -postScript VerifyNative.java \
  /home/gwen/Kimi/reverse/extracted/Kimi_split_config.arm64_v8a/lib/arm64-v8a \
  /home/gwen/Kimi/reverse/ghidra/exports
python3 reverse/verify_artifacts.py
Total size
1.45 GB
Files
57,895
Last updated
Oct 24
Pre-warmed CDN
US EU US EU

Contributors