iOS逆向实战(微信自动抢红包下)

在前两篇文章中,我们详细介绍了如何反汇编、创建Tweak项目实现自动抢红包功能的思路。今天我们继续下篇,主要说两个事:添加一个开关控制自动抢红包,打包重签名安装到非越狱手机上。

添加抢红包开关

我们先来讲解怎么在设置页面添加一个开关控制自动抢红包。

效果如下图:

0001.jpg

查找设置页Controller

可以通过cycript附加微信进程或者Reveal工具的方式查找当前Controller的名字(不会的可以看前两篇文章),很容易可以找到设置页面Controller是:NewSettingViewController

添加UISwitch开关

下面要考虑,怎么在UITableView中添加一个cell呢?

在导出的头文件中可以找到NewSettingViewController同名的头文件NewSettingViewController.h,分析头文件可以看到有一个MMTableViewInfo *m_tableViewInfo;,猜测它可能含有TableView的信息。

分析MMTableViewInfo

查看MMTableViewInfo同名的头文件,里边有一个MMTableView *_tableView;成员变量,并且MMTableViewInfo实现了UITableView的UITableViewDelegate, UITableViewDataSource两个协议。所以可以肯定MMTableViewInfo负责TableView的数据源和代理事件。

仔细观察MMTableViewInfo头文件,还有两个方法

- (void)addSection:(id)arg1;
- (void)insertSection:(id)arg1 At:(unsigned int)arg2;

这可能正是为TableView添加一个Section。

使用logify.pl可以查看insertSection: At:第一个参数是什么类型

%hook MMTableViewInfo
- (void)insertSection:(id)arg1 At:(unsigned int)arg2 {
    NSLog(@"insertSection arg1:%@",[arg1 class]);
    %log;
    %orig;
}
- (void)addSection:(id)arg1 {
    NSLog(@"addSection arg1:%@",[arg1 class]);
    %log;
    %orig;
}
%end

经验证,以上方法的arg1类型是:MMTableViewSectionInfo,查看MMTableViewSectionInfo同名的头文件,可以看到我们想要的另外两个方法:

- (void)addCell:(id)arg1;
- (void)insertCell:(id)arg1 At:(unsigned int)arg2;

相同的方式可以确定以上两个方法的arg1类型:MMTableViewCellInfo。接下来就需要查找MMTableViewCellInfo同名的头文件MMTableViewCellInfo.h怎么创建一个CellInfo。

经查找,发现三个我们用得到的方法

+ (id)switchCellForSel:(SEL)arg1 target:(id)arg2 title:(id)arg3 on:(_Bool)arg4;
+ (id)switchCellForSel:(SEL)arg1 target:(id)arg2 title:(id)arg3 on:(_Bool)arg4 isFitIpadClassic:(_Bool)arg5;
+ (id)switchDisableCellForSel:(SEL)arg1 target:(id)arg2 title:(id)arg3 on:(_Bool)arg4;

我们选择第一个来创建。

最终在设置页添加开关的代码如下:

%hook NewSettingViewController
- (void)reloadTableData{
    %orig;
    MMTableViewInfo *tableViewInfo = [(id)self valueForKey:@"m_tableViewInfo"];

    MMTableViewSectionInfo *sectionInfo = [%c(MMTableViewSectionInfo) sectionInfoDefaut];
    MMTableViewCellInfo *cellInfo = [%c(MMTableViewCellInfo) switchCellForSel:@selector(handleRedSwitch) target:[LLRedManager sharedInstance] title:@"微信抢红包" on:[LLRedManager sharedInstance].isAutoRed];
    [sectionInfo addCell:cellInfo];
    [tableViewInfo insertSection:sectionInfo At:0];
    MMTableView *tableView = [(id)tableViewInfo valueForKey:@"_tableView"];
    [tableView reloadData];
}
%end

抢红包开关单例

抢红包的开关显示出来了,我们需要一个单例可以把开关状态和抢红包关联起来,我们定义一个LLRedManager的单例,里边有两个成员变量,一个是isAutoRed开关状态,另一个用于存储抢红包的信息NSMutableArray *array;。LLRedManager代码如下:

@interface LLRedManager : NSObject
@property (nonatomic, strong) NSMutableArray *array;
//是否自动抢红包
@property (nonatomic, assign) BOOL isAutoRed;
+(instancetype) sharedInstance;
//添加对象
-(void) addParams:(LLRedEnvelopParam *) params;
//获得对象
- (LLRedEnvelopParam *) getParams:(NSString *) sendId;
@end

@implementation LLRedManager
+(instancetype) sharedInstance{
    static LLRedManager *_instance;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        _instance = [[LLRedManager alloc] init];
    });
    return _instance;
}

-(instancetype)init{
    if (self = [super init]){
        _array = [[NSMutableArray alloc] init];
    }
    return self;
}

//添加对象
-(void) addParams:(LLRedEnvelopParam *) params{
    @synchronized(self) {
        [_array addObject:params];
    }
}
//获得对象
- (LLRedEnvelopParam *) getParams:(NSString *) sendId{
    @synchronized(self) {
        NSInteger resultIndex = -1;
        for (NSInteger index = 0 ; index < self.array.count ; index++) {
            LLRedEnvelopParam *params = self.array[index];
            if ([params.sendId isEqualToString:sendId]){ //找到了
                resultIndex = index;
            }
        }
        if (resultIndex != -1 ){
            LLRedEnvelopParam *params = self.array[resultIndex];
            [self.array removeObjectAtIndex:resultIndex];
            return params;
        }
        return nil;
    }
}
//控制设置开关
- (void) handleRedSwitch{
    self.isAutoRed = !self.isAutoRed;
}
@end

重签名装到非越狱手机上

抢红包的代码我们写好了,下面就是考虑把动态库注入到微信项目,重签名实现微信多开,安装到非越狱手机上了。

具体步骤我在iOS逆向第四篇(dylib动态库注入和重签名打包)文章中详细介绍了,不会的童鞋可以移步到那篇文章。

Github链接

我把源码传到了https://github.com/Lves/WXRedTweak上,欢迎去Star,会随着微信升级尽量做到同步更新...


更多iOS逆向和Swift开发相关文章,请关注我的微信公众账号:乐Coding

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

推荐阅读更多精彩内容