Mac逆向 - 入门+QQ防撤回和自动抢红包实现

1.准备工作

借鉴此博文中软件以及思路准备
博主:喂草
博客地址://www.greatytc.com/p/c04ac36c6641
文章对我有启蒙作用,感谢!

2.修改上述博文中若干配置,以支持Xcode10

上述博文中用到了Xcode项目模板 EasySIMBL Bundle.xctemplate,但是最新版本Xcode不支持模板创建,所以我们要手动创建该项目。下文我以QQ为示例项目做演示。

1.打开Xcode创建项目,选择Installer Plug-in

选择项目类型

2.注意product中要填写目标项目的最后一段,以QQ示例


填写项目参数

3.创建qq.h和qq.m

#import <Foundation/Foundation.h>

@interface QQ : NSObject

+ (instancetype)sharedInstance;

@end
#import "QQ.h"
@interface QQ()

@end


@implementation QQ

/**
 * @return the single static instance of the plugin object
 */
+ (instancetype)sharedInstance
{
    static QQ *plugin = nil;
    @synchronized(self) {
        if (!plugin) {
            plugin = [[self alloc] init];
        }
    }
    return plugin;
}


/**
 * A special method called by SIMBL once the application has started and all classes are initialized.
 */
+ (void)load
{
    QQ *plugin = [QQ sharedInstance];
    NSLog(@"++++++++ %@ plugin loaded ++++++++", plugin);
 
}


@end

4.转到qq target - info 中,修改如下项

修改info内容

5.转到qq target - Build Setting,修改如下项

修改Build Setting

3.思路整理,上述博文中已经详细写到防撤回相关思路和编写代码的方式,接下来重点介绍红包相关思路。

以我们常规认识,在各大平台将红包统称为RedPack,我们搜索该关键词,在Hopper Disassembleer中搜索.

Hopper Disassembleer中搜索

好的项目命名规范都很明确,直接就有线索了,那么就先写出hook方法,先留着备用。

#import "BHMsgManager+hook.h"
#import "RedPackHelper.h"
@implementation NSObject (BHMsgManagerHook)
+ (void)hook{
    [NSClassFromString(@"RedPackHelper") jr_swizzleClassMethod:@selector(openRedPackWithMsgModel:operation:) withClassMethod:@selector(hook_openRedPackWithMsgModel:operation:) error:NULL];
}

+ (void)hook_openRedPackWithMsgModel:(id)arg1 operation:(id)arg2{
    [self hook_openRedPackWithMsgModel:arg1 operation:arg2];
}

接着我们要找到接受消息的方法,我们搜索msg关键词找到相关类

msg搜索结果

结果太多不好排除,直接靠猜,应该有个对应的管理类,按照一般命名规范,会以manager来作为后缀。。。逆向真的九分调试一分代码,调试七分靠猜三分靠实力。

疑似类:BHMsgManager,先去看看有哪些方法

疑似类:BHMsgManager,先去看看有哪些方法,找到class-dump出来的header文件,在Xcode中打开

header文件详情

果然是个消息收发管理类,方法一目了然,很明确,通过方法名可以大致猜到什么用途,我们要找的是收到消息的时候调用函数,上方图中有个疑似方法
- (void)appendSendMessageModel:(id)arg1;

我们继续hook调试这个方法,看看是否有我们需要的数据。

#import "BHMsgManager+hook.h"
#import "BHMsgManager.h"
#import "RedPackHelper.h"
@implementation NSObject (BHMsgManagerHook)
+ (void)hook{
    [self jr_swizzleMethod:@selector(appendReceiveMessageModel:msgSource:) withMethod:@selector(hook_appendReceiveMessageModel:msgSource:) error:NULL];
    [NSClassFromString(@"RedPackHelper") jr_swizzleClassMethod:@selector(openRedPackWithMsgModel:operation:) withClassMethod:@selector(hook_openRedPackWithMsgModel:operation:) error:NULL];

}
- (void)hook_appendReceiveMessageModel:(id)arg1 msgSource:(long long)arg2{
    NSLog(@"+++接收到的消息:%@ class %@",arg1,[arg1 class] );

    [self hook_appendReceiveMessageModel:arg1 msgSource:arg2];
}
+ (void)hook_openRedPackWithMsgModel:(id)arg1 operation:(id)arg2{
    [self hook_openRedPackWithMsgModel:arg1 operation:arg2];
}
@end

