欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 房产 > 家装 > adb命令对手机短信进行读取

adb命令对手机短信进行读取

2025/2/9 6:54:00 来源:https://blog.csdn.net/JBY2020/article/details/145517692  浏览:    关键词:adb命令对手机短信进行读取

目录

读取短息

按发件人号码和内容筛选

按时间戳筛选

python代码实现短信的读取


Android的短信存储在content provider中,通常是content://sms/inbox。可根据短信的内容、发件人号码或时间戳来筛选短息。因此,ADB命令需要包含这些条件。例如,使用--where参数来指定条件,比如address='号码'或body LIKE '%关键词%'。

短信数据库路径不同设备短信URI可能不同(通过调整--uri参数可操作不同短信箱),常见的有:

  • content://sms/inbox(收件箱)

  • content://sms/sent(已发送)

  • content://sms/draft(草稿箱)

  • content://sms/all (所有短信)

  • content://sms/outbox  发件箱(尚未发送)

  • content://sms/failed  发送失败的短信

读取短息

定位目标短信的_id:短信数据库中的每条记录都有唯一的_id字段。可以通过获取它进行其他操作

    query_cmd = ["adb", "shell","content", "query", "--uri", "content://sms/inbox","--projection", "_id","--where", f"address='{sender}'"   # sender表示发件人的号码]result = subprocess.run(query_cmd, capture_output=True, text=True)
按发件人号码和内容筛选
adb shell content query --uri content://sms/inbox \--projection _id,address,body,date \--where "address='1234567890' AND body LIKE '%关键词%'"
  • address: 发件人号码(需用单引号包裹)。

  • body LIKE '%关键词%': 短信内容包含的关键词。

  • 输出结果会显示符合条件的短信的_id

按时间戳筛选
adb shell content query --uri content://sms/inbox \--projection _id,address,date \--where "date > 1700000000000"  # 时间戳(毫秒)

python代码实现短信的读取

import subprocess
from datetime import datetime# 使用ADB命令获取短信
result = subprocess.run(['adb', 'shell', 'content', 'query', '--uri', 'content://sms/inbox'], stdout=subprocess.PIPE)
# 解析输出
output = result.stdout.decode('utf-8')  
print(output)

打印结果是一条字符串数据,需要根据自己的目的解析一下。发现数据都是键值对的形式,写一个方法将键值对字符串转为字典再提取对应的信息。

def string_to_dict(input_string):# 去掉字符串首尾的空格input_string = input_string.strip()# 将字符串按逗号分隔成多个键值对pairs = input_string.split(", ")# 创建一个空字典result_dict = {}# 遍历每个键值对for pair in pairs:# 如果键值对中包含等号,则分割成键和值if "=" in pair:key, value = pair.split("=", 1)  # 从第一个等号处分割key = key.strip()  # 去掉键的首尾空格value = value.strip()  # 去掉值的首尾空格# 如果值是数字,将其转换为整数或浮点数if value.isdigit():value = int(value)elif value.replace('.', '', 1).isdigit() and value.count('.') < 2:value = float(value)# 如果值是 NULL,将其转换为 Noneelif value.upper() == "NULL":value = None# 将键值对添加到字典中result_dict[key] = valuereturn result_dict
for row in output.split('Row: ')[1:]:data = string_to_dict(row)address = data.get('address')dt_sent = datetime.fromtimestamp(data.get('date_sent') / 1000)formatted_time_send = dt_sent.strftime("%Y-%m-%d %H:%M:%S")dt = datetime.fromtimestamp(data.get('date') / 1000)formatted_time = dt.strftime("%Y-%m-%d %H:%M:%S")service_center = data.get('service_center')body = data.get('body')print(f'{formatted_time} 收到 {address}({service_center}) 于 {formatted_time_send} 发送的短信信息:{body}\n')

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com