ios逆向tweak中使用MSHookIvar获取原有成员变量和使用自创成员变量的代替方法

ios逆向tweak中使用MSHookIvar获取原有成员变量和使用自创成员变量的代替方法,第1张

文章目录 MSHookIvar的作用获取类中原有的成员变量,不可以获取自己创建的成员变量格式如下注意:不可以获取到自己在tweak里创建的成员变量 代替方法在hook中使用自创的成员变量
本文是我研究了2天最后曲线救国,用文件内的全局变量代替hook代码中自创的成员变量的方法.MSHookIvar只能获取app包中原来就有的成员变量,不能获取自创的成员变量

MSHookIvar的作用 获取类中原有的成员变量,不可以获取自己创建的成员变量格式如下
MSHookIvar<类型>(self,"_成员变量名")

下面的原来的类中有成员变量label1

@property (weak, nonatomic) IBOutlet UILabel *label1;

在获取label1的时候要加上下滑线,因为oc文件编译的时候转换成c++文件,会把成员变量前面添加下滑线_
所以获取的时候要加上下滑线

UILabel *label1 = MSHookIvar<UILabel*>(self,"_label1");//
label1.text = @"hook成了123";
注意:不可以获取到自己在tweak里创建的成员变量

下面代码编译通过,但是运行会闪退
因为MSHookIvar不能获取自己新建的成员变量,只能获取到之前app包里面已经写好的成员变量

#import <UIKit/UIKit.h>
@interface  ViewController:UIViewController //为了使用self
@property (nonatomic)__strong UIView *_m_v;
@end
%hook ViewController
- (void)viewDidAppear:(BOOL)animated{
    %orig;
    UILabel *label1 = MSHookIvar<UILabel*>(self,"_label1");//MSHookIvar<类型>(self,"_成员变量名"),可以获取原来程序里的成员变量,但是不可以获取到自己在tweak里创建的成员变量
    label1.text = @"hook成了123";
    UIView * testV = MSHookIvar<UIView*>(self,"_m_v");//这行testV没有被赋值,因为没获取到_m_v
    testV = [[UIView alloc]initWithFrame:CGRectMake(20, 100, 200 , 200)];//运行到这行闪退,因为testV没有获取
    testV.backgroundColor = [UIColor redColor];//这行不能删掉,否则编译报错testV没有被使用
    }
}
%end
代替方法在hook中使用自创的成员变量

目前还不能使用自创的成员变量,但是可以用下面方法代替
static是文件内全局变量
例如:

#import <UIKit/UIKit.h>
@interface  ViewController:UIViewController //为了使用self
@end

static UIView *v1;//自定义一个文件内的全局变量,可以在不同函数中传递和保存数据
%hook ViewController

- (void)viewDidAppear:(BOOL)animated{
    %orig;

    v1 = [[UIView alloc]initWithFrame:CGRectMake(20, 100, 200 , 200)];
    testV.backgroundColor = [UIColor redColor];
    }
}
%end

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/994147.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-21
下一篇 2022-05-21

发表评论

登录后才能评论

评论列表(0条)

保存