iOS 移动App入侵与逆向破解(微信自动抢红包上)

一.最近逆向了微信,实现了抢红包功能,记录一下自己逆向这个功能的过程,分两篇文章来记录,我逆向的微信版本是7.0.0。

二.准备工作

1.一台越狱的手机,并装有以下软件

    cycript

    dumpdecrypted

    debug server

    openssh

    FLEXLoader

一台苹果电脑,并装有以下软件

    class_dump

    usbmuxd

    Theos

    Hopper Disassembler v4

    LLDB

    xcode

    insert_dylib

    iTools

    iOS App Signer

2.基本的逆向知识

3.耐心

三、开始逆向微信

1.ssh连接到手机,利用dumpdecrypted砸壳,如果不太清楚可以看一下dumpdecrypted砸壳 , class_dump 导出头文件

2.在Cydia下载FLEXLoader,然后在iPhone的设置里找到FLEXLoader,点击进入找到微信,按下图设置


iOS 移动App入侵与逆向破解(微信自动抢红包上)_第1张图片

然后杀死微信,重新进入微信,进入聊天界面,按下图所示,找到BaseMsgContentViewController,查看class_dump导出的头文件找到同名的BaseMsgContentViewController.h文件


iOS 移动App入侵与逆向破解(微信自动抢红包上)_第2张图片
iOS 移动App入侵与逆向破解(微信自动抢红包上)_第3张图片


iOS 移动App入侵与逆向破解(微信自动抢红包上)_第4张图片

3.创建Tweak项目,创建命令和最终项目目录如下图:

这里需要注意2点

首先是bundle filter,这个需要填你需要注入的目标app的bundle id,MobileLoader模块会根据它来寻找你的tweak的注入目标

最后是list id applications to terminate upon installation,这里指定当tweak安装成功之后,需要kill的进程,我们要hook微信,这里就填微信的二进制文件名就可以了,为什么要kill? 因为我么的插件是需要在app启动时加载进去的,如果不重启app,插件是不会生效的


iOS 移动App入侵与逆向破解(微信自动抢红包上)_第5张图片

4.在新建的wxredtweak里,找到Makefile,修改配置如下

include $(THEOS)/makefiles/common.mk

ARCHS = armv7 arm64  #支持cpu类型

TARGET = iphone:latest:8.0 #最低支持版本

THEOS_DEVICE_IP = 192.168.100.138 #手机的ip

THEOS_DEVICE_PORT = 2222 #ssh端口

TWEAK_NAME = wxRedTweak

wxRedTweak_FILES = Tweak.xm

wxRedTweak_FRAMEWORKS = UIKit

include $(THEOS_MAKE_PATH)/tweak.mk

after-install::

install.exec "killall -9 WeChat"

5.现在我们根据此前砸壳后class_dump出来的头文件,找到BaseMsgContentViewController在pc终端执行如下命令

logify.pl /path/BaseMsgContentViewController.h > /path/Tweak.xm

输出的tweak文件大概是这个样子的

iOS 移动App入侵与逆向破解(微信自动抢红包上)_第6张图片

6.终端输入:make,报错,可以删除报错的函数或者用id代替,在执行make,成功以后,执行make package, 成功后再执行:make install。如果不太清楚可以看一下 [Thoes的使用](https://blog.csdn.net/xhzth70911/article/details/90054704) 。成功以后,打开Mac电脑的控制台,选择自己的手机,然后打开微信,进入聊天界面,用另外一个微信给这个微信发消息,在控制台看打印的信息:

iOS 移动App入侵与逆向破解(微信自动抢红包上)_第7张图片

根据控制台的打印信息,找到消息处理函

- (void)addMessageNode:(id)arg1 layout:(_Bool)arg2 addMoreMsg:(_Bool)arg3;

7.那么我需要给addMessageNode:(id)arg1 layout:(_Bool)arg2 addMoreMsg打断点,开始动态调试,不太清楚怎么打断点的,可以看一下[逆向动态调试](https://blog.csdn.net/xhzth70911/article/details/90044435),打好断点如下:


然后发消息给,打了断点的微信,进入断点,这时输入bt指令,就可以看到当前的调用栈:


iOS 移动App入侵与逆向破解(微信自动抢红包上)_第8张图片

得到CMessageMgr这个类,根据方法名我们能判断出MainThreadNotifyToExt:这个方法仅仅是用来发送主线程通知的,用logify来继续追踪CMessageMgr这个类,用5和6的方法,得到最终的消息处理函数

-(void)AsyncOnAddMsg:(id)arg1 MsgWrap:(id)arg2

8.继续hook,下面的方法,重复5和6的方法

%hook CMessageMgr

- (void)AsyncOnAddMsg:(id)arg1 MsgWrap:(id)arg2{

    NSLog(@"我想要的1 = %@ , 我想要的2 = %@", arg1, arg2);

    NSLog(@"我想要的1 class = %@ , 我想要的2 class = %@", [arg1 class], [arg2 class]);

    %orig;

}

%end

发送一条普通的消息,打印信息如下图:


iOS 移动App入侵与逆向破解(微信自动抢红包上)_第9张图片

在群聊和单聊里各发送一条红包的消息,红包消息都是type=49,确定type=49为红包消息

下一篇文章介绍如何实现抢红包

你可能感兴趣的