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

47 篇文章 4 订阅
8 篇文章 2 订阅


本文是我研究了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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值