修改微信实现防撤回、自动抢红包功能
昨天看到大神skyun分享了一个实现微信主动发消息 防撤回 抢红包 骰子作弊 模拟位置 步数最高
的模块。自己之前也搞过类似的事情,但是实现的方法不同,仅实现了防撤回 抢红包 修改步数
的功能。其中修改步数是通过StepChanger实现的。防撤回、抢红包是通过修改微信APK实现的。这里主要描述一下防撤回、抢红包功能的实现思路。恰巧我修改微信的最新版本也是微信6.6.1。
效果图
基本思路
一来是因为不想装Xposed,二来是因为觉得通过Hook实现的方法不够优雅,所以想通过直接修改微信的方式来实现防撤回和抢红包的功能。
在修改微信的过程中,一个重要的原则就是尽量重用微信自带的界面和组件,以求添加的界面和原界面保持风格一致。
1 过掉校验和资源混淆
研究过微信的人肯定都知道,用apktool反编译微信,是不能重打包的,因为微信使用AndResGuard对资源做了混淆。即便用apktool d -r
命令保持资源文件不变,重打包后的微信也不能运行,这是因为微信启动后会对自己的dex文件进行校验,校验失败就不能运行。
要过掉这两个问题也很简单,针对资源混淆的问题,使用ShakaApktool。
针对校验问题,自己找到校验的位置然后把那一段代码patch掉。例如在微信6.6.1版本中,校验代码位于smali/com/tencent/mm/f/a.smali
。
.line 532
const v2, 0x19000
:try_start_2
invoke-static {v3, v2}, Lcom/tencent/mm/a/g;->a(Ljava/io/InputStream;I)Ljava/lang/String;
move-result-object v2
.line 533
if-eqz v2, :cond_2
iget-object v4, p0, Lcom/tencent/mm/f/a$a;->eHC:Ljava/lang/String;
invoke-virtual {v2, v4}, Ljava/lang/String;->equalsIgnoreCase(Ljava/lang/String;)Z
:try_end_2
.catch Ljava/io/IOException; {:try_start_2 .. :try_end_2} :catch_6
.catchall {:try_start_2 .. :try_end_2} :catchall_2
move-result v2
if-eqz v2, :cond_2
.line 534
:try_start_3
invoke-virtual {v5}, Lcom/tencent/tinker/loader/shareutil/ShareFileLockHelper;->close()V
:try_end_3
.catch Ljava/lang/Exception; {:try_start_3 .. :try_end_3} :catch_0
.line 551
:goto_1
invoke-static {v3}, Lcom/tencent/mm/f/a;->b(Ljava/io/Closeable;)V
goto :goto_0
2 研究微信的代码逻辑
这一部分主要是通过调试和Hook完成的。Hook框架用的Frida。调试用的Android Studio +
smalidea。
当然root权限是进行hook和调试的基础。有了root权限,开启调试权限的方法有两种。
一是修改AndroidManifest.xml
里面的android:debuggable
属性为true
,开启某个app的调试权限。
二是使用大神提供的工具mprop开启整个系统的调试权限。
调试和Hook的具体工作很繁杂,就不说了。
3 复用微信组件和界面
在研究完微信的代码逻辑后,就可以开始添加自己的代码了。反编译微信后得到的都是smali代码,手写那么多smali代码肯定是不太现实的。
这里采取的方式是用Android Studio新建一个工程,然后把微信的dex文件变成jar文件,再把这些jar文件当成库导入到工程中。接下来就可以写Java代码了。Java代码写好后,先编译成class文件,然后打包成dex文件,再反编译成smali文件。然后把这些smali文件复制到微信的代码目录中(这个过程好像有点蠢)。最后修改微信代码,在合适的地方调用自己添加的这些代码。
思路基本上是这样的,具体步骤太繁杂,这个就不写了。具体代码已经上传到Github,成品就不上传了。
[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法
最后于 2018-4-12 13:44
被iweizime编辑
,原因: