गहन विश्लेषण

EXIF मेटाडेटा: आपकी तस्वीरों में छिपे प्राइवेसी लीक की तकनीकी गाइड

koboshiCo-founder
·11 मिनट पढ़ें
EXIF मेटाडेटा: आपकी तस्वीरों में छिपे प्राइवेसी लीक की तकनीकी गाइड
सारांश

फोन या कैमरे से ली गई हर तस्वीर अपने अंदर एक दूसरी फाइल लेकर चलती है: शूटिंग सेटिंग्स, टाइमस्टैम्प, सीरियल नंबर और अक्सर GPS कोऑर्डिनेट्स। यहाँ EXIF की बाइट-लेवल संरचना, इसे इंस्पेक्ट करने का तरीका, यह आपको कैसे एक्सपोज़ करता है, और फॉर्मेट कनवर्ज़न इसे कैसे मिटा देता है।

iPhone से एक फोटो लें और JPEG को हेक्स एडिटर में खोलें। FF D8 स्टार्ट मार्कर से कुछ सौ बाइट्स आगे, आपको यह मिलता है:

FF E1 1C 24 45 78 69 66 00 00 4D 4D 00 2A 00 00 00 08

FF E1 APP1 सेगमेंट मार्कर है। इसके बाद के दो बाइट्स सेगमेंट की लंबाई हैं। फिर छह बाइट्स में Exif\0\0 लिखा होता है, और ठीक उसके पीछे एक TIFF हेडर बैठा है (4D 4D 00 2A का मतलब big-endian है)। आपकी JPEG अपने अंदर एक दूसरी, छोटी फाइल लेकर चल रही है, जो अक्सर खुद तस्वीर से भी ज़्यादा आपके बारे में बता देती है।

EXIF असल में क्या है

EXIF का मतलब है Exchangeable Image File Format। JEIDA (Japan Electronic Industry Development Association) ने 1995 में संस्करण 1.0 प्रकाशित किया। आज इस मानक को JEITA और CIPA संभालते हैं; EXIF 3.0 2023 में आया।

संरचनात्मक रूप से EXIF एक TIFF है। Exif\0\0 हेडर के बाद एक बाइट-ऑर्डर मार्कर आता है, फिर Image File Directories (IFD) की एक चेन। हर IFD एंट्री बारह बाइट्स की होती है:

Bytes 0-1:   Tag ID (e.g. 0x010F = Make)
Bytes 2-3:   Data type (ASCII, rational, short, long)
Bytes 4-7:   Value count
Bytes 8-11:  Inline value, or an offset to it

दो सबडायरेक्ट्रियाँ प्राइवेसी के लिहाज से मायने रखती हैं। EXIF SubIFD (जिसे टैग 0x8769 पॉइंट करता है) में कैमरा सेटिंग्स, सीरियल नंबर और टाइमस्टैम्प होते हैं। GPS IFD (टैग 0x8825) अक्षांश और देशांतर को तीन-तीन rational नंबरों के रूप में स्टोर करता है: डिग्री, मिनट, सेकंड।

IFD1 में आमतौर पर एक थंबनेल भी स्टोर होता है, मेटाडेटा के अंदर एम्बेड की गई एक छोटी JPEG। इस बात को याद रखिए, आगे काम आएगी।

कौन से कंटेनर EXIF लेकर चलते हैं:

फॉर्मेटEXIF की लोकेशननोट्स
JPEGAPP1 सेगमेंटEXIF यहीं से शुरू हुआ
HEICmeta बॉक्स में Exif आइटमiOS 11 से iPhone का डिफ़ॉल्ट
WebPVP8X के अंदर EXIF चंकवैकल्पिक, अक्सर मौजूद नहीं
PNGeXIf चंक2017 में स्पेक में जोड़ा गया
TIFFफाइल खुद TIFF होती हैEXIF का मूल फॉर्मेट
BMP/ICOसमर्थित नहींकोई मेटाडेटा संरचना ही नहीं है

