微信逆向之朋友圈

前提


这篇文章我主要会讲我所掌握逆向的一些小技巧,及如何一步步的爬取到微信朋友圈的数据的过程。关于微信逆向的工作,可能很多小伙伴呢都干过这事,最让人头疼的就是如何快速定位一个Hook点。还有就是如何理清被混淆之后的代码。这两个点弄清楚,可能Hook你所要的东西,那就是很轻松了。我这里只是针对Android的微信7.0.3版本最新版本7.0.4

生活在这样的大数据年代,当然数据是最重要的,如果作为一个商户,你有N多个客户,那如何对这些商户进行分类,其次就是做到精准营销,然后那就是Money了。 那位对于朋友圈数据的分析会起到非常重要的作用。给每个商户打上一个Tag。我这只是一个简单的举例,不妨碍大家阅读下面的文章,那么废话不多说了。开始编码

如果你掌握了以下内容,你将可以获取好友的朋友圈图片,视频,评论,点赞及你之前所看到的内容,即使他已经关闭朋友圈,只要你看过,那就是存在数据库中,我们就可以拿得到

准备工作


以上除了手机root外,其他的工具我都附上了链接,大家直接去下载即可。对于如何root手机,作为一个Android 开发者,自行Google吧 推荐通过TWRP+SuperSu 的方式,很多机型都可以烧成功。网上很多案例。xpose 的使用这里我就不过多的赘述了,一些Api的调用而已。Jadx这个工具呢必不可少,当然你也可以使用其他的反编译工具(dex2jar,jeb,jd-gui....)用着顺手就行,我这里使用的是Jadx,啊真的很好用。

加载微信源码

以下的操作会让你加快Hook点定位

  1. 用Jadx 打开下载好的微信Apk,编译成功应该是如下页面

  1. 把编译好的项目另存为Gradle项目

  2. 用AS 打开刚刚另存的Gradle项目,AS 可以帮们建立快速索引,方便我们调试找Hook点。可能还有更好的操作,有同学知道的可以留言区交流以下

以上操作完成之后,准备工作已经大部分都完成了。

朋友圈数据库

这里我就简单介绍一下,网上也有这方面的资料,SnsMicroMsg.db这个就是保存我们朋友圈数据的数据库,SnsInfo这个表是具体内容,我们可以在/data/data/com.tencent.mm/MicroMsg/md5({mm+uin})账号目录下找到这个文件,而且也没有对数据库加密,可一直直接Navicat打开的,但是微信聊天记录数据库就是加密的,需要破解密码才能打开,密码一直没变过还是通过{IMEI+UIN}md5即可,回到主题,但是虽然你可以拿到朋友圈数据库,但是你发现并没有什么卵用,里面的数据全部加密了,完全摸不着头脑。这里大家可以看看这个数据库文件。除了能看到userName 和createTime 有点用,其他的字段真是看不到头绪

我们接下来注意观察第二张图片,content,attrBuf,这二个字段里面全是BLOB格式的,可以发现,小老弟把数据藏起来了啊。那难道我们就没有办法了吗!当然还是可以拿的到的,那就是通过微信源码查看了,我们接下来的工作就是,看微信是如何拿到这个BLOB,如何进行解析的。我们也通过他的方式进行解析不就得了吗。接下来进入主题。

Hook朋友圈Activity

我这里Hook点是个人朋友圈入口,通过点击通讯录,进入个人的朋友圈页面,然后找到这个Activity是哪一个Activity,然后查看这个页面的源码。目前到现在为止,还没有用到Xpose 这个工具,那么我们如何知道这个Activity是哪个呢,其实Android系统给我们提供了一个dumpsys的工具,根据包名可以获取到当前是哪个Activity,我们只需要adb shell 登进去

点击进入某个人的这个页面,然后调用一下代码就可以获取当前是哪个activity了

dumpsys activity |grep -i com.tencent.mm
复制代码

打开微信个人朋友圈页面执行上述代码之后即可获取当前页面,这时候可以在terminal里面看到如下

com.tencent.mm/.plugin.sns.ui.SnsUserUI

复制代码

到此为止,我们已经知道了个人朋友圈页面在哪里了。接下来我们去刚刚AS打开的微信项目里面找到这个SnsUserUI Activity了,打开页面可以发现很多代码已经混淆的很难读懂了,什么a.a.a,b.c.da这样的包名已经方法名。但是我们这时候不要慌张。接下来打开手机,我们可以通过微信这个页面的UI看到,这是一个list,那肯定不是listview就是recyclerview了。这是后打开AS找到SnsUserUI这个类,然后倒开他的structure目录

可以发现里面有个方法initView 是不是很熟悉,我们经常写代码也会这样写,那么我们这就点进去看一下, 这里就不粘贴很多代码。有兴趣可以自行反编译看看


 public final void initView() {
        this.qXD = (RelativeLayout) findViewById(f.sns_user_year_tip_layout);
        this.qXE 
  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值