adb读取短信内容、获取验证码

由于工作中的自动化测试任务需要在现网执行,从安全的角度考虑,短信验证的部分不可能再使用测试环境内的大权限方式绕过了,况且短信验证功能也是需要测试的关键业务之一,所以从网上搜索并总结了一份从测试机里取出短信的方法。下面开始详述取出短信方法,脚本部分是ruby编写,比较重要的部分在于命令行和adb交互短信数据文件的解析,所以换其它语言应该也是很简单的。

详细步骤

1.获取手机的root权限

获取权限的方法,百度上有很多种,需要这样做的原因是短信文件在系统目录的/data/data/com.android.providers.telephony/databases下,需要root权限才能访问。

2.安装ADB

安装过程参考,从命令行使用adb获取短信数据库的相应指令如下:
1.adb shell
2.su root
3.cd /data/data/com.android.providers.telephony/databases
(查看是否root成功,还有短信文件mmssms.db是否在这个目录下)

4.cp /data/data/com.android.providers.telephony/databases/mmssms.db /sdcard

(复制短信文件到sdcard目录下,在这个目录下就可以通过adb的pull命令直接拉取到本机上了)

5.exit

(退出adb shell)

6.adb pull /sdcard/mmssms.db

(命令行运行,复制到当前目录,接下来需要做的就是解析这个数据文件了)

3.安装SQLite

短信数据库是SQLite的格式,解析需要安装SQLite的客户端,详情参考SQLite的安装

4.获取短信的脚本

require 'open3'#命令行交互
require 'sqlite3'#sqlite
#获取adb的root权限,将短信文件复制sdcrad的文件夹,这样就可以通过adb的命令把文件拉取到本地
Open3.popen3('adb shell') do |stdin, stdout, stderr, wthr|

  stdin.write "su root\n"
  stdin.write "cp /data/data/com.android.providers.telephony/databases/mmssms.db /sdcard\n"
  stdin.write "exit\n"
  stdin.write "exit\n"
  stdin.close

  stdout.each_line { |line| puts line }
  stdout.close

end
#adb的pull命令把文件拉取到本地
system("adb pull /sdcard/mmssms.db")

#查询短信数据文件,表名是sms
db=SQLite3::Database.new("mmssms.db")
sms_array=Array.new
db.execute("select t.* from sms t order by _id") do |row|
  p row
  sms_array<<row[12]
end

db.close
sms_array.each do |sms|
  #打印详细内容
  puts sms
end

接下来按照自己的需求去解析需要的字符串就好了。

手机上/data/data/com.android.providers.telephony下没有database?

android 7.0变成/data/user_de/0/com.android.providers.telephony,验证有效

赞 (4)