通用技术 分享从安卓真机上获取短信验证码的方法

杨腾 · 2017年10月13日 · 最后由 xsh 回复于 2018年12月01日 · 3183 次阅读

前言

由于工作中的自动化测试任务需要在现网执行,从安全的角度考虑,短信验证的部分不可能再使用测试环境内的大权限方式绕过了,况且短信验证功能也是需要测试的关键业务之一,所以从网上搜索并总结了一份从测试机里取出短信的方法。下面开始详述取出短信方法,脚本部分是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


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

吾即大灾变!!!

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
最佳回复
xsh 回复

android 7.0 变成/data/user_de/0/com.android.providers.telephony,验证有效
原帖:https://forum.xda-developers.com/nexus-5x/help/sms-mms-database-location-change-t3447133

共收到 10 条回复 时间 点赞
xsh 回复

android 7.0 变成/data/user_de/0/com.android.providers.telephony,验证有效
原帖:https://forum.xda-developers.com/nexus-5x/help/sms-mms-database-location-change-t3447133

请问我在小米 max 7.0 手机上/data/data/com.android.providers.telephony 下没有 database?设备已 root 好

楼主您是在 android 几上做的呀?想详细请教你,能加你一个 QQ 吗?我的 QQ :308464537

赵欢 回复

这就是为了对付不给我去访问服务端存储的情况,脚本在外网跑,说是提供了会被别人攻击,很难受。

一般验证码都会在服务器中存储,利用脚本访问服务器存储软件,也能达到同样效果

沙子 回复

喜欢发帖的时候,呐喊一下。。

吾即大灾变!!!

这是什么鬼 😆

马克,之前也做过相关的

—— 来自 TesterHome 官方 安卓客户端

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册