最近很多人留言问能不能获取取里面的通讯录,聊天记录等等,我们依次尝试的如下几个方案:总体来说已经实现 1.通过群控,将好友截图发送到服务端(python),利用python的图像识别库来获取好友的信息。 2.开发一个app,使用android自带AccessibilityService,模拟用户操作,然后获取屏幕中的内容。 3.破解的本地数据库。 我们是怎么知道把用户以及聊天的信息存到了本地数据库呢? 当我们打开手机的飞行模式的时候,打开,依旧可以看到里面的通讯录以及聊天记录。那么就说明肯定是将你能看到的所有信息都保存在了本地数据库里面,只是他将本地数据库加了密。既然存在了本地,我们就有办法把它取出来。 本地数据库的密码是什么呢? 请具体参考大神的文章,他通过反编译获取到的加密规则,特别厉害! 上述文章讲解主要是静态破解数据库,我们就基于他的静态破解方法,介绍下如何在代码中动态破解。不想看的同学们,我就直接介绍下本地数据库的加密规则了: .获取手机IMEI码 2.获取当前登录账号的uin(存储在sp里面) 3.拼接IMEI和uin 4.将拼接完的字符串进行md5加密 5.截取加完密的字符串的前七位(字母必须为小写) 那七位字符串就是数据库的密码了。因为已经有数亿的用户了,并且本地数据库又是存在用户的手机上,所以肯定不会轻易的对数据库进行大规模修改,所以密码的加密规则也是不可能变的,大家就放心用吧! 适用范围:已经获取root权限的手机 如果你的手机没有root,那下面的代码对你手机都是无效的哦~ 下面正式进入主题 一、大致浏览下的目录 1.连接上你的手机,打开开发者模式 2.打开Android Device Monitor 3.进入到File Explorer子页,查看目录 /data/data/com.tencent.mm 如果你发现文件夹打不开,或者发现点击/data目录里面没有内容,可能是因为没有权限,请在Command中依次执行如下命令: 大概的介绍下的目录结构,本地数据库都在MicroMsg文件夹里面,SharedPerferences文件都在shared_prefs文件夹里面。之前说的获取数据库密码时候需要的uin就是存在的SharedPreferences里面,对应的是 /data/data/com.tencent.mm/shared_prefs文件夹。 的本地数据库存放在 /data/data/com.tencent.mm/MicroMsg里面的一长串字符串的目录里面 注意:如果你登录过多个账号就会出现多个此类的文件夹,所以我们在之后的代码中会通过循环来查找当前登录用户对应的数据库文件 二、授予当前app管理员权限以及修改目录的读写权限 最好在app一启动就执行下面的代码,并且在每次获取数据库内容的时候也要再次执行,避免出现无权限读取相关文件的异常 public static final String WX_ROOT_PATH = "/data/data/com.tencent.mm/"; execRootCmd("chmod 777 -R " WX_ROOT_PATH); /** * 执行linux指令 * * @param paramString */ public void execRootCmd(String paramString) { try { 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