कैमरे इसे लिखने क्यों लगे

90 के दशक के मध्य की समस्या मामूली और व्यावहारिक थी। डिजिटल कैमरे बिना किसी कॉन्टेक्स्ट वाली फाइलें बनाते थे। फिल्म फोटोग्राफरों के पास निगेटिव होते थे, प्रोसेसिंग डेट वाले लैब लिफाफे और नोट्स। डिजिटल शूटर्स के पास DSC_0042.JPG जैसी फाइलों से भरी एक डायरेक्ट्री होती थी, और बस इतना ही।

EXIF ने तीन ठोस ज़रूरतें पूरी कीं:

  • एक्सपोज़र रिकॉर्ड। अपर्चर, शटर स्पीड, ISO और फोकल लेंथ, ताकि फोटोग्राफर देख सके कि कोई शॉट क्यों सफल हुआ और उसे दोहरा सके।
  • प्रिंट ऑर्डरिंग। DPOF (Digital Print Order Format) से आप कैमरे पर ही फोटो मार्क कर सकते थे और बाद में कियोस्क से उन्हें छपवा सकते थे, जिसमें rotation जैसे EXIF फील्ड काम आते थे।
  • ओरिएंटेशन और प्रीव्यू। Orientation टैग पोर्ट्रेट शॉट्स को सीधा रखता है, और एम्बेडेड थंबनेल ने कैमरे की LCD पर ब्राउज़िंग को तेज़ बना दिया।

इन सबके नीचे छिपी धारणा पर ध्यान दें: तस्वीरें अपने मालिक के पास ही रहती हैं। EXIF उस दुनिया के लिए डिज़ाइन किया गया था जहाँ एक फोटो CF कार्ड से हार्ड ड्राइव और फिर प्रिंट कियोस्क तक जाती थी। 1995 में JEIDA में बैठा कोई भी ऐसी दुनिया की योजना नहीं बना रहा था जहाँ आप रोज़ दर्जन भर तस्वीरें पब्लिक सर्वर पर भेजते हैं।

अंदर असल में क्या होता है

फोन की कोई भी तस्वीर मेटाडेटा रीडर में खोलिए, तो टैगों की एक लंबी सूची निकलती है। प्राइवेसी के लिहाज से जो फील्ड मायने रखते हैं:

टैगउदाहरण वैल्यूयह क्या उजागर करता है
Make / ModelApple, iPhone 15 Proआपका हार्डवेयर
BodySerialNumber / LensSerialNumberहर डिवाइस के लिए यूनीकआपके कैमरे की फिंगरप्रिंट
DateTimeOriginal + OffsetTime2026:06:30 18:42:11 +09:00कब, सेकंड की सटीकता तक
GPSLatitude / GPSLongitude37°46'29" N, 122°25'10" Wकहाँ, मीटर की सटीकता तक
GPSAltitude14.2 mकौन सी मंज़िल, मोटे तौर पर
SoftwareInstagram, Photoshop 26.1फाइल को किसने छुआ
Artist / Copyrightफ्री टेक्स्टकभी-कभी असली नाम
IFD1 thumbnailएक दूसरी JPEGबिना एडिट की गई इमेज की कॉपी

एक असली iPhone फोटो का exiftool आउटपुट, संक्षेप के लिए छोटा किया हुआ:

$ exiftool IMG_4021.HEIC
Make                            : Apple
Camera Model Name               : iPhone 15 Pro
Serial Number                   : F2LX8A1BCD
Date/Time Original              : 2026:06:30 18:42:11
GPS Latitude                    : 37 deg 46' 29.28" N
GPS Longitude                   : 122 deg 25' 10.41" W
GPS Altitude                    : 14.2 m Above Sea Level

तीस सेकंड की पढ़ाई, और कोई अजनबी जान जाता है कि आप किससे शूट करते हैं, आप वहाँ कब थे, और वह "वहाँ" कुछ मीटर इधर-उधर की सटीकता तक असल में कहाँ है।

