iOS逆向之问题交流

2020-01-14  本文已影响0人  木子心语

1.如果遇到bool类型的方法,我们如何调试.

我依然用源项目代码做实验.

ViewController

#import "ViewController.h"

@interface ViewController ()

@property (nonatomic,strong)UIButton *revealBtn;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    
    [self.view addSubview:self.revealBtn];
    
    [self booljudge];
}

-(BOOL)booljudge{
    
    NSLog(@"hello bool judge");
    
    int i = 100;
    
    if (i > 0) {
        
        NSLog(@"i > 0 ture");
        
        return true;
    }else{
        
        NSLog(@"i < 0 false");
        
        return false;
    }
    
}

-(UIButton*)revealBtn{
    if (!_revealBtn) {
        _revealBtn = [UIButton buttonWithType:UIButtonTypeCustom];
        _revealBtn.frame = CGRectMake(100,100, 100,40);
        _revealBtn.backgroundColor = [UIColor redColor];
        [_revealBtn setTitle:@"测试" forState:UIControlStateNormal];
        [_revealBtn setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
        [_revealBtn addTarget:self action:@selector(revealClick) forControlEvents:UIControlEventTouchUpInside];
    }
    return _revealBtn;
}

-(void)revealClick{
    
    NSLog(@"hello");
}

@end

我在代码中加入了 -(BOOL)booljudge的方法

#import "UIViewController.h"

@class UIButton;

@interface ViewController : UIViewController
{
    UIButton *_revealBtn;
}

- (void).cxx_destruct;
- (_Bool)booljudge;
@property(retain, nonatomic) UIButton *revealBtn; // @synthesize revealBtn=_revealBtn;
- (void)revealClick;
- (void)viewDidLoad;

@end
-(id)booljudge{

   NSLog(@"this a bool function");

   return %orig;
}

我会返回的类型改成id,这样只需要return %orig 进行返回即可.

保证源码正常执行.

如果修改了return ture 或者 return false ,只会执行一种逻辑.

-(BOOL)booljudge{
    
    NSLog(@"hello bool judge");
    
    int i = 100;
    
    if (i > 0) {
        
        NSLog(@"i > 0 ture");
        
        return true;
    }else{
        
        NSLog(@"i < 0 false");
        
        return false;
    }
    
}
-(id)booljudge{

   NSLog(@"this a bool function");

   return %orig;
}

如果需要分析代码中的源码逻辑,需要大家亲自动手试试.

2. 有位小伙伴的cycript -p 命令执行不成功

我的手机系统是iOS12.3

cycript -p 应用名/进程名 出错了

我们该如何处理呢?

1
wget http://apt.saurik.com/debs/cycript_0.9.594_iphoneos-arm.deb

2
wget http://www.tateu.net/repo/files/net.tateu.cycriptlistenertweak_1.0.0_iphoneos-arm.deb

3
wget http://www.tateu.net/repo/files/net.tateu.cyrun_1.0.5_iphoneos-arm.deb
4
pkg -i cycript_0.9.594_iphoneos-arm.deb

5
dpkg -i net.tateu.cycriptlistenertweak_1.0.0_iphoneos-arm.deb net.tateu.cyrun_1.0.5_iphoneos-arm.deb

cyrun -n SpringBoard -e

Cycript加载到SpringBoard中。SpringBoard将终止并自动重启

cyrun -n SpringBoard -d

SpringBoard卸载Cycript。SpringBoard将终止并自动重启

我们已经注入TEST项目

UIApp.keyWindow.recursiveDescription().toString()

3.在点击事件中加入其他控件

这里更简单了,我曾经写的hookdemo里,咱们加过alertView

%new
-(void)newMethod{
    NSLog(@"first new mehtod");
    
    UIAlertView *alertView = [[UIAlertView alloc]initWithTitle:@"温馨提示" message:@"我的第一个tweak工程创建成功了" delegate:self cancelButtonTitle:@"确定" otherButtonTitles:@"取消",nil];
    [alertView show];
}

其他控件也可以同样的添加.

4. 总结

如果大家尝试后,不适合自己的方案可以找一下原因.由于很多因素存在,比如系统原因.

如果你出现了同样的问题,或者其他问题可以反馈到群里.

我会以文章的形式,把解决方案分享到iOS逆向文章.

感谢您的阅读,感谢您的关注.

上一篇 下一篇

猜你喜欢

热点阅读