❗️你有0条未读消息

锤子手机短信恢复工具

背景

作为一个技术玩家,手机不ROOT真是怎么都不舒服。不ROOT没有掌控感:预装不能卸载、广告不能拦截、高级一点的应用不能安装…不能忍,于是今天又闲不下来折腾了下,结果又踩坑了。妈的,安卓手机品牌多样,真是踩坑无穷尽。这次倒是想到提前各种备份,还是栽在了短信恢复这事上。虽然现在短信已经用的不多了,有用的信息并不像以前那样多,但强迫症如我还是不恢复不舒服斯基。本篇博文主要想就锤子手机刷机root之后的短信恢复问题做一简单分享。绝对全网独家,别无他所,转载请注明出处,谢谢!

问题描述

刷机root过程略去不表,我是2.6.2系统,使用手机端kingroot获取root权限成功。在root之前使用优优刷机助手备份了各种数据。优优刷机助手备份的短信格式是”.csv”格式的,因此本篇分享的方案也仅对”.csv”格式的备份文件起作用。

在备份完成获取root成功后,本欲使用优优刷机助手继续恢复数据,怎料在恢复短信的时候提示要更改默认短信应用才行,没截图了,找了一张豌豆荚的,提示一样:

解决方案

卧槽!意想不到啊。折腾了半天都不行,后来想到,都是数据而已,如果我先给自己发几条短信,然后用手机自带的备份软件备份了,然后再用之前的备份文件替换这个临时的备份文件,再使用自带的备份软件恢复回来不就好了吗!

结果不行…查看了一下两个文档,发现”.csv”虽然在WIN下是用Excel打开,但也只是纯文本而不是二进制数据。于是乎想到,把备份的文件格式调整为和手机备份软件一致的格式不就OK了。

实施方案

对原理不感兴趣的可以直接略过该部分,直接阅读下一个部分。

这里把手机软件临时备份的文件叫做”ori.csv”,自己的备份数据叫做”new.csv”。
分别截取二者的前几行看一下:

1
2
3
4
5
6
7
8
9
10
11
12
### ori.csv
"address","person","date","date_sent","protocol","read","status","type","reply_path_present","subject","service_center","locked","error_code","seen","body"
"106575170001",,"1472639004199","1472639002000","0","0","-1","1","0",,"+861380057xxxx","0","0","1","【支
付宝】账户njh**@126**于08月31日18时23分在阿里巴巴(中国)有限公司成功付款1.00元"
"1065730312919757920",,"1472627502937","1472627499000","0","1","-1","1","0",,"+861380057xxxx","0","0","1","【阿里云】2016云栖大会旗舰场10月杭州启动。马云、王坚、胡晓明等阿里大佬现身与您探讨计算未来!http://tb.cn/Uu7LAUx 回td退订"


### new.csv
d_id,_id,联系人,姓名,类型,已读,时间,date,主题,呼叫中心,"短信内容"
11,9,`95188,"",收件箱,0,2016-02-26 09:34:24,`1456450464747,,,"【支付宝】贵账户njh**@126**于02月26日09时34分通过(余额)消费3.00元。详询95188"
11,11,`95188,"",收件箱,0,2016-02-26 12:26:46,`1456460806735,,,"【支付宝】贵账户njh**@126**于02月26日12时26分通过(余额)消费5.00元。详询95188"
11,13,`95188,"",收件箱,0,2016-02-26 16:16:22,`1456474582793,,,"【支付宝】eric.w…向您付款500.00元,已存入您的支付宝njh*@126.*,备注:实现网返款。详询 d.alipay.com/z"

从两个文件的格式上可以看出来,手机原生可以识别的格式中有很多默认的字段,我们可以直接赋值,备份文件中有用的字段其实只要对应的”联系人”,”date”,”短信内容”三个列的字段,并且分别对应原生格式的”address”,”date”,(“date_sent”可以使用同一个值),”body”字段。

于是乎我们只要编写一个简单的shell脚本处理一下即可:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#!/bin/bash
MYBACK="./new.csv"
RESULT="./message.csv"

#把文件中的'`'和'"'替换成空格
sed -i 's/\`//g' ${MYBACK}
sed -i 's/\"//g' ${MYBACK}

#写入文件头部
echo '"address","person","date","date_sent","protocol","read","status","type","reply_path_present","subject","service_center","locked","error_code","seen","body"' > ${RESULT}

while read line
do
//对于其他软件备份的csv格式文件,请自行数一下对应的字段在第几列,替换一下即可
address=`echo ${line} | awk -F',' '{print $3}'`
date=`echo ${line} | awk -F',' '{print $8}'`
body=`echo ${line} | awk -F',' '{print $11}'`
echo "${address},,${date},${date},0,0,-1,1,0,,+8613800571553,0,0,1,${body}" >> ${RESULT}
done < ./new.csv

运行一把,当前目录下的message.csv文件就可以用来替换原生备份文件来恢复啦。

使用方法

如果拥有Linux环境的朋友想必不用说就知道怎么运行了,鉴于大部分网友并不具有Linux环境,因此先说一下怎么在win下面使用。

  1. 安装Win下终端环境
    点击下载安装Babun
  2. 安装好以后打开babun
    1
    2
    3
    4
    5
    6
    7
    //为方便起见,将备份资料拷贝到D盘下,并起名new.csv
    //然后在D盘新建一个文本文档,将上一节的代码复制进去,并将后缀改为".sh"
    //然后在babun中运行
    cd D:
    dos2unix.exe gen.sh
    sh gen.sh
    //运行完以后看看是不是生成了一个message.csv的新文件

替换以后就可以使用手机自带的备份软件恢复了。

赞 赏

如果你觉得本文还不错的话也可以赞赏一点~