我们要打印一下收到的arg1参数以及他的类型,好找到对应的类进一步分析,第二个参数arg2不太像是我们需要的消息体,因为它是个long long类型的。

打开控制台看下输出,过滤一下"+++字符"

发现是一个__NSArrayM,对应就是我们熟知的NSArray类型,而且内部数据已经打印出来,我们继续分析内部元素的数据和类型,写一个for循环打印内部元素和对应类型。

- (void)hook_appendReceiveMessageModel:(id)arg1 msgSource:(long long)arg2{
//    NSLog(@"+++接收到的消息:%@ class %@",arg1,[arg1 class] );
    for (id msg in arg1) {
        NSLog(@"+++消息体 %@ 消息类型 %@",msg, [msg class]);
    }
    [self hook_appendReceiveMessageModel:arg1 msgSource:arg2];
}

运行,看下控制台消息。

控制台消息,输出消息体类型和内容

发现消息类型是BHMessageModel,顺藤摸瓜,我们要找到能标识红包消息和其他消息的字段,我们读一下BHMessageModel.h文件。

MsgType应该是我们要找的字段

好的项目能一目了然,MsgType这个字段应该就是消息类型字段,是个int类型数据,然后就要找到红包信息的MsgType是多少,我们继续写代码输出一下MsgType。

- (void)hook_appendReceiveMessageModel:(id)arg1 msgSource:(long long)arg2{
//    NSLog(@"+++接收到的消息:%@ class %@",arg1,[arg1 class] );
    for (id msg in arg1) {
        NSLog(@"+++消息体 %@ 消息类型 %d",msg, [msg msgType]);
    }
    [self hook_appendReceiveMessageModel:arg1 msgSource:arg2];
}

这里注意一下,红包如果靠等别人发就比较被动了,我们找一个小号和自己大号来发,来尽量过滤掉杂乱消息。

发送文本消息

发送红包消息

两者数据不同,说明能区分两种不同的消息,那么我就get到了它的点,针对311类型消息,我们直接调用之前写好的打开红包的方法。

- (void)hook_appendReceiveMessageModel:(id)arg1 msgSource:(long long)arg2{
//    NSLog(@"+++接收到的消息:%@ class %@",arg1,[arg1 class] );
    for (BHMessageModel * msg in arg1) {
        if (msg.msgType == 311) {
            NSLog(@"+++收到红包消息 消息体 %@ 消息ID %d",msg, msg.msgID);
            [NSClassFromString(@"RedPackHelper") openRedPackWithMsgModel:msg operation:0];
        }
    }
    [self hook_appendReceiveMessageModel:arg1 msgSource:arg2];
}

ok,let's test it!

运行结果

由于我这个是个小号没有实名认证,但是结果很明确,我们实现了自动抢红包的逻辑。

PS:本文仅仅作为学习,切勿用做商业用途,在此感谢腾讯公司提供的强大的程序免费供我们使用,再次感叹QQ技术团队的强大,只有良好的代码才有良好的阅读体验。

代码已上传GitHub,再次强调切勿用作商业用途,本文仅仅作为参考学习用途,如用作商业用途伤害到软件公司的权益,本人不负任何责任。
地址:https://github.com/wwpp3399/MacQQAutoOpenRedPack/tree/master

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,718评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,683评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,207评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,755评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,862评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,050评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,136评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,882评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,330评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,651评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,789评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,477评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,135评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,864评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,099评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,598评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,697评论 2 351