黑客软件破解微信(黑客破解微信数据库

黑客软件破解微信(黑客破解微信数据库)
最近很多人留言问能不能获取取微信里面的通讯录 , 聊天记录等等 , 我们依次尝试的如下几个方案:总体来说已经实现
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();