变量和使用自创成员变量的代替方法"/>
ios逆向tweak中使用MSHookIvar获取原有成员变量和使用自创成员变量的代替方法
文章目录
- 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_vtestV = [[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
@endstatic UIView *v1;//自定义一个文件内的全局变量,可以在不同函数中传递和保存数据
%hook ViewController- (void)viewDidAppear:(BOOL)animated{%orig;v1 = [[UIView alloc]initWithFrame:CGRectMake(20, 100, 200 , 200)];testV.backgroundColor = [UIColor redColor];}
}
%end
更多推荐
ios逆向tweak中使用MSHookIvar获取原有成员变量和使用自创成员变量的代替方法
发布评论