अपनी मशीन पर इसे कैसे पढ़ें

Windows

फाइल पर राइट-क्लिक करें, Properties (गुण) खोलें, Details (विवरण) टैब पर जाएँ। Make, model, तारीखें और GPS कोऑर्डिनेट्स सब वहीं लिस्टेड हैं। उसी टैब के नीचे "Remove Properties and Personal Information" (गुण और व्यक्तिगत जानकारी निकालें) लिंक है, जो एक बुनियादी स्ट्रिपिंग डायलॉग खोलता है।

PowerShell से रॉ एक्सेस के लिए:

Add-Type -AssemblyName System.Drawing
$img = [System.Drawing.Image]::FromFile("C:\photos\IMG_4021.jpg")
$img.PropertyItems | ForEach-Object {
    $text = [System.Text.Encoding]::ASCII.GetString($_.Value).Trim([char]0)
    "Tag 0x{0:X4} (len {1}): {2}" -f $_.Id, $_.Len, $text
}
$img.Dispose()

न्यूमेरिक फील्ड कच्चे बाइट्स के रूप में निकलते हैं, लेकिन Make और Software जैसे ASCII टैग साफ-सुथरे प्रिंट होते हैं।

macOS

इमेज को Preview में खोलें, फिर Tools > Show Inspector खोलें और EXIF और GPS टैब देखें। GPS टैब तो मैप पिन भी रेंडर करता है।

टर्मिनल से, mdls वह सब दिखा देता है जो Spotlight ने इंडेक्स किया है:

mdls IMG_4021.jpg | grep -iE "gps|latitude|longitude|model"

पूरी टैग सूची के लिए brew install exiftool से ExifTool इंस्टॉल करें।

Linux

ExifTool यहाँ स्टैंडर्ड है:

exiftool IMG_4021.jpg

हल्के विकल्प: exiv2 IMG_4021.jpg, या ImageMagick का identify -verbose IMG_4021.jpg | grep -i exif

ब्राउज़र से, TypeScript की महज़ बीस लाइनों में

APP1 सेगमेंट खुद ढूँढने के लिए JPEG मार्कर चेन पर एक लूप चलाना पड़ता है:

async function findExifSegment(file: File): Promise<number> {
  const bytes = new Uint8Array(await file.slice(0, 128 * 1024).arrayBuffer())
  if (bytes[0] !== 0xff || bytes[1] !== 0xd8) return -1 // not a JPEG

  let offset = 2
  while (offset < bytes.length - 12) {
    if (bytes[offset] !== 0xff) break
    const marker = bytes[offset + 1]
    const length = (bytes[offset + 2] << 8) | bytes[offset + 3]
    if (
      marker === 0xe1 &&
      String.fromCharCode(...bytes.slice(offset + 4, offset + 10)) ===
        "Exif\0\0"
    ) {
      return offset
    }
    offset += 2 + length
  }
  return -1
}

EXIF आपकी प्राइवेसी कैसे लीक करता है

GPS कोऑर्डिनेट्स आपकी लोकेशन उजागर कर देते हैं

फोन तब GPS रिकॉर्ड करते हैं जब कैमरा ऐप के पास लोकेशन की अनुमति होती है — यह वही डिफ़ॉल्ट है जिसे ज़्यादातर लोग एक बार टैप करके भूल जाते हैं। अपनी बालकनी, अपनी डेस्क या अपने बच्चे के स्कूल प्रोजेक्ट की फोटो किसी फोरम या मार्केटप्लेस लिस्टिंग पर डाल दीजिए, और आपने मीटर-लेवल सटीकता के साथ अपना पता प्रकाशित कर दिया।

