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砸壳 , 或者用Frida砸壳,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的使用 。成功以后,打开Mac电脑的控制台,选择自己的手机,然后打开微信,进入聊天界面,用另外一个微信给这个微信发消息,在控制台看打印的信息:
iOS 移动App入侵与逆向破解(微信自动抢红包上)_第7张图片根据控制台的打印信息,找到消息处理函

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

7.那么我需要给addMessageNode:(id)arg1 layout:(_Bool)arg2 addMoreMsg打断点,开始动态调试,不太清楚怎么打断点的,可以看一下逆向动态调试,打好断点如下:
在这里插入图片描述
然后发消息给,打了断点的微信,进入断点,这时输入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为红包消息

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

你可能感兴趣的:(iOS逆向)