Comment fonctionne WaEnhancer X et pourquoi réécrire les hooks WhatsApp en Java pur
Utiliser le client WhatsApp officiel est une expérience particulière. Le messenger ne cesse d'accumuler des Meta AI intrusives, de perdre des paramètres pratiques, ou de restreindre la visualisation des médias. Auparavant, les passionnés résolvaient ces problèmes avec des modifications tierces comme WhatsApp Plus, mais Meta interdit rapidement les comptes pour l'exécution de fichiers APK modifiés. Sur Android, il existe une autre voie : modifier le comportement de l'application directement en RAM en utilisant le framework LSPosed.
Sur GitHub, je suis tombé sur le dépôt WaEnhancer X. C'est un fork du projet WaEnhancer original, suivant une voie d'ingénierie intéressante. Lorsque les auteurs du module original ont commencé à réécrire le code en Kotlin et à déplacer les paramètres vers des écrans externes, le développeur de WaEnhancer X a fait un pas en arrière vers le Java pur et l'intégration native directement dans l'interface WhatsApp.
Ce qu'il y a à l'intérieur : du blocage de l'IA au travail direct avec SQLite
La tâche principale du module est d'intercepter les appels de méthodes à l'intérieur du client WhatsApp original et de modifier leur logique. Voici plusieurs exemples de comment cela se fait d'un point de vue technique :
- Détruire l'interface utilisateur intrusive. WhatsApp essaie constamment de pousser des bannières Meta AI via des flags serveur. WaEnhancer X intercepte la création de ces éléments d'interface et les force au statut
View.GONEavant le rendu à l'écran. - Requêtes SQL directes au lieu d'attendre les animations de l'interface. Lorsque vous supprimez un statut ou un message, le client standard exécute une chaîne d'animations et de dialogues. Le module contourne cette couche et accède à la base de données SQLite locale
messageet au stockage de fichiers viaMediaProviderdirectement, en exécutant l'opération instantanément. - Contourner les restrictions temporelles. Les fichiers médias à usage unique (View Once) bloquent les captures d'écran et la relecture. Un hook dans le code de l'application substitue les drapeaux d'accès, rendant la visualisation permanente et permettant d'enregistrer le fichier dans la galerie.
- Intégration avec Tasker. Le module peut recevoir des Intents Android depuis des outils d'automatisation tiers, permettant l'automatisation du mode privé basée sur la localisation ou le planning.
Astuces architecturales : comment combiner GPL et code propriétaire
La partie la plus intéressante du dépôt se cache dans la structure du module et la licence. Le projet est strictement divisé en trois composants indépendants :
+-------------------------------------------------------+
| Helper Plugin APK |
| (Закрытый код / Дополнительные фичи) |
+-------------------------------------------------------+
|
v (Compile-Time Dependency)
+-------------------------------------------------------+
| :api Module |
| Лицензия Apache-2.0 / Интерфейсы и DTO |
+-------------------------------------------------------+
^
| (Shared API Dependency)
+-------------------------------------------------------+
| :app Module |
| Лицензия GPL-3.0 / Основной фреймворк |
+-------------------------------------------------------+
Pourquoi une telle complexité est-elle nécessaire ? Pour éviter de violer les termes de la GNU GPL v3. Le module principal de hooks (:app) est distribué sous GPL-3.0. S'il était compilé avec des composants fermés, cela entraînerait une violation de licence.
L'auteur a déplacé toutes les interfaces d'interaction dans un module séparé :api sous la licence permissive Apache-2.0. Pendant l'exécution, l'hôte ouvert détecte l'APK auxiliaire via ContentProvider et le charge dynamiquement via son propre ClassLoader. En résultat, le plugin fermé s'exécute à l'intérieur du processus WhatsApp à travers les interfaces :api, sans avoir de dépendances binaires directes avec le code hôte sous licence GPL.
Pourquoi 100% Java au lieu de Kotlin
Le développement Android moderne s'est presque complètement déplacé vers Kotlin, mais pour les modules Xposed, le Java conserve ses avantages. En travaillant constamment avec la réflexion de bas niveau (FeatureLoader), le Java pur offre plusieurs bénéfices :
- Bytecode prévisible. L'absence de magie du compilateur Kotlin (fonctions inline, méthodes synthétiques et génération de métadonnées) simplifie le débogage des hooks.
- Zéro surcharge. La bibliothèque standard Kotlin n'est pas chargée dans le processus WhatsApp, ce qui réduit le risque de conflits de versions si WhatsApp lui-même utilise différentes versions de bibliothèque.
- Stabilité lors des mises à jour. L'approche d'interception de méthodes se casse moins souvent lorsque la structure des classes de WhatsApp change avec une nouvelle version.
L'écran des paramètres du module n'a pas non plus été construit avec Jetpack Compose. Le développeur a utilisé les PreferenceFragmentCompat standard, en intégrant le menu du module directement dans les paramètres de WhatsApp. Cela ressemble à une section d'application native, et pour une navigation pratique, une classe FeatureCatalog a été écrite qui indexe les interrupteurs et recherche la fonctionnalité souhaitée en utilisant des chaînes localisées.
Comment essayer le module sur votre appareil
Exécuter WaEnhancer X nécessite un smartphone préparé :
- L'appareil doit avoir un accès Root et LSPosed installé (version Zygisk ou Riru).
- Téléchargez l'APK prêt à l'emploi depuis le dépôt GitHub et installez-le.
- Ouvrez l'application LSPosed Manager et activez le module WaEnhancer X.
- Dans la liste des applications (Scope), sélectionnez WhatsApp.
- Arrêtez WhatsApp via le menu système ("Stop" / Forcer l'arrêt) et relancez le messenger.
Après cela, une nouvelle section avec les options du module apparaîtra dans les paramètres WhatsApp.
Pourquoi suivre le projet
WaEnhancer X est un exemple clair de comment une séparation appropriée des modules aide à contourner les restrictions de licence lors de la création de modules complémentaires Android. Le projet sera utile pour les développeurs étudiant la réflexion, l'architecture des hooks LSPosed et l'injection de code dans des applications tierces.
La partie de base du code est ouverte, exempte de trackers externes, et démontre clairement comment modifier le comportement d'un messenger fermé sans créer de builds tiers discutables.
Projets similaires