参考:http://blog.renren.com/blog/239362558/903375190
一些简单逆向工程时的笔记,没有仔细整体,欢迎交流。基本的结论是:
1. 微信划分了http模式(short 服务)和 tcp 模式(long 服务),分别应对状态协议和数据传输协议
2. 从抓包观察到的流程看,其协议不是太复杂,但是代码混淆较重,逆向代价较大
1. 使用逆向工程的工具,主要照顾安卓版
在mac下使用brew比较容易:brew install apktool
2. 下载最新的微信apk,4.5 2013 - 04 - 12
3. 反编译后建立工程
apktool d com.tencent.mm.apk weixin
可以在生成的weixin文件夹,浏览其工程结构,但是smali文件本身看的实在是头疼,用 dex2jar 工具 (https://code.google.com/p/dex2jar/ )简单转换为一个jar包后使用 jd-gui 查看。
3.1 使用 d2j-dex2jar.sh 转换为jar包
3.2 使用 jd-gui 阅读
结构:
1. com.tecent.mm.booter.CoreService 可以看到核心入口,可以看到这是一个activity
2. com.tecent.mm.ad -> com.tecent.mm.network 这个是网络核心包,做了极度的混淆
到这里发现实在没有精力去猜测了,还是直接抓包方便一些
协议抓包:
1. 先获取手机的root权限,刷机,应该申请一个方便一键刷机的机型。
http://jingyan.baidu.com/article/e8cdb32b847aa937052bad35.html
2. 获取一个安卓版本的tcpdump
http://www.eecs.umich.edu/~timuralp/tcpdump-arm
3. 获取一些dump数据
3.1 ./tcpdump -p -s 0 -w /sdcard/capture.pcap
3.2 登陆微信,进行一些发送接受操作
3.3 ctrl-c 掉 tcpdump
3.4 将 capture.pcap adb pull回来
4. 用wireshark进行分析
tshark -r capture.pcap -Vx > capture.ana
tshark -r capture.pcap -Vx -z expert,ip.addr==180.153.218.191 > capture.long
tshark -r capture.pcap -Vx -z expert,ip.addr==180.153.82.27 > capture.short
5. 结论:
微信包含了两类服务器 short (short.weixin.qq.com) 和 long (long.weixin.qq.com)
其中long的量较多,dns可以查到6台入口,short有2台
long 服务分析:
long.weixin.qq.com: type A, class IN, addr 180.153.218.191
Name: long.weixin.qq.com
Type: A (Host address)
Class: IN (0x0001)
Time to live: 12 minutes, 56 seconds
Data length: 4
Addr: 180.153.218.191 (180.153.218.191)
long.weixin.qq.com: type A, class IN, addr 101.226.62.23
Name: long.weixin.qq.com
Type: A (Host address)
Class: IN (0x0001)
Time to live: 12 minutes, 56 seconds
Data length: 4
Addr: 101.226.62.23 (101.226.62.23)
……
1. 抓包的结果是看到大量的http-alt,如果不意外的话,应该是LVS集群,提供长连接的tcp服务。
2. 数据的收发相关的应该从这里进行,协议为纯二进制
short 服务分析:
short.weixin.qq.com: type A, class IN, addr 180.153.82.27
Name: short.weixin.qq.com
Type: A (Host address)
Class: IN (0x0001)
Time to live: 10 minutes, 47 seconds
Data length: 4
Addr: 180.153.82.27 (180.153.82.27)
short.weixin.qq.com: type A, class IN, addr 180.153.218.192
Name: short.weixin.qq.com
Type: A (Host address)
Class: IN (0x0001)
Time to live: 10 minutes, 47 seconds
Data length: 4
Addr: 180.153.218.192 (180.153.218.192)
1. 安卓wifi场景下,连接到 180.153.82.27 服务器
2. 汇报状态
POST /cgi-bin/micromsg-bin/statreport
content 长度 360
可以反查到 com/tencent/mm/modelstat/a 为状态汇报逻辑
3. 汇报strategy
POST /cgi-bin/micromsg-bin/reportstrategy
content 长度 248
可以反查到com/tencent/mm/plugin/c/b/k 为汇报strategy 逻辑
看了下代码,是一个奇怪的数字308,待猜
4. 服务器通过http传过来几个 micromsgresp.dat
这里不明觉历,该文件没找到
看了下,推过来的数据是2个,正好我的未读消息显示的泡也是2个,有可能是它们
5. 自动验票
POST /cgi-bin/micromsg-bin/downloadpackage
反查到 com/tencent/mm/w/i
没看明白,里面包含一些ticket逻辑,待猜
6. 服务器再次推送过来 micromsgresp.dat
结合上面的验票,有可能是离线QQ的相关内容?
7. 再次汇报状态
POST /cgi-bin/micromsg-bin/statreport
两次汇报的时间戳:
1. Arrival Time: May 4, 2013 22:27:08.276868000 CST
2. Arrival Time: May 4, 2013 22:27:10.449625000 CST
猜测微信将汇报状态作为某种心跳,其间隔为2s
8. 服务器再次推送过来 micromsgresp.dat
待猜
9. 再次汇报状态
POST /cgi-bin/micromsg-bin/statreport
时间戳:
Arrival Time: May 4, 2013 22:27:12.606075000 CST
相关推荐
2. **协议解析**:研究协议的格式和结构,包括报文头、报文体以及各种命令代码的含义。 3. **功能测试**:模拟用户行为,对聊天、群聊、朋友圈、支付等各项功能进行测试,确保它们在新协议下能正常工作。 4. **...
【C#微信协议源码DEMO】是一个基于C#编程语言实现的微信协议示例代码,主要用于演示如何与微信服务器进行交互,实现如扫码登录、用户管理、通讯录同步等功能。这个DEMO对于想要深入理解微信API接口以及微信通信机制...
这意味着可能存在一些专门用于教学或研究目的的iPad版微信协议资料。这些资料可能会更深入地探讨上述提及的功能和技术细节,并提供具体的实现方法或案例分析。对于希望深入了解微信协议的开发者来说,这些资料将非常...
易语言微信协议源码是编程爱好者和开发者们用于研究微信通信机制的重要工具,它允许用户通过编程接口实现微信的功能,如消息发送与接收、信息获取、好友与群聊列表的获取等。这篇文档将深入解析这款源码的关键知识点...
微信,作为中国乃至全球范围内广泛使用的即时通讯软件,其背后的通信协议对于开发者来说具有重要的研究价值。尤其是对于iPad版本的微信,由于其在屏幕尺寸和操作方式上的特性,协议设计上可能与手机版本有所不同。...
在微信协议的分析中,首先需要做的是配置虚拟AP(Access Point,无线接入点),以保证能够通过Wireshark捕获到微信客户端与服务器之间的通信数据包。通过设置无线网卡为虚拟AP模式,可以让手机等设备通过虚拟的无线...
总的来说,微信协议7.0.14的研究为我们提供了一扇窗,让我们得以窥见微信背后的复杂网络通信技术。但同时,我们也要意识到,尊重知识产权和用户隐私是每个开发者的责任。通过学习和理解这些协议,我们可以提升自己的...
1. "main.exe":通常这是一个可执行文件,可能是整个工具包的主程序,用户可以通过运行这个文件启动微信协议的模拟或解析过程。 2. "linux":可能是一个针对Linux系统的相关文件夹,包含在Linux环境下运行此工具包所...
通过打开并研究这个文件,我们可以了解如何在易语言中应用上述DLL来实现微信协议。 3. `演示程序.exe`:这是编译后的可执行文件,可以直接运行以查看demo的实际效果。通过运行它,开发者可以看到各项功能的实现,并...
然而,需要注意的是,微信对于第三方程序的使用有着严格的限制,擅自修改或利用微信协议可能违反其用户协议,可能导致账号被封禁。因此,任何基于此协议的开发和应用都应在合法和合规的范围内进行。 总结起来,...
"微信协议hook代码"的标题和描述暗示了我们将会探讨如何通过hook技术来观察和改变微信应用程序中消息的发送与接收过程。下面我们将深入讲解相关知识点。 首先,让我们了解什么是Hook。在编程中,Hook是一种机制,...
通过深入研究这份协议文档和提供的demo,开发者可以学习到如何利用编程语言与微信服务器进行通信,这对于开发微信插件、自动化工具或者进行微信API的二次开发具有极大的参考价值。同时,这也是对软件工程实践的一种...
食用说明 1、先运行Redis目录下的redis-server.exe 2、然后返回运行WeChat.exe 3、运行后出现http://:12221字样说明成功了,浏览器访问http://127.0.0.1:12221/即可食用!
最新的2.6微信协议显然进行了更新,增加了新的功能,尤其是对于开发者和研究者来说,这提供了一个更广阔的操作空间。 "添加外部WXID"是指允许用户输入非微信系统内的用户标识符(WXID),可能是为了实现与其他第三...
微信协议则是指微信客户端与服务器之间通信所遵循的一系列规则和格式。这些协议包含了用户登录验证、消息传输、文件分享等多个方面。由于微信的协议是私有的,不对外公开,因此对其进行研究和理解需要逆向工程的技术...
Airkiss是微信提出的一种无线应用层协议,主要用于给无法交互的硬件设备进行网络配置, 如(智能)插座,灯泡,飞机杯等. 其原理是将硬件设备的网卡置于监听模式(monitor mode), 又称为混杂模式(promiscuous mode), 从而...
总结来说,这个开源项目可能是一个跨平台的解决方案,包含C#和Java两种语言实现,用于理解并实现微信协议。它可能涉及iPad、Mac和Windows平台的协议细节,以及C++编程语言相关的面试问题。开发者可以通过研究该项目...
同时,由于微信协议可能会更新,需要定期关注并适配新的版本。 需要注意的是,微信对于其协议和接口有严格的使用规定,未经许可的HOOK行为可能触犯法律,因此在实际操作时,一定要遵守相关规定,确保合法合规。 总...
在处理PC微信协议源码时,易语言提供了良好的可读性和可扩展性,使得开发者能够更直观地理解代码逻辑,并可能进行二次开发或定制化修改。 这份源码中可能包含的内容有: 1. **连接建立**:微信如何与服务器建立...
文件"功能演示.e"可能是使用易语言编写的一个功能展示程序,它可能包含了对微信协议的部分实现,用于演示如何使用这些协议来执行常见的微信功能,如发送文本消息、接收朋友圈更新、发起视频通话等。通过这个程序,...