IOS 实现微信自动抢红包(非越狱IPhone)

2020-01-18 17:18:53丽君

IOS,自动抢红包,自动抢红包实现,自动抢红包如何实现

微信的头文件

 

找到CMessageMgr.h和WCRedEnvelopesLogicMgr.h这两文件,其中我们注意到有这两个方法:- (void)AsyncOnAddMsg:(id)arg1 MsgWrap:(id)arg2; ,- (void)OpenRedEnvelopesRequest:(id)arg1;。没错,接下来我们就是要利用这两个方法来实现微信自动抢红包功能。其实现原理是,通过hook微信的新消息函数,我们判断是否为红包消息,如果是,我们就调用微信的打开红包方法。这样就能达到自动抢红包的目的了。哈哈,是不是很简单,我们一起来看看具体是怎么实现的吧。

新建一个dylib工程,因为Xcode默认不支持生成dylib,所以我们需要下载iOSOpenDev,安装完成后(Xcode7环境会提示安装iOSOpenDev失败,请参考iOSOpenDev安装问题),重新打开Xcode,在新建项目的选项中即可看到iOSOpenDev选项了。

IOS,自动抢红包,自动抢红包实现,自动抢红包如何实现

iOSOpenDev

dylib代码

选择Cocoa Touch Library,这样我们就新建了一个dylib工程了,我们命名为autoGetRedEnv。

删除autoGetRedEnv.h文件,修改autoGetRedEnv.m为autoGetRedEnv.mm,然后在项目中加入CaptainHook.h

因为微信不会主动来加载我们的hook代码,所以我们需要把hook逻辑写到构造函数中。

__attribute__((constructor)) static void entry(){ //具体hook方法}

hook微信的AsyncOnAddMsg: MsgWrap:方法,实现方法如下:


//声明CMessageMgr类
CHDeclareClass(CMessageMgr);
CHMethod(2, void, CMessageMgr, AsyncOnAddMsg, id, arg1, MsgWrap, id, arg2)
{
 //调用原来的AsyncOnAddMsg:MsgWrap:方法
 CHSuper(2, CMessageMgr, AsyncOnAddMsg, arg1, MsgWrap, arg2);
 //具体抢红包逻辑
 //...
 //调用原生的打开红包的方法
 //注意这里必须为给objc_msgSend的第三个参数声明为NSMutableDictionary,不然调用objc_msgSend时,不会触发打开红包的方法
 ((void (*)(id, SEL, NSMutableDictionary*))objc_msgSend)(logicMgr, @selector(OpenRedEnvelopesRequest:), params);
}
__attribute__((constructor)) static void entry()
{
 //加载CMessageMgr类
 CHLoadLateClass(CMessageMgr);
 //hook AsyncOnAddMsg:MsgWrap:方法
 CHClassHook(2, CMessageMgr, AsyncOnAddMsg, MsgWrap);
}

项目的全部代码,(源码下载地址)。

完成好具体实现逻辑后,就可以顺利生成dylib了。

重新打包微信App

为微信可执行文件注入dylib
要想微信应用运行后,能执行我们的代码,首先需要微信加入我们的dylib,这里我们用到一个dylib注入神器:yololib,从网上下载源代码,编译后得到yololib。