सबसे मशहूर मामला John McAfee का है। दिसंबर 2012 में वह फरार था और Guatemala में छिपा हुआ था। Vice ने iPhone 4S से ली गई उसकी एक फोटो प्रकाशित की, और EXIF डेटा में पूरे GPS कोऑर्डिनेट्स मौजूद थे। कोई भी पढ़ सकता था कि वह Guatemala में ठीक-ठीक कहाँ है। कुछ ही दिनों बाद वह Guatemala की हिरासत में था।

सीरियल नंबर आपके अकाउंट जोड़ देते हैं

BodySerialNumber और LensSerialNumber हर डिवाइस के लिए यूनीक होते हैं। एक ही कैमरे से ली गई तस्वीरें पोस्ट करने वाले दो गुमनाम अकाउंटों को लगभग पूरी निश्चितता के साथ जोड़ा जा सकता है। रिसर्चर्स ने ठीक इसी वजह से फोटो साइट्स क्रॉल करके कैमरा सीरियल के आधार पर इमेज क्लस्टर की हैं। आप ऑनलाइन अपनी पहचानें अलग-अलग रख सकते हैं। आपका कैमरा ऐसा कोई भेद नहीं करता।

टाइमस्टैम्प आपकी दिनचर्या का खाका खींचते हैं

DateTimeOriginal, साथ में टाइमज़ोन ऑफसेट। अकेला एक टाइमस्टैम्प कुछ खास नहीं बताता, लेकिन एक साल के अपलोड बता देते हैं कि आप कब उठते हैं, कब घर से निकलते हैं और कब सफर करते हैं।

थंबनेल आपका राज़ खोल देता है

IFD1 थंबनेल मेटाडेटा के अंदर एक अलग JPEG होती है। मुख्य इमेज से कोई चेहरा या दस्तावेज़ क्रॉप कर दीजिए, और काफी सारे एडिटर मूल थंबनेल को अछूता छोड़ देते हैं। जो भी इसे निकालता है, उसे बिना क्रॉप वाली फोटो मिल जाती है। 2003 में TechTV की एक होस्ट ने अपनी क्रॉप की हुई तस्वीरें पोस्ट कीं, और पाठकों ने EXIF थंबनेल से पूरे फ्रेम बरामद कर लिए। यह सबक इसलिए आज तक टिका है क्योंकि टूल्स वही गलती दोहराते रहते हैं।

जहाँ EXIF अपलोड के बाद भी बचा रहता है

बड़े सोशल प्लेटफॉर्म (Facebook, Instagram, X) अपलोड के समय इमेज से EXIF हटा देते हैं। बाकी जगहों पर ऐसा ज़्यादातर नहीं होता: ईमेल अटैचमेंट, फोरम अपलोड, मार्केटप्लेस लिस्टिंग, क्लाउड ड्राइव शेयर लिंक, AirDrop, और कोई भी मैसेंजर जो ओरिजिनल क्वालिटी में भेजने के लिए सेट हो। अगर फाइल आपके डिवाइस से बिना बदले निकलती है, तो मेटाडेटा भी उसके साथ निकलता है।

फॉर्मेट बदलने पर क्या होता है

फोटो को कनवर्ट करना उसे अपने आप स्ट्रिप नहीं करता। कनवर्टर दो तरह के होते हैं:

  1. मेटाडेटा कॉपियर। ऐसे टूल्स जो री-एन्कोड तो करते हैं लेकिन जानबूझकर टैग साथ ले जाते हैं: ExifTool, ffmpeg, और "keep metadata" डिफ़ॉल्ट वाले ज़्यादातर GUI कनवर्टर। किसी कॉपियर से JPEG को WebP में बदलिए और आपके GPS कोऑर्डिनेट्स WebP के EXIF चंक में अछूते पहुँच जाते हैं।
  2. पिक्सेल री-एन्कोडर। ऐसे टूल्स जो कच्चे पिक्सेल में डिकोड करते हैं और उन्हीं से एक बिल्कुल नई फाइल एन्कोड करते हैं। आउटपुट में सिर्फ इमेज डेटा होता है, क्योंकि मेटाडेटा कभी पिक्सेल का हिस्सा था ही नहीं।

