WeChat Magician

Read this document in other languages:
- English: https://github.com/Gh0u1L5/WechatMagician/blob/master/README.en.md

项目简介
WechatMagician是一款骚兮兮的Xposed插件,致力于让用户彻底掌控微信上的聊天消息及朋友圈内容,目前支持微信 6.5.3 ~ 6.5.16 版,实现的功能有:

  1. 防止微信好友撤回聊天消息(撤回提示可自定义)。
  2. 防止微信好友删除朋友圈动态、评论。
  3. 发送消息时可选图片的上限从9张上调至用户设定的数量(默认1000张)。
  4. 转发聊天消息时可选好友人数从9人上调至无限。
  5. 在“选择联系人”界面增加全选按钮。
  6. 一键转发他人朋友圈(支持纯文字、图文、视频、链接等)。
  7. 单条朋友圈一键截图。
  8. 设定朋友圈关键字黑名单,免除广告与被秀恩爱的烦恼。

注:使用朋友圈转发/截图功能时,请长按好友头像下方的空白处。

对WechatMagician的设计理念和未来规划感到好奇?
https://github.com/Gh0u1L5/WechatMagician
或加入官方交流QQ群: 135955386

效果预览

特别鸣谢

  • 感谢 @rovo89 编写的Xposed框架
  • 感谢 @rarnu 编写的防撤回插件wechat_no_revoke
Author(s): 
Package: 
com.gh0u1l5.wechatmagician
Version name: 
2.5.2
Release type: 
Stable (low risk of bugs)
Number of downloads: 
1,227 in total · 239 in the last 24 hours
MD5 checksum: 
3d6516f2f97cbb899c204daf160d3bf4
Uploaded on: 
Monday, October 16, 2017 - 17:38
Changes: 

0. 在某MIUI9手机用户的帮助下定位、修复了MIUI9下无法启动的问题(对其他魔改过的系统可能也有效果)。
Add support for MIUI9 (may also be helpful for other modified system).

1. 添加了骚气又可爱的Material Design用户界面。
Add a fancy & lovely material design user interface.

  • 让用户能够设置或开关插件特定功能。
  • Allow the user to customize, toggle on/off functions.
  • 让用户能够在用户界面监控插件当前运行情况。
  • Allow the user to see the status of the module in user interface.
  • 帮助用户更有效率的反馈Bug。
  • Allow the user to report bugs more efficiently.
  • 让用户能够隐藏启动器图标
  • Allow the user to hide the launcher icon of this module.
  • 给用户一个捐钱给我的按钮(笑)
  • Allow the user to donate money to me : )

2. 新增朋友圈关键字黑名单功能,从此告别广告或其他恼人的朋友圈。
Support moment blacklist to filter ads or annoying posts.

3. 支持直接转发朋友圈中的链接。
Allow the user to forward links in moments.

4. 修复对Android 4设备的支持。
Fix support for Android 4 devices.

5. 修复微信6.5.8以下版本的部分功能。
Fix part of the functions for Wechat version < 6.5.8.

6. 使用多线程加速,转发多图朋友圈更流畅。
Use multi-thread to speed-up the image forwarding.

7. 对之前的一些UI细节做了小优化。
Small improvements on previous UI.

8. 对线程安全与运行效率做了小优化。
Small improvements on concurrent efficiency.

注:Android 4用户使用新版用户界面的时候可能会遇到奇怪的兼容性问题,因为手头没有Android 4设备做测试所以目前我也没什么办法。

注:微信6.5.13 Google Play版用户遇到闪退的情况可以先升级6.5.16。Play Store上6.5.13已经下架换成6.5.10了,我实在找不到会闪退的6.5.13用来做测试,有人手里有能闪退的6.5.13的话希望发给我一份,多谢。

因为下周很忙,所以下周末应该不会有更新,祝大家周末愉快。

Version name: 
2.2.4
Release type: 
Stable (low risk of bugs)
Number of downloads: 
2,032 in total · 15 in the last 24 hours
MD5 checksum: 
7d673ded47353525a2fc2f3887687db5
Uploaded on: 
Monday, October 9, 2017 - 21:59
Changes: 

1. 增加了转发朋友圈视频的功能。
Add support for retweeting video moments.

2. 修复了随机发生的“点击转发没有反应”的问题。
Fix the heisenbug "forward button not working"

3. 修复了转发纯文字朋友圈时点击后退文本不清空的问题。
Clean the text if the user stop retweeting a pure text moment.

4. 修复了更改朋友圈背景图片导致微信闪退的问题。
Fix the crash happens when the user changes the SNS background picture.

5. 摆脱对资源钩子的依赖,现在支持禁用资源钩子的设备(如旧版小米、华为手机)。
Reduce the dependency on resource hooks, now one can use this module with "Disabled resource hook" (e.g. on early MIUI or EMUI devices).

