吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 22852|回复: 54
收起左侧

[Android 原创] 我的微信数据监控研究发展过程

  [复制链接]
hjw45611 发表于 2019-1-10 10:03
本帖最后由 hjw45611 于 2019-1-30 14:00 编辑

近两年来一直在做Android端 微信的消息备份功能,一开始是调研自己实现,现在是公司业务需要,现已实现好友相关信息备份,监控消息、领取红包、监控发布朋友圈数据、监控朋友圈点赞回复等功能。

严重声明
本文的意图只有一个就是通过分析app学习更多的逆向技术,如果有人利用本文知识和技术进行非法操作进行牟利,带来的任何法律责任都将由操作者本人承担,和本文作者无任何关系,最终还是希望大家能够秉着学习的心态阅读此文。

以下内容适用范围:已经获取root权限的手机
微信相关基本知识:
1.聊天消息表、联系人表、头像信息表、联系人标签表、红包转账信息表等都存在EnMicroMsg.db数据库中,但该数据库被加密,需要密码才能查看。
2.EnMicroMsg.db地址是/data/data/com.tencent.mm/MicroMsg/32位字符串/EnMicroMsg.db,32位字符串是通过MD5加密("mm"+uin码)得出的,如果有多个32位字符串的文件夹,说明登录过多个微信号,微信号不同,uin码不同。同一级的还有其他数据库,比如SnsMicroMsg.db,存放的是微信朋友圈相关表,该数据库无密码,可直接查看。
3.EnMicroMsg.db的密码  MD5(imei码 + uin码).substring(0, 7).toLowerCase()得到,imei码是通过获取手机IMEI码得到,uin码是微信SharedPerferences中存储的,文件位置\data\data\com.tencent.mm\shared_prefs\auth_info_key_prefs.xml,通过解析xml文件来得到"_auth_uin"字段的值。
4.当前登录微信的账号ID存放于\data\data\com.tencent.mm\shared_prefs\notify_key_pref_no_account.xml文件中,通过解析xml文件来得到"login_weixin_username"字段的值。


1.静态监控
是我一开始参考网上文章后实现监控的方法,使用的是定时复制数据库,并读取的方法
定时复制微信的数据库文件到我的文件夹下,计算得到密码后,使用sqlcipher连接并传入密码来读取数据,然后发送到服务器。


2.动态监控
可以看到静态监控的方法并不完善,并不能做到实时监控,在我接触到Xposed后开始使用hook 拦截的方式来监控微信数据
可以说微信是我反编译大厂app后发现的少数不做加固的app之一,让我省去了脱壳的步骤



这里主要对监控发布朋友圈数据进行详细教程,包含xposed的大多数使用。

-1使用 当前Activity 这个app来查看发布朋友圈页面的包名和Activity。
发布朋友圈编辑页.jpg
-2使用jadx打开微信apk,本案例使用的是6.6.7版本,搜索类SnsUploadUI
屏幕快照 2019-01-09 13.39.51.png
可以看到有一个SnsEditText的变量,很大把握可以确定这个变量就是发朋友圈的文本输入框,
-3找到发表按钮
看到发表按钮,可以确定它要么是一个MenuItem,要么是一个普通view,但总会有点击事件
先查找SnsEditText,发现它继承自EditText,直接在这个类中搜索 nRk.getText 的相关调用,很容易找到调用位置。

-4进行hook
[Java] 纯文本查看 复制代码
try {
    final Class<?> SnsUploadUIClass = cl.loadClass("com.tencent.mm.plugin.sns.ui.SnsUploadUI");
        XposedHelpers.findAndHookMethod(SnsUploadUIClass, "onCreate", Bundle.class,
            new XC_MethodHook() {
                @Override
                protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
                    super.beforeHookedMethod(param);
                    Object oSnsUploadUI = param.thisObject;
                    XposedHelpers.findAndHookMethod("com.tencent.mm.plugin.sns.ui.SnsUploadUI$5$1",
                        mlpparam.classLoader, "pO", String.class,new XC_MethodHook() {
                            @Override
                            protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
                                super.beforeHookedMethod(param);
                                //获取SnsUploadUIClass中的nRk变量
                                Object nRk=XposedHelpers.findField(SnsUploadUIClass, "nRk").get(oSnsUploadUI);
                                   
                                //方法1
                                //强转为EditText  
                                EditText editText = (EditText) nRk;
                                //得到发表朋友圈的文本
                                String text=editText.getText().toString();

                                //方法2
                                //执行getText().toString()得到发表朋友圈的文本
                                String text=  XposedHelpers.callMethod(nRk,"getText").toString();
                                
                                //todo上传数据
                            }
                    });
                }
            });
} catch (Exception e) {
    e.printStackTrace();
}


