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

科普:图片中的EXIF信息
EXIF是Exchangeable Image File Format的缩写,它是一种用于在数字图像文件中存储元数据的标准格式。元数据是关于图片的信息,比如拍摄设备、拍摄日期和时间、曝光时间、ISO值、焦距、GPS定位等信息。
EXIF信息通常由数码相机、智能手机等设备在拍摄照片时自动添加到图像文件中。这些数据可以提供有关照片的详细信息,使用户能够了解拍摄环境以及使用的摄影设置。EXIF还可以记录一些特定于设备的信息,如制造商和型号。
很多对社工感兴趣的小伙伴,这时应该会有一个大胆的想法,那就是图片里如果包含了GPS定位信息
,那岂不是别人发个朋友圈不用定位我们也知道在哪里了呢?(发朋友圈不就是为了展示自己在哪?)不妨现在就来试一试吧
演示:寻找下面图片的EXIF信息
我这里找了一张昨天随手拍的一张照片,大家可以用这张图做测试进行验证

通过电脑自带的工具查看
下载完图片后,右键属性
,点击详细信息

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

到了这里如果你不嫌麻烦,可以用在线工具来找到具体定位
我们粗略的填入上方的29和108

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

真正想要获取大家个人的人肯定不会用这么傻的方法,下面为大家讲解高效的批量获取
使用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
,很有可能会报错,然后还查不到原因。

为防止这里被别有用心的人利用,这里我就点到为止了(真正想干坏事的也不用我这小菜鸡教)
写这篇文章只是为了从一个人肉者,开盒者的角度提醒大家注意防范个人隐私的泄露。
最后引用一句网友的话“对于大多数人来说,个人信息会不会泄露,不取决于你想不想泄露,而取决于有没有人想要”