6. 修复Xposed SDK的兼容问题,现在支持使用低于82版Xposed框架的设备。
Extend the compatibility to older Xposed SDK (less than 82), now one can use this module with old devices.

7. 修复了一些零碎的内存泄漏和句柄泄露。
Fix some small memory leaks and resource leaks.

8. 大幅调整了动态比对方面的API,显著提升稳定性。
Adjust the APIs for dynamic analysis, significantly improve the stability.

9. 调整多线程操作,降低本来就几乎不存在的卡顿。
Adjust the concurrent operations, reduce some trivial lags.

10. 增加了一些关键日志输出,帮助用户更有效地反馈Bug。
Add some log output for critical components, help users to report bugs more efficiently.

相信大家已经注意到了,这次的更新主要都是稳定性和兼容性方面的更新,因为接下来想做的新功能大多需要用户设置,但是应用主界面和设置界面还没有写。所以接下来的计划就是好好把用户界面打磨一下,如果没有人反馈什么严重Bug的话,下次更新大概会在两、三周之后,到时见面将会是洗心革面焕然一新的Wechat Magician。
另外顺便提醒一下Android 7.0/7.1的用户,官方版Xposed框架已经出了,非常稳定流畅。三星用户刷官方稳定版无法正常工作的,可以去找原作者rovo89发的官方测试版(具体来说是89-TEST1版)。其他ROM刷官方稳定版不工作的,也可以刷官方测试版试一下,如果还是不行的话就只能等自家论坛/贴吧大神出适配了。

Version name: 
2.2.1
Release type: 
Stable (low risk of bugs)
Number of downloads: 
1,731 in total · 1 in the last 24 hours
MD5 checksum: 
8e532dbf283845392c978f955efff5a7
Uploaded on: 
Monday, October 2, 2017 - 15:08
Changes: 

1. 发送消息时可选图片的上限从9张上调至1000张。
Loose the limit on number of photos to send.

2. 增加“一键转发他人朋友圈”的功能(仅限纯文字或图文)。
Allow the user to retweet other's moments (only works for text moments or image moments).

3. 增加“单条朋友圈一键截图”的功能。
Allow the user to take screenshots of a single moment.

4. 改进消息撤回的机制,修复了表情发送成功却显示不正常的Bug。
Improve the mechanism to prevent recalling, fix bugs related to sending emoji / stickers.

5. 修复了部分机型上反复重启的问题。
Prevent boot loop for some devices.

6. 修复了用户撤回自己消息后却显示没有撤回的Bug。
Fix the bug about recalling users' own messages.

7. 修复了6.5.16中失效的一条字符串消息。
Fix the corrupted string for 6.5.16 .

注:使用朋友圈转发/截图功能时,请长按好友头像下方的空白处。因为长按其他地方已经被微信自带的其他功能占用了,这块空白处是用起来最方便的。另外,朋友圈转发功能目前只在Android 6+微信6.5.14/6.5.16下测试通过,如果你遇到什么Bug还请到GitHub项目主页或官方QQ群反馈。

话说这次的朋友圈功能实现难度实在是有点超出我预料,本身逆向已经很累了,拿到的朋友圈图片还是加密过的,用的是腾讯自己写的一个叫MicroMsg . EncEngine的东西。微信内部各种自己实现的View和AsyncTask层层叠叠,看得我各种头大,最后能抓到这个EncEngine可能全靠思路猥琐和上天眷顾。
更迷醉的是到了最后整理关键类/方法的特征的时候,我才发现我一直用的那个apk-parser居然是不支持Multiple DEX的,所以朋友圈相关的所有类全都抓不到。最后我逼上梁山、山穷水尽、尽力而为地把对Multiple DEX的支持写出来交了个PR,不知道原作者那边什么时候才能看到。

关于朋友圈转发视频的功能,其实粗略看过后感觉跟转发图片区别不大,只是有一些细节要扣,暂时没时间去做了。转发链接应该也行,但是感觉这个微妙地没什么卵用,毕竟链接本来就可以轻松转发。这次的新功能,从实现原理上讲应该也是兼容6.5.3 ~ 6.5.16的,但是因为新功能实在是太复杂所以暂时不敢打包票,出了问题还请不要寄刀片上门,不过毕竟你们也不知道我住哪。

另外诚求志同道合的朋友帮忙做一下主界面,目前我想要在主界面加一些像Magisk主界面一样的卡片,用来提示用户Xposed框架安装失败、插件安装失败、插件某某Hook激活失败等等提示。因为我发现有时候插件明明没装上,系统却显示安装成功,Xposed那边则是一点提示都没有,重启之后看log才会发现插件根本没装上,如果能在主界面有个友好的提示就好了。

Version name: 
2.1.1
Release type: 
Stable (low risk of bugs)
Number of downloads: 
803 in total · 0 in the last 24 hours
MD5 checksum: 
e73fd9559116a04aa1bb486bb06d6ad2
Uploaded on: 
Tuesday, September 26, 2017 - 05:10
Changes: 

