逆向

某微信群控工具逆向记录

说明 某微信群控软件,软件使用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