你知道一张图片,背后隐藏了多少信息?

科普:图片中的EXIF信息

当我们拍摄完一张图片后,其实我们会发现这个图片里是携带着EXIF相关信息的

包括但不限于:

  • 快速查看相机/手机品牌
  • 镜头型号
  • 曝光对焦参数
  • 快门次数
  • GPS定位等信息

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

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

我这里找到了一张之前在天津吃饭的照片,这里我发原图,大家可以用这张图做测试进行验证(3MB多,加载可能有点慢)

图片[1]-你知道一张图片,背后隐藏了多少信息?-FancyPig's blog

通过电脑自带的工具查看

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

图片[2]-你知道一张图片,背后隐藏了多少信息?-FancyPig's blog

这里面就可以看到很多参数了,当然包括定位咯

图片[3]-你知道一张图片,背后隐藏了多少信息?-FancyPig's blog

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

我们粗略的填入上方的39117

图片[4]-你知道一张图片,背后隐藏了多少信息?-FancyPig's blog

我把相关链接放到下方,评论自取

通过微信小程序进行查看

微信里面可以使用小程序进行查看

图片[5]-你知道一张图片,背后隐藏了多少信息?-FancyPig's blog

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

当然,我们这里还给大家准备了适合程序员的处理方式,这里主要就是使用了exifread模块读取图片的exif信息

相关代码

百度地图的key我给大家已经配置好了,只需要修改倒数第二行的图片名称即可IMG_6623.jpg

import requests
import exifread


class GetPhotoInfo:
    def __init__(self, photo):
        self.photo = photo
        # 百度地图ak  请替换为自己申请的ak
        self.ak = 'w5yCMHrlcHn2Er6WHcjvpHMpNOeYGIX7'
        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()

图片和代码建议放在同一目录下

图片[6]-你知道一张图片,背后隐藏了多少信息?-FancyPig's blog

然后运行一下程序

图片[7]-你知道一张图片,背后隐藏了多少信息?-FancyPig's blog

然后就可以看到结果了

图片[8]-你知道一张图片,背后隐藏了多少信息?-FancyPig's blog

附录:Pycharm安装

由于本教程需要使用python脚本,故这里也简单介绍一下pycharm的安装过程

安装简易思路

如果你懒得看下面的过程,就记住:一直点next,如果有没打勾的打勾,简单粗暴。

安装详细过程

图片[9]-你知道一张图片,背后隐藏了多少信息?-FancyPig's blog
图片[10]-你知道一张图片,背后隐藏了多少信息?-FancyPig's blog

这里需要重启,添加环境变量才会生效

图片[11]-你知道一张图片,背后隐藏了多少信息?-FancyPig's blog

然后立即重启

图片[12]-你知道一张图片,背后隐藏了多少信息?-FancyPig's blog

重启之后,打开并同意用户协议

图片[13]-你知道一张图片,背后隐藏了多少信息?-FancyPig's blog

然后选择不发送数据

图片[14]-你知道一张图片,背后隐藏了多少信息?-FancyPig's blog

创建项目

使用PyCharm创建一个新的项目

图片[15]-你知道一张图片,背后隐藏了多少信息?-FancyPig's blog

文件位置可以根据你的需要进行修改,我这里选择默认的

图片[16]-你知道一张图片,背后隐藏了多少信息?-FancyPig's blog

安装exifread模块

Terminal中使用pip安装exifread模块

pip install exifread
图片[17]-你知道一张图片,背后隐藏了多少信息?-FancyPig's blog

安装Requests模块

Terminal中使用pip安装Requests模块

pip install Requests

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

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

NO ZUO NO DIE

图片[18]-你知道一张图片,背后隐藏了多少信息?-FancyPig's blog

© 版权声明
THE END
喜欢就支持一下吧
点赞41赞赏
分享
评论 共604条

请登录后发表评论