1. 将撤回提示的样式改为类似微X模块的风格。
Change the style of recalling notifications.

2. 移除转发人数上限为9人的限制。
Bypass the limit on number of recipients when retransmit messages.

3. 在“选择联系人”界面右上角增加全选按钮。
Add a button "Select All" in "Select Contacts" interface.

4. 在项目主页更新了大量内容,简略谈论了一下WechatMagician的设计理念和方向。
Update a lot of content in README document, discussed the design and purpose of this project.

5. 修复了一批影响微信性能的小bug。
Fixed some small bugs that slow down the Wechat application.

感觉这周总有写不完的程序和证明题,自己每天又时不时冒出各种有意思的想法想做做看;上个实习刚结束两三周,学校又开始拿刀架在脖子上催我找实习,Linkedin上还有Apple的HR私信催我发更新过的简历。每天早上五点睡,早上八点起,后来被室友骂我会猝死,于是现在尽量凌晨三点就睡了(笑)。
周六忙里偷闲做了一天,加了一些功能,写了一些文档,顺便也把怎么实现“一键转发朋友圈”摸索出个大概,但是具体什么时候完成就看缘分了。说起来,下次实习想试试国内的互联网公司,如果把这个项目写在简历上投给腾讯会不会很有娱乐效果?

Version name: 
2.0.1
Release type: 
Stable (low risk of bugs)
Number of downloads: 
1,757 in total · 0 in the last 24 hours
MD5 checksum: 
c75ce69257e6a12bc83f3ea5a4541f75
Uploaded on: 
Thursday, September 14, 2017 - 00:11
Changes: 

建立了官方交流QQ群: 135955386,欢迎投奔。

1. 针对微信的混淆技术,引入静态/动态分析来比对函数签名、查找关键类,显著提高稳定性。
Introduce static/dynamic analysis to defeat the obfuscator used by Wechat, significantly improve the stability.

2. 添加对“撤回图片”的提示效果
Add notification for recalling pictures.

3. 添加对“撤回链接”的提示效果。(有时会失效,但不影响用户体验)
Add notification for recalling website links. (unstable, but doesn't influence user experience)

4. 对旧代码进行了大规模重构,显著提升效率,改善代码风格,增强可读性
Refactor a large number of codes, improve the efficiency significantly, beautify the coding style and enhance readability.

说起来我也不知道为什么,明明代码写得好好的,可是第三条新功能就是会突然失灵一下,命中全靠信仰。讲真我都想杀个程序员祭天了,可是冷静下来一想,这项目就我一个程序员,哇……

Version name: 
1.1.0
Release type: 
Stable (low risk of bugs)
Number of downloads: 
2,236 in total · 0 in the last 24 hours
MD5 checksum: 
b8ed49eb7c6bb380fa906b4a630b95b6
Uploaded on: 
Tuesday, August 22, 2017 - 10:11
Changes: 

1. 以更合理的方式处理NoSuchMethodError.
Handle NoSuchMethodError more gracefully.

2. 更新通知栏彩蛋至微信版本6.5.13
Update the easter egg of status bar for Wechat 6.5.13

3. 其他无关痛痒的小修正
Some small fixes that do not have significant influence.

Version name: 
1.0.9
Release type: 
Stable (low risk of bugs)
Number of downloads: 
1,393 in total · 2 in the last 24 hours
MD5 checksum: 
61f4b21d6fcbae6dacfdedfdd9168f39
Uploaded on: 
Saturday, August 12, 2017 - 09:21
Changes: 

更新通知栏彩蛋,彩蛋支持版本6.5.3至6.5.10
Update for an easter egg, which is supported in version 6.5.3 ~ 6.5.10

Version name: 
1.0.8
Release type: 
Stable (low risk of bugs)
Number of downloads: 
1,331 in total · 0 in the last 24 hours
MD5 checksum: 
39a6f703ffd58f0149aa0e58c6ba7380
Uploaded on: 
Thursday, August 3, 2017 - 10:01
Changes: 

1. 重新以正确方式打包Xposed API,之前安装后无法运行的朋友,现在更新一下应该就没问题了。
Repack the Xposed API in correct way. If the previous module cannot be loaded correctly, it should works after this update.

2. 插件内部消息现遵循系统语言设置,目前仅支持中文、英文。
The internal strings of the module now follow the system language settings, currently we only support Chinese and English.

Version name: 
1.0.7
Release type: 
Stable (low risk of bugs)
Number of downloads: 
892 in total · 0 in the last 24 hours
MD5 checksum: 
876dd05d2a5100b96667c660e94079e3
Uploaded on: 
Sunday, July 30, 2017 - 06:01
Changes: 

This is the first published version on Xposed repository, for previous changes, please check the history on Github.