मैन्युअल स्ट्रिपिंग दोनों ही सूरत में एक कमांड है:

# ExifTool: wipe every tag, keep the image
exiftool -all= -overwrite_original photo.jpg

# ImageMagick 7: re-encode without metadata
magick photo.jpg -strip photo-clean.jpg

यहाँ एक चीज़ का ध्यान रखना ज़रूरी है: ओरिएंटेशन। EXIF Orientation (टैग 0x0112) व्यूअर को इमेज घुमाने का निर्देश देता है, अक्सर 90 डिग्री से। उस रोटेशन को पिक्सेल में बेक किए बिना टैग हटा दीजिए, और हर पोर्ट्रेट फोटो आड़ी निकल आएगी। सही क्रम यह है: पहले ओरिएंटेशन लागू करके डिकोड करें, फिर मेटाडेटा हटाएँ। जो टूल बिना घुमाए स्ट्रिप करता है, वह बिल्कुल न स्ट्रिप करने से भी बदतर है।

हमारे कनवर्टर EXIF के साथ क्या करते हैं

इस साइट का हर कनवर्टर एक पिक्सेल री-एन्कोडर है। पाइपलाइन सबमें एक जैसी है:

  1. सोर्स फाइल को आपके ब्राउज़र में कच्चे पिक्सेल में डिकोड करें (HEIC के लिए libheif का WebAssembly बिल्ड, बाकी के लिए ब्राउज़र का नेटिव डिकोडर)।
  2. पिक्सेल को कैनवस पर ड्रॉ करें, जिसमें EXIF ओरिएंटेशन डिकोड के दौरान ही लागू हो चुका होता है।
  3. कैनवस को टारगेट फॉर्मेट में एन्कोड करें।

आउटपुट फाइल में कंप्रेस्ड पिक्सेल होते हैं और बस। न APP1 सेगमेंट, न EXIF या eXIf चंक, न GPS IFD, न सीरियल नंबर, न एम्बेडेड थंबनेल। मेटाडेटा कॉपी करने वाला कोई कोड पाथ मौजूद ही नहीं, क्योंकि मेमोरी में कॉपी करने लायक कोई मेटाडेटा है ही नहीं। और चूँकि पूरी प्रक्रिया क्लाइंट-साइड चलती है, फाइल कभी आपके डिवाइस से बाहर नहीं जाती, तो कोई सर्वर भी ओरिजिनल कभी नहीं देखता।

अपना सोर्स फॉर्मेट चुनें:

फाइल ड्रॉप करें, कनवर्ट हुई कॉपी डाउनलोड करें, और वही शेयर करें। पिक्सेल बिल्कुल वही हैं, बस मेटाडेटा गायब है।

संक्षेप में

  • किसी भी जगह जहाँ EXIF बचा रहता है (ईमेल, फोरम, मार्केटप्लेस, डायरेक्ट लिंक) फोटो शेयर करने से पहले उसे जाँच लें। Windows पर Properties, macOS पर Inspector, Linux पर exiftool
  • अगर फाइल में GPS डेटा है और आप नहीं चाहते कि वह रहे, तो उसे कनवर्ट करें। ऊपर लिंक किया गया हर टूल सिर्फ पिक्सेल आउटपुट करता है।
  • अगर आप अलग-अलग पहचानों से पोस्ट करते हैं, तो कैमरा सीरियल नंबर उन्हें जोड़ सकते हैं। स्ट्रिपिंग उसका भी ख्याल रखती है।
  • अपनी ओरिजिनल फाइलें अछूती रखें। अपने निजी आर्काइव में EXIF सचमुच काम का है। जो कॉपियाँ आप प्रकाशित करते हैं, वही साफ होनी चाहिए।

और ब्लॉग पोस्ट्स पढ़ें