Android 挂逼 修炼之行---微信实现本地视频发布到朋友圈功能

本文详细介绍了如何使用Xposed框架编写微信插件,实现在不越狱的情况下将本地小视频发布到朋友圈。通过apktool反编译微信,分析SightUploadUI页面,获取关键参数如标题、视频路径、MD5等,并借助Xposed框架拦截页面启动,构造intent启动发布视频页面。通过逆向分析,找到微信计算视频MD5的算法并模拟,解决了发送失败的问题。最终通过聊天页面的上下文菜单触发视频发布,实现了功能。
摘要由CSDN通过智能技术生成
               

一、前言

前一篇文章已经详细介绍了如何使用Xposed框架编写第一个微信插件:摇骰子和猜拳作弊器  本文继续来介绍如何使用Xposed框架编写第二个微信插件,可以将本地小视频发布到朋友圈的功能。在这之前我们还是要有老套路,准备工作要做好,这里还是使用微信6.3.9版本进行操作,准备工作:

1、使用apktool工具进行反编译,微信没有做加固防护,所以这个版本的微信包反编译是没有任何问题的。

2、借助于可视化反编译工具Jadx打开微信包,后续几乎重要分析都是借助这个工具来操作的。


二、猜想与假设

做好上面这两步之后,加上我们在之前的那个编写插件的基础之上,我们本次操作就应该非常简单了,还记得之前的插件的突破口是啥吗?看过文章的同学应该了解通过分析界面的控件来获取到id值,然后全局搜索得到的突破口,那么本文其实可能不需要这个方式了,而是另外一种方式,下面来详细介绍一下。在这之前我们先来看看微信正常的发布小视频到朋友圈的方式,会跳转到这个发布页面:


那么我们又要开始大胆的猜想了:

首先这个页面有的元素:标题,小视频,地理位置等信息,而这些信息应该会在请求发布的时候携带到服务器上。这个有点类似于小文件的上传功能。所以这个视频的文件是如何得到的。那么可以得到的假设:这个页面是一个Activity页面,可能从其他页面跳转过来的,同时会把这些元素信息通过intent携带过来,而小视频是个文件,所以应该会携带文件的名称。


三、逆向分析

有了这猜想之后,咋们就可以开始操作了,首先得到这个页面的activity名称,这个比较简单了,直接使用一个命令即可:adb shell dumpsys activity top


看到这个页面的名称是SightUploadUI,我们借助Jadx反编译微信之后,找到这个类:


我们直接看onCreate方法中有没有对intent参数解析操作,或者我们可以在这个类中全局搜一下getIntent字段,也可以快速得到解析的地方:


看到第一个字段Kdescription,从字段的名称来看应该是描述信息,而从下面的代码setText调用更可以确认了这个就是标题信息。我们继续查找:


又发现了一个字段KSightDraftEntrance,这块代码就有点多了,他是一个boolean类型,所以先不管了,因为后面即使是尝试的话也就两次操作,一次false一次true。不碍事的!可是到这里我们在也搜不到其他字段了,但是这个就和我们的预期不一样了,还差几个元素信息呢?最重要的视频文件路径没有,所以这个就要想起在onCreate方法中有一个ae类初始化的时候把当前activity传递进去了,那么可能他内部继续进行了参数解析,我们可以进去查看一下:


果然在他内部还有三个字段解析,分别是:KSightThumbPath,KSightPath,sight_md5;而从字段命名上来看猜想这个应该就是和视频信息相关的字段了。这里只要有Android开发经验的同学应该可以猜想:KSightPath字段是短视频路径,KSightThumbPath是短视频的默认封面图,sight_md5是短视频的校验值。到这里其实我们已经感觉快成功了,得到了这五个参数,那么我们可以直接尝试了操作了:

在本地存放一个短视频,封面图片,然后计算短视频的md5码,最后通过intent来启动这个页面即可。先不管后面的上传过程了,咋们可以先试验能成功跳转到这个页面展示本地小视频功能。


可惜到这里我们有一个问题,就是怎么获取这个启动页面的activity呢?也就是用哪个activity来启动他呢?有的同学可能这么干?直接简单明了的编写一个小程序,然后用小程序的activity启动这个页面。这个猜想是可以的,不过我没尝试,因为我想微信做了activi

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
为了避免大家浪费时间,直接先看下面的 Gif,略大,请耐心点。看完后,若你觉得会需要到,那么就请听我继续。gif 链接 http://123.57.244.105:8081/commentthumb/GIF.gifgit显示,略大,请耐心GitHub 链接废话一句:这个显示只是其中一部分,重点是:FFmpeg Camera 的录制部分,所以,你的星星(star)也是一种更新通知 (我通知你)。https://github.com/af913337456/WeChatVideoView功能点如果你看完上面的gif图,你会发现如下几点功能 (Function list):1,直观的播放前,可以显示封面缩略图播放时,如果还没有本地缓存,那么先进行下载下载过程中,显示圆型区域进度效果下载后,播放完毕后可以循环播放播放已经播放过的,是具备本地缓存的,也就是既能播放网络,也能播放本地2,隐藏的低耗电量低内存占用无延迟图与视频切换低耦合,高内聚,几行代码接入,一共3个类解析直观的功能点,几乎就是和新版微信的一样,从朋友圈点击一个视频,然后进入到一个 Activity 页面进行加载以及播放。为什么低耗电量和低内存占用?因为采用的是 SurfaceView 而不是 TextureView,图与视频切换的切换延迟也是这个原因。在你的 Activity 中这样使用这样就会以 id 为 activity_main 的 Relativelayout 为父容器装载。因为要避免内存泄露,所以你还需要做完下面的一些步骤,不会超过6行代码。技术点 (可以不看)1,下载操作:自定义 AsyncTask。PS:AsyncTask 比 Thread handler 重量级却方便(回调进度),但是,如果是 即放即用,结束即销毁,那么,no need to think about this;2,视频播放组合拳: surfaceView mediaPlayersurfaceView 用作显示,mediaPlayer 用来解码两者关系: mediaPlayer 绑定 surfaceView。为什么不用 TextrueView?3,进度区域自定义 View,3个画笔绘制,一个圆,一个边,一个扇区。作者:林冠宏 / 指尖下的幽灵掘金:https://juejin.im/user/587f0dfe128fe100570ce2d8博客:http://www.cnblogs.com/linguanh/GitHub : https://github.com/af913337456/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值