某微信群控工具逆向记录

说明

某微信群控软件,软件使用PC控制手机端实现对微信的群控,有PC端控制软件及android端控制软件,android端使用xposed实现对微信的控制.

逆向思路

逆向的目标是跨过PC端,使用自己的系统实现对android端的控制.因此要破解的是PC端与android端的通信协议.

逆向过程

1.熟悉软件

首先熟悉软件的功能,使用方法,常见的提示等,方便在后续逆向时能更好的理解代码.

2.分析逆向代码

使用jadx查看逆向出的伪java代码,通过分析代码最终找到pc端与android端是通过socket进行通信的.socket报文解析代码如下:

根据代码可以看出报文格式:

前4个字节为报文长度,最后一个字节为结束标示,中间为消息内容,消息内容是protobuff格式.

3.编写测试代码,逆向protobuff

根据逆向得到的消息格式尝试编写控制端,为了方便直接使用mina库实现socket.报文的编码解码很简单,复杂的是消息内容protobuff文件的逆向.

protobuff是google推出的数据格式化协议,之前没有用过pb但使用过facebook的thrift,原理上大体一致.

根据proto与java类型的对应关系,可以使用java的逆向文件反推出proto文件,然后再使用proto文件就可以生成java文件.反推比较复杂点就是注意required/optional/repeated限定符的使用.

生成protobuff的java类后就可以编写mina编写socket的编解码类了.Decode方法如下:

encode方法同理就不再贴了.

测试socket通信

要进行通信测试,首先要知道传递的参数有哪些.获取参数最简单的方法就是在protobuff解析的地方打印出log.

先使用baksmali\apktool反编译出smali代码,然后找到相应的地方插入log.然后正常操作群控工具拿到相应的log即可.具体操作步骤就不详细写了.

后续根据log中的信息,构造出protobuff对象即可与群控app正常通信.

相关链接

JADXhttps://github.com/skylot/jadx

Linux下的逆向工具集https://github.com/APK-Multi-Tool/APK-Multi-Tool-Linux