- Guy Dupont के angle-based QR code प्रयोग से शुरुआत करते हुए, Christian Walther ने ऐसा QR code लागू किया जो बिना lens के भी scan conditions के आधार पर अलग-अलग destination के रूप में पढ़ा जाता है
- मुख्य संरचना checkerboard mask है, जिसमें एक ही आकार के 2 QR codes को overlap करने के बाद हर pixel को बांटकर रखा जाता है
- अगर QR reader expected pixel center को sample करता है, तो image के थोड़ा खिसकने पर sample points एक code की तरफ ज्यादा चले जा सकते हैं, जिससे अलग result आ सकता है
- प्रयोगों में vertical और diagonal stripes की तुलना में checkerboard ने बेहतर काम किया, और ऊंचा error correction level फायदेमंद रहा, लेकिन decoder के हिसाब से result में फर्क अभी भी है
- यह दिखाता है कि एक ही QR image को angle, movement, decoder implementation, और color·alpha channel handling के आधार पर कई results के रूप में interpret किया जा सकता है
बिना lens बनाया गया dual QR code
- Guy Dupont ने “एक ही कहानी के अलग-अलग perspectives” के idea से, angle के अनुसार अलग source पर भेजने वाले QR code का प्रयोग किया
- Christian Walther ने इस idea पर “क्या यह बिना lens भी संभव है” आजमाया, और बताया कि उन्होंने सच में काम करने वाली QR image बनाई
- Dupont ने Walther के result पर प्रतिक्रिया देते हुए कहा कि उन्होंने GitHub और Mastodon दो destinations पढ़े
- Matt Lacey ने भी कहा कि उनके phone पर Mastodon URL बेहतर पकड़ा गया, लेकिन GitHub URL भी read हुआ
pixels को आधा-आधा बांटने वाली संरचना
- basic तरीका एक ही आकार के 2 QR codes बनाकर उन्हें एक image में overlap करना है
- हर pixel का आधा हिस्सा एक QR code से लिया जाता है
- बाकी आधा हिस्सा दूसरे QR code से लिया जाता है
- आगे की व्याख्या में कहा गया कि एक code को हर pixel के upper-left और lower-right quadrants में दिखाया गया, और दूसरे code को बाकी areas में दिखाया गया
- बनाने के तरीके के रूप में Photoshop में checkerboard pattern layer mask भरने की संभावना का जिक्र किया गया
scan results अलग क्यों होते हैं
- Walther मानते हैं कि QR reader alignment blocks के आधार पर expected pixel positions के center area को sample करता है
- अगर सभी pixels पर एक ही mask इस्तेमाल हो और pixel center mask boundary पर हो, तो छोटे movement से भी sample points साथ में एक code area की तरफ झुक सकते हैं
- नतीजतन, वही image movement amount के अनुसार अलग-अलग QR code के रूप में read हो सकती है
- Walther ने खुद स्पष्ट किया कि यह sampling explanation actual decoder behavior का अध्ययन नहीं, बल्कि अनुमान है
- एक user ने कहा कि PNG को सीधे
zbar-toolsdecoder में डालने पर code detect नहीं हुआ
mask और decoder से बनने वाला फर्क
- Walther के प्रयोगों में vertical stripes या diagonal stripes की तुलना में checkerboard mask ने बेहतर result दिया
- सबसे ऊंचे level का error correction इस्तेमाल करने पर यह बेहतर काम करता था, लेकिन उन्होंने कहा कि और प्रयोगों की जरूरत है
- diagonal split दिखने में बेहतर है, लेकिन actual operation के मामले में checkerboard आगे है
- scanning apps और default camera app के बीच भी result frequency में फर्क report किया गया
- एक user ने कहा कि QR code scanner app में Mastodon link ज्यादा बार आता है, और default camera app में दोनों संभव लगते हैं
- Attie Grande ने कहा कि software decoders के बीच भी variability दिखती है
- Hadley ने कहा कि phone को स्थिर पकड़ने पर scan नहीं हुआ, लेकिन दूसरे angle पर move करना शुरू करने पर movement के दौरान stable तरीके से scan हुआ
variant experiments और public tools
- Walther ने बातचीत में dualqrcode.com और DualQRCode GitHub repository को interactive version के रूप में पेश किया
- xssfox ने close collisions ढूंढकर अलग bits की संख्या घटाने वाला approach बताया, और कहा कि 30-bit difference को brute force से ढूंढना काफी simple लगता है
- Walther ने दो QR codes के mask patterns अलग चुनकर difference घटाने का प्रयोग किया, लेकिन दोनों codes में एक ही mask इस्तेमाल करने पर difference सबसे कम था
- original proof of concept में भी generator द्वारा automatically चुना गया mask 6 दोनों codes में इस्तेमाल हुआ था, इसलिए इस case में extra benefit नहीं था
- Walther ने कहा कि iOS camera app real-time preview में केवल domain दिखाता है और पूरा content देखने के लिए tap करना पड़ता है, इसलिए उन्होंने जानबूझकर अलग-अलग domains चुने
color·alpha channel और 4-code experiment
- Nemo Thorx ने
42को तीन तरीकों से represent कर उनके QR codes बनाए और उन्हें RGB channels में combine करने वाला प्रयोग share किया- red
6x9है - green
XLIIहै - blue
Forty-twoहै - बाद की बातचीत में confirm हुआ कि alpha channel में
㊷code था
- red
- Walther ने कहा कि उस image में alpha channel ignore करने पर उन्हें समझ आया कि यह कैसे काम कर रहा था
- Pixel Dunn ने color mixing से कई codes डालने की कोशिश की, तो Walther ने माना कि इस तरह के color blending से decoder 4 अलग-अलग codes को अलग नहीं कर सकता, इसलिए यह काम नहीं करेगा
- Walther ने कहा कि उन्होंने movable alignment blocks और pixel quadrants का इस्तेमाल करके 4 codes डालने का काम किया था
- alignment target को बहुत थोड़ा move करने पर pixel के दूसरे quadrant पर focus हो जाता है
- transparent background और theme के अनुसार दो sets के codes बदलने वाला तरीका संभव हो सकता है, लेकिन Walther के iPhone ने white और black background दोनों पर इसे recognize नहीं किया, और केवल manual threshold processing apply करने पर ही यह काम किया
1 टिप्पणियां
Hacker News की रायें
ऐसा हमला संभव लगता है जिसमें किसी सार्वजनिक जगह की स्क्रीन मौजूदा यूज़र की जानकारी के आधार पर QR code को थोड़ा बदल दे, लेकिन बाहर से वह ज्यादा अलग न दिखे
उदाहरण के लिए, आधा-आधा मिला हुआ QR code बनाया जाए, कैमरा-आधारित फीचर असेसमेंट जैसे बाहरी input से लक्ष्य व्यक्ति तय किया जाए, और फिर code के रंगों को बहुत मामूली ढंग से बदलकर मनचाही तरफ पहचाने जाने की संभावना बढ़ाई जाए
इसके दुरुपयोग में अलग-अलग जनसमूहों को अलग feedback form दिखाकर नतीजे बिगाड़ना, prize जीतने की संभावना को नस्ल, उम्र, शक्ल-सूरत जैसी पहचान योग्य विशेषताओं के आधार पर पक्षपाती बनाना, या सिर्फ कुछ लोगों को अलग Wi-Fi network या payment page पर भेजना शामिल हो सकता है
static environment में इसका असर कम होगा, और ऐसा static attack तुरंत दिमाग में नहीं आता जिसमें सिर्फ कुछ यूज़रों को अलग करके फायदा लिया जा सके। सार्वजनिक lighting के नीचे QR code का dynamically बदलना शायद ज्यादातर लोगों को पता नहीं चलेगा
मूल hacking technique जहां सच में इस्तेमाल हो सकती है, वह स्थिति लगती है जहां attacker असली QR code के ऊपर अपना code चिपका दे। कौन-सा code read होगा, यह कुछ हद तक random हो सकता है, इसलिए कुछ users को original destination पर भेजकर detection धीमा किया जा सकता है, लेकिन यह पक्का नहीं कि अपने link पर आने वाला traffic घटने का नुकसान इसकी भरपाई करेगा या नहीं
इसके लिए ऐसे dual QR code जैसी sophisticated चीज़ की जरूरत भी नहीं है। parking lot में “phone से payment करें” वाले board पर जाएं, “scan करके payment करें” QR code के ऊपर अपना QR code चिपका दें, और credit card information आने का इंतज़ार करें
एक और तरीका पूरी तरह flat न होने वाला poster है। अलग-अलग pixels को हल्के pyramid shape में उभारा जाए और हर face को अलग रंग से paint किया जाए, तो देखने की direction के हिसाब से QR code अलग scan हो सकता है
Tbilisi के प्रमुख banks में से एक IBAN number को QR code के रूप में share करने देता है। theoretically ऐसी technique से पैसे चुराए जा सकते हैं, लेकिन practical तौर पर bank app transfer पूरा होने से पहले recipient name दिखाने जैसे कई safeguards रखता है
मेरे दिमाग में यह control किसी खास card को force करके चुनवाने जैसा काम कर सकता था, इसलिए सबसे पहले magic trick वाली बात आई
सीधे test कर सकें इसलिए एक website बनाई है: https://dualqrcode.com/
Christian द्वारा इस्तेमाल की गई exact methodology नहीं है, इसलिए यहां दो QR codes को diagonal split pattern में एक image में combine किया गया है। अगर same position के patterns अलग हैं, तो cell को diagonal में बांटकर एक side पहला QR code और दूसरी side दूसरा QR code दिखाती है; और अगर दोनों black या white हैं, तो उसे solid color से fill किया जाता है
QR code की high error correction capability, खासकर error correction level ‘H’, की वजह से scan angle के अनुसार कोई भी URL read हो सकता है। हालांकि UI में लिखे मुताबिक यह second URL की तरफ ज्यादा frequently bias होता है
iOS में image को long-press करने पर यह github.com पर जाने की बात दिखाता है, लेकिन preview खुद Mastodon का आता है—मुझे यही सबसे interesting लगा
लगता है इसका मतलब है कि QR code को दो बार parse करके अलग-अलग results मिल रहे हैं। यह कुछ users को mislead करने के लिए इस्तेमाल हो सकता है, लेकिन long-press dropdown URL कितने लोग देखते हैं, पता नहीं
इसलिए मैंने screenshot को laptop पर AirDrop करके phone camera से scan करना, या किसी friend या family member के phone से अपने phone screen पर code scan करवाना जैसी बेवकूफी भरी चीज़ें की हैं
लेकिन आज पता चला कि camera roll के screenshot में QR code को long-press करने पर वह तुरंत parse करके link खोल सकता है। शायद पहले भी image long-press करके देखा था, लेकिन उसके बाद feature add हुआ होगा, या मैंने सच में try नहीं किया होगा, या QR code के गलत हिस्से पर press किया होगा। जो भी हो, यह संभव है जानकर बहुत अच्छा लगा
जानबूझकर errors डाले गए standard QR code से भी शायद यही चीज़ बनाई जा सकती है। बस यह पता लगाना होगा कि वे errors को अलग-अलग कैसे fix करते हैं
लगता है किसी ने ऐसा bug bounty bug खोज लिया है जो बस किसी के उठाने का इंतज़ार कर रहा है
if someCondition(getFoo()) then doSomethingWith(getFoo())जैसा code, याdoSomethingWith(getFoo())के बादdoAnotherThingWith(getFoo())call करने वाला code याद आता है। ऐसी चीज़ों मेंfoo := getFoo()से value एक बार लेकर इस्तेमाल करने के तरीके के उलट हमेशा code smell रहती हैstarting position से ऊपर scroll करें तो lenticular version दिख सकता है
बहुत प्रभावशाली है। मेरा iPhone दोनों में से किसी एक पर lock होने की tendency रखता था, और phone rotate करने से एक तरफ या दूसरी तरफ जाने में मदद मिली
कुछ बार Mastodon link और GitHub link बारी-बारी से blink भी हुए
अगर खुद try करना चाहें तो जल्दी में बनाया गया code इस्तेमाल कर सकते हैं।
qrcodePython package install करें और नीचे का code चलाएंfooऔरbarवाला dual QR code सच में निकलता है, लेकिन HN में Unicode काम नहीं करता और8या0से replace करने पर मेरा phone उसे पहचान नहीं पाया, इसलिए इसे ज्यों का त्यों paste करना मुश्किल हैtreasure hunt में इस्तेमाल करें तो cool लगेगा
QR codes short URLs की तरह दुरुपयोग के लिए बिल्कुल perfect हैं
वे मूल रूप से unreadable URLs होते हैं, इसलिए आपको बिल्कुल पता नहीं होता कि कहां भेजा जाएगा या कितनी बार redirect होगा। इसलिए मैं उन्हें इस्तेमाल नहीं करता
वाकई शानदार concept है। final goal पर focus करें तो URL destination पर switch रखने वाला दूसरा approach भी संभव है
यानी randomization, user data और दूसरे criteria के आधार पर अलग page पर redirect करना। अगर आप ऐसी functionality के साथ experiment करते हुए असली sticker tests तक करना चाहते हैं, तो मैं कई SaaS companies के साथ variable labels पर काम करता हूं, इसलिए insights share कर सकता हूं, samples print कर सकता हूं या collaborate कर सकता हूं