Process localProcess = Runtime.getRuntime().exec("su");
Object localObject = localProcess.getOutputStream();
DataOutputStream localDataOutputStream = new DataOutputStream((OutputStream) localObject);
String str = String.valueOf(paramString);
localObject = str + " ";
localDataOutputStream.writeBytes((String) localObject);
localDataOutputStream.flush();
localDataOutputStream.writeBytes("exit ");
localDataOutputStream.flush();
localProcess.waitFor();
localObject = localProcess.exitValue();
} catch (Exception localException) {
localException.printStackTrace();
每次准备读取数据库之前都需要执行一次该命令 。Process localProcess = Runtime.getRuntime().exec("su")先通过这个命令,使得当前app获取到root权限,然后再通过chmod命令来修改的data目录的读写权限,因为我们需要操作读取的数据库文件以及sp文件,所以必须要有文件的操作权限 。
获取手机IMEI
IMEI的获取方法就很简单了,相信各位都知道吧 。唯一注意的就是要添加权限
获取的uin
的uin是存储在SharedPerferences里面,所以我们要在目录的shared_prefs文件夹里面查找其存放的xml文件,然后去解析它 。
/**
* 获取的uid
* 的uid存储在SharedPreferences里面
* 存储位置datadatacom.tencent.mmshared_prefsauth_info_key_prefs.xml
*/
private void initCurrWxUin() {
mCurrWxUin = null;
File file = new File(WX_SP_UIN_PATH);
try {
FileInputStream in = new FileInputStream(file);
SAXReader saxReader = new SAXReader();
Document document = saxReader.read(in);
Element root = document.getRootElement();
List<Element> elements = root.elements();
for (Element element : elements) {
if ("_auth_uin".equals(element.attributeValue("name"))) {
mCurrWxUin = element.attributeValue("value");
}
}
} catch (Exception e) {
e.printStackTrace();
LogUtil.log("获取uid失败,请检查auth_info_key_prefs文件权限");
的uin是存放在sharedPerferences文件夹里面的,具体路径为datadatacom.tencent.mmshared_prefsauth_info_key_prefs.xml 。让我们来打开这个xml文件看看里面到底是什么样子的,还有我们需要的uin到底是存放在什么地方:
文章插图
我们解析xml用的dom4j这个库里面的SAXReader,如果没有这个库的同学可以去这里下载
五、生成数据库密码
这一步比较容易,通过拼接字符串以及md5加密后就可以获取到数据库的密码
六、查找目录下的数据库文件
因为我们需要通过密码来连接的EnMicroMsg.db文件,所以我们需要先通过匹配算法把我们需要的db文件给查找出来 。如果该手机的用户切换过登录账号,那么每个账号都会生成一个EnMicroMsg.db,所以我们要把所有的db文件都给匹配出来 。
七、连接数据库
终于到了最关键的一步了 。这时候需要注意两点:
1.我们千万不可以直接通过net.sqlcipher.database.SQLiteDatabase这个类来连接我们上一步里面查找到的目录下的EnMicroMsg.db文件,可能是因为一个数据库文件不能被多次连接的情况,只要我们一成功连接上那个db文件,的客户端就会自动退出登录,并且会出现异常 。所有我现在的做法是把这个db文件拷贝到我们自己的app目录下,再进行连接 。
2.当我们有多账号登录过,就会存在多个EnMicroMsg.db文件,但是我们的数据库密码只有一个,也就是说通过这个密码能连接成功的数据库就表明是当前登录用户的数据库 。因为sqlcipher这个库中没有提供校验密码的方法,所以我们只能每次通过强行连接来判断密码是否正确,如果正确的话代码就会正常执行,错误的话就会抛出异常,因此我们要在这个方法外面加上try-catch来处理密码错误的异常 。
- 黑客盗微信号需要多少钱 黑客qq联系方式免费
- 微信号能定位吗 公安查了我三年前的微信记录
- 人家盗微信号干什么用的 盗取微信号会干什么事
- 盗微信号教程 如何获得一个人的微信号
- 盗微信号会坐牢吗 盗取微信号犯法严重吗
- 微信号注销需要多久生效 微信注销15天包括当天
- 什么应用可以盗微信号 盗微信号去干什么
- 为什么会有人盗微信号 微信密码怎么会被盗了
- 1分钟教你盗微信号支付密码 微信支付密码会不会被盗了
- 盗微信号犯法 盗微信号属于什么罪