Buckets:
| Name | Size | Uploaded | Xet hash |
|---|---|---|---|
| __pycache__ | 3 items | ||
| extracted | 1,581 items | ||
| ghidra | 207 items | ||
| jadx | 28,773 items | ||
| jadx-fallback | 27,123 items | ||
| jadx-splits | 90 items | ||
| logs | 18 items | ||
| reports | 93 items | ||
| README.md | 7.62 kB xet | df8de424 | |
| build_reports.py | 4.07 kB xet | dd0504a0 | |
| extract_apks.py | 1.78 kB xet | a694234d | |
| verify_artifacts.py | 4.97 kB xet | 35e124ee |
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 dansyx/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.javaetKimiDatabase_Impl.java. - Pont JNI propre à l'application :
jadx/sources/com/moonshot/kimichat/community/track/MSStainWrapper.javaetghidra/exports/libmsstainsdk.so/. Les exports ELF portent le préfixeJava_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