欢迎光临散文网 会员登陆 & 注册

为什么不要上传原图?一张图片背后能提取多少信息?

2023-07-01 21:25 作者:梦影逍遥LMR  | 我要投稿

科普:图片中的EXIF信息

EXIF是Exchangeable Image File Format的缩写,它是一种用于在数字图像文件中存储元数据的标准格式。元数据是关于图片的信息,比如拍摄设备、拍摄日期和时间、曝光时间、ISO值、焦距、GPS定位等信息。

EXIF信息通常由数码相机、智能手机等设备在拍摄照片时自动添加到图像文件中。这些数据可以提供有关照片的详细信息,使用户能够了解拍摄环境以及使用的摄影设置。EXIF还可以记录一些特定于设备的信息,如制造商和型号。

很多对社工感兴趣的小伙伴,这时应该会有一个大胆的想法,那就是图片里如果包含了GPS定位信息,那岂不是别人发个朋友圈不用定位我们也知道在哪里了呢?(发朋友圈不就是为了展示自己在哪?)不妨现在就来试一试吧

演示:寻找下面图片的EXIF信息

我这里找了一张昨天随手拍的一张照片,大家可以用这张图做测试进行验证

通过电脑自带的工具查看


下载完图片后,右键属性,点击详细信息

这里面就可以看到很多参数了,当然也包括最重要的定位


到了这里如果你不嫌麻烦,可以用在线工具来找到具体定位

我们粗略的填入上方的29108


发现这里和我的实际位置相差有点大,那么我们再精确一点

真正想要获取大家个人的人肯定不会用这么傻的方法,下面为大家讲解高效的批量获取

使用Python实现获取图片EXIF信息

这里主要就是使用了exifread模块读取图片的exif信息,测试使用中需要安装

exifread模块Requests模块

相关代码

import requests

import exifread



class GetPhotoInfo:

    def __init__(self, photo):

        self.photo = photo  

        self.ak = '填写自己的百度ak'

        self.location = self.get_photo_info()


    def get_photo_info(self, ):

        with open(self.photo, 'rb') as f:

            tags = exifread.process_file(f)

        try:

            # 打印照片其中一些信息

            print('拍摄时间:', tags['EXIF DateTimeOriginal'])

            print('照相机制造商:', tags['Image Make'])

            print('照相机型号:', tags['Image Model'])

            print('照片尺寸:', tags['EXIF ExifImageWidth'], tags['EXIF ExifImageLength'])

            # 纬度

            lat_ref = tags["GPS GPSLatitudeRef"].printable

            lat = tags["GPS GPSLatitude"].printable[1:-1].replace(" ", "").replace("/", ",").split(",")

            lat = float(lat[0]) + float(lat[1]) / 60 + float(lat[2]) / float(lat[3]) / 3600

            if lat_ref != "N":

                lat = lat * (-1)

            # 经度

            lon_ref = tags["GPS GPSLongitudeRef"].printable

            lon = tags["GPS GPSLongitude"].printable[1:-1].replace(" ", "").replace("/", ",").split(",")

            lon = float(lon[0]) + float(lon[1]) / 60 + float(lon[2]) / float(lon[3]) / 3600

            if lon_ref != "E":

                lon = lon * (-1)

        except KeyError:

            return "ERROR:请确保照片包含经纬度等EXIF信息。"

        else:

            print("经纬度:", lat, lon)

            return lat, lon


    def get_location(self):

        url = 'http://api.map.baidu.com/reverse_geocoding/v3/?ak={}&output=json' \

              '&coordtype=wgs84ll&location={},{}'.format(self.ak, *self.location)

        response = requests.get(url).json()

        status = response['status']

        if status == 0:

            address = response['result']['formatted_address']

            print('详细地址:', address)

        else:

            print('baidu_map error')



if __name__ == '__main__':

    Main = GetPhotoInfo('IMG_6623.jpg')

    Main.get_location()

配置过程中可能会遇到的坑

使用pip安装的时候如果你习惯开了vpn,很有可能会报错,然后还查不到原因。

为防止这里被别有用心的人利用,这里我就点到为止了(真正想干坏事的也不用我这小菜鸡教)

写这篇文章只是为了从一个人肉者,开盒者的角度提醒大家注意防范个人隐私的泄露。

最后引用一句网友的话“对于大多数人来说,个人信息会不会泄露,不取决于你想不想泄露,而取决于有没有人想要”


为什么不要上传原图?一张图片背后能提取多少信息?的评论 (共 条)

分享到微博请遵守国家法律