逆向-Logos&Cycript的使用&修改界面

1,218 阅读2分钟

Cycript

CYcript必须是连接的砸过壳的应用没砸壳的不能连接

Cycript连接成功 截屏2021-06-04 上午10.07.14.png

创建cy文件

截屏2021-06-04 上午10.44.34.png 截屏2021-06-04 上午10.53.19.png

通过Cycript可以不用卡断进程就能修改内存中的数据等 截屏2021-05-26 下午2.27.37.png 截屏2021-05-26 下午2.31.12.png 也可以通过Xcode的Viewdebug来先找到1.00在哪个控件上

截屏2021-05-26 下午2.33.28.png

截屏2021-05-26 下午2.34.36.png再通过像Cycript那样修改内存中数据的方式来修改

Logos

可以将MonkeyDev与Logos语法相结合来进行Hook

首先新建一个项目弄一个简单的页面 截屏2021-05-26 下午2.42.01.png 编译一下导出.app文件再把生成的头文件导出来 截屏2021-05-26 上午9.26.13.png 通过MonkeyDev新建一个工程,把导出.app文件拷贝进这个Monkey工程中进行重签名,在手机中安装

这是导出后的头文件的内容截屏2021-05-26 上午9.27.19.png 如果要编写Logos语言需要提前把Dylib.xm文件的读取方式修改下 截屏2021-05-26 下午2.50.10.png 截屏2021-05-26 下午2.59.30.pnghook成功之后点击button出现hook,Logos支持多种语言格式 截屏2021-05-26 下午3.23.23.png 截屏2021-05-26 下午3.24.08.png 截屏2021-05-26 下午3.24.59.png 截屏2021-05-26 下午3.25.39.png 截屏2021-05-26 下午3.29.51.png

修改设置界面

界面分析

codeble2.jpg

具体代码如下

#import <UIKit/UIKit.h>
#define PHDefaults [NSUserDefaults standardUserDefaults]
#define PHSWITCHKEY @"PHSWITCHKEY"
#define PHTIMEKEY @"PHTIMEKEY"


@interface WCTableViewManager : NSObject
@property(retain, nonatomic) NSMutableArray *sections;
- (long long)numberOfSectionsInTableView:(UITableView *)tableView;
@end

@interface NewSettingViewController:UIViewController
@end

%hook WCTableViewManager

- (void)scrollViewWillBeginDragging:(id)arg1{
    %orig;
    //判断在设置页面     判断页面开始滑动回收键盘
    if([MSHookIvar <UITableView *>(self,"_tableView").nextResponder.nextResponder isKindOfClass:%c(NewSettingViewController)]) {
        //回收键盘
        [MSHookIvar <UITableView *>(self,"_tableView")endEditing:YES];
    }
}

//添加两个新方法用来记录每隔多长时间抢和开关状态
%new
- (void)textFieldDidChangeValue:(NSNotification *)notification {
    UITextField *sender = (UITextField *)[notification object];
    [PHDefaults setValue:sender.text forKey:PHTIMEKEY];
    [PHDefaults synchronize];
}


%new
- (void)switchChang:(UISwitch *)switchView {
    [PHDefaults setBool:switchView.isOn forKey:PHSWITCHKEY];
    [PHDefaults synchronize];
    [MSHookIvar <UITableView *>(self,"_tableView") reloadData];
}

- (id)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    if ([tableView.nextResponder.nextResponder isKindOfClass:%c(NewSettingViewController)] && indexPath.section == [self numberOfSectionsInTableView:tableView] - 1) {
        UITableViewCell *cell = nil;
        if (indexPath.row == 0) {
            static NSString *swCell = @"SWCELL";
            cell = [tableView dequeueReusableCellWithIdentifier:swCell];
            if (!cell) {
                cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:nil];
            }
            cell.textLabel.text = @"自动抢红包";
            UISwitch *switchView = [[UISwitch alloc]init];
            switchView.on = [PHDefaults boolForKey:PHSWITCHKEY];
            [switchView addTarget:self action:@selector(switchChang:) forControlEvents:UIControlEventValueChanged];
            cell.accessoryView = switchView;
            cell.imageView.image = [UIImage imageNamed:([PHDefaults boolForKey:PHSWITCHKEY] == 1) ? @"unlocked" : @"locked"];
        }else if (indexPath.row == 1) {
            static NSString * waitCell = @"waitCell";
            cell = [tableView dequeueReusableCellWithIdentifier:waitCell];
            if(!cell){
                cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:nil];
            }
            cell.textLabel.text = @"等待时间(秒)";
            UITextField *textField = [[UITextField alloc]initWithFrame:CGRectMake(0, 0, 150, 40)];
            //监听键盘输入
            [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textFieldDidChangeValue:) name:UITextFieldTextDidChangeNotification object:textField];
            textField.text = [PHDefaults valueForKey:PHTIMEKEY];
            textField.borderStyle = UITextBorderStyleRoundedRect;
            cell.accessoryView = textField;
            cell.imageView.image = [UIImage imageNamed:@"clock"];
        }
        cell.backgroundColor = [UIColor whiteColor];
        return cell;
    }else {
        return %orig;
    }
}

- (long long)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    //如果是NewSettingViewController并且是最后一个section返回2否则还返回原来的数量
    if ([tableView.nextResponder.nextResponder isKindOfClass:%c(NewSettingViewController)] && (section == [self numberOfSectionsInTableView:tableView] - 1)) {
        return 2;
    }else {
        return %orig;
    }
}

- (long long)numberOfSectionsInTableView:(UITableView *)tableView {
    if([tableView.nextResponder.nextResponder isKindOfClass:%c(NewSettingViewController)]) {//定位设置页面
        //在原来的基础上多加一组
        return %orig + 1;
    }else {
        return %orig;
    }
}

//设置高度
- (double)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
    //如果是NewSettingViewController并且是最后一个section返44否则还返回原来的值
    if([tableView.nextResponder.nextResponder isKindOfClass:%c(NewSettingViewController)] && indexPath.section == [self numberOfSectionsInTableView:tableView] - 1) {//定位设置页面
        return 44;
    }else {
        return %orig;
    }
}

%end

//因为要给VC添加监听键盘的事件so也要hookNewSettingViewController
%hook NewSettingViewController
%new
- (void)keyboardWillShow:(NSNotification *)note {
    UIView *view = self.view;
    CGRect keyBoardRect=[note.userInfo[UIKeyboardFrameEndUserInfoKey]CGRectValue];
    view.frame = CGRectMake(0, -keyBoardRect.size.height, [UIScreen mainScreen].bounds.size.width, [UIScreen mainScreen].bounds.size.height);
}

%new
- (void)keyboardWillHide:(NSNotification*)note {
    UIView * view = self.view;
    view.frame = CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, [UIScreen mainScreen].bounds.size.height);
}

- (void)viewDidLoad {
    %orig;
    //监听键盘的弹出和消失
    [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil];
    [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(keyboardWillHide:) name:UIKeyboardWillHideNotification object:nil];
}

%end

效果图 截屏2021-05-28 上午9.52.38.png