Skip to content

Mac应用插件

AloneMonkey edited this page Jun 26, 2020 · 3 revisions

MonkeyDev现已支持给Mac应用写插件啦!!!

  1. 首先新建工程在MacOS模块最下面选择MonkeyAppMac:

image

  1. 将需要注入的目标文件拖入TargetApp文件夹:

image

  1. Command + B 运行目标文件,将会自动注入dylib,默认实现了QQ防撤回的功能:
@class MQAIOChatViewController;
@class QQMessageRevokeEngine;

static void (*origin_MQAIOChatViewController_revokeMessages)(MQAIOChatViewController*,SEL,id);
static void new_MQAIOChatViewController_revokeMessages(MQAIOChatViewController* self,SEL _cmd,id arrays){
    
}

static void (*origin_QQMessageRevokeEngine_handleRecallNotify_isOnline)(QQMessageRevokeEngine*,SEL,void*,BOOL);
static void new_QQMessageRevokeEngine_handleRecallNotify_isOnline(QQMessageRevokeEngine* self,SEL _cmd,void* notify,BOOL isOnline){
    
}

static void __attribute__((constructor)) initialize(void) {
    MSHookMessageEx(objc_getClass("MQAIOChatViewController"),  @selector(revokeMessages:), (IMP)&new_MQAIOChatViewController_revokeMessages, (IMP*)&origin_MQAIOChatViewController_revokeMessages);
    
    MSHookMessageEx(objc_getClass("QQMessageRevokeEngine"),  @selector(handleRecallNotify:isOnline:), (IMP)&new_QQMessageRevokeEngine_handleRecallNotify_isOnline, (IMP*)&origin_QQMessageRevokeEngine_handleRecallNotify_isOnline);
}
  1. 启动完成之后,点击"Debug -> Attach to Process"选择刚刚运行起来的QQ进程。

image

然后在new_QQMessageRevokeEngine_handleRecallNotify_isOnline这个方法下一个断点,撤回一条消息,即可断下来看到堆栈。

image

注意: 本工具暂时还不支持本身有反调试的应用,比如百度网盘,如要调试可以使用AntiAntiDebug脚本启动时反反调试。

笔者相关文章:一篇文章走进Mac逆向的世界