因为源码上有SnsUploadUI.this.nRk.setText("");这段,所以要在beforeHookedMethod中拦截
方法1是因为SnsEditText继承自EditText的,所以通过findField后直接强转成EditText,然后再获取字符串。
方法2是如果不知道SnsEditText是怎样的类的话,但我们知道nRk通过nRk.getText().toString()得到了文本信息,可以通过XposedHelpers.callMethod得到

需要说明的是beforeHookedMethod主要是截取方法参数,afterHookedMethod主要截取方法返回值,如果一个变量在方法中值被改变了,那就看你是要改变前的还是改变后的了。

至此拦截成功,使用Toast显示了一下。

使用toast显示拦截数据

使用toast显示拦截数据


以上代码使用了xposed 的findAndHookMethod,findField,callMethod等方法,相对全面系统。

使用xposed,最难的可能就是找到hook点,一般对于微信这种大量依赖数据库的,要么找到数据解析方法来拦截,要么找到数据入库或者查询操作自己解析判断来拦截
如果一开始无处下手,可以先找到它的数据库相关insert、update、delete、query操作,这样就可以通过打印的sql查询方法知道它每个页面查的是哪个数据表,然后分析数据表的结构和字段含义,再找到执行页面进行代码分析。

免费评分

参与人数 18威望 +1 吾爱币 +23 热心值 +14 收起 理由
yaoshen2048 + 1 我很赞同!很佩服这种高手
ruocan + 1 + 1 我很赞同!
qtfreet00 + 1 + 9 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
l320228 + 1 + 1 我很赞同!
言不由衷啊 + 1 + 1 热心回复!
笙若 + 1 + 1 谢谢@Thanks!
wushaominkk + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
青山依旧在 + 1 用心讨论,共获提升!
puluter + 1 用心讨论,共获提升!
空不了 + 1 + 1 热心回复!
TokyoGhoul + 1 我很赞同!
bondsong + 1 + 1 谢谢@Thanks!能不能分享一个成品的 朋友圈图+文的监控。我一直想搞一个可.
xuanle6 + 1 + 1 谢谢@Thanks!
smile1110 + 1 我很赞同!
ChinaNB + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
lwbjing + 1 用心讨论,共获提升!
maloneshaw + 1 + 1 热心回复!
linlinai + 1 + 1 谢谢@Thanks!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| hjw45611 发表于 2019-1-31 22:34
杨学子 发表于 2019-1-31 15:53
楼主 有没有研究过 微信 风控这方向的东西呢?

你说的风控是指微信聊天中对信息的筛选统计分析吧?例如员工在微信中不正当语言行为、监控红包转账信息、监控删除好友等行为吧,这些都有做过,大部分都是把这些行为发送到后台数据库,后台会对这些行为进行分析,然后发送警告的消息通知。
 楼主| hjw45611 发表于 2019-1-11 09:28
丶那年如此年少o 发表于 2019-1-10 16:48
我一点搜索然后做下的进度条到40%多点就卡死了。设置了反编译线程数也不行,还是会卡死。
大佬,你的是 ...

可以参考这个链接,改一下相关配置,应该是内存不够引起的。
https://blog.csdn.net/Fisher_3/article/details/78654450
头像被屏蔽
K_K 发表于 2019-1-10 10:48
tmhacker 发表于 2019-1-10 11:02
不会被封吧
A天狼A 发表于 2019-1-10 11:02
学习了。
linlinai 发表于 2019-1-10 11:07
大佬!写得挺好的
大山GZ 发表于 2019-1-10 11:09
厉害,厉害。
dy18 发表于 2019-1-10 11:16
写得挺好的
fihuang2315 发表于 2019-1-10 11:18
感谢楼主热心分享。学习了。
kahnarcy 发表于 2019-1-10 11:33
膜拜大神!!
ChinaF 发表于 2019-1-10 11:58
感谢分享
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-12-20 22:18

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表