Cycript的一些基础使用

Cycript的一些使用方法

前言:最近在搞逆向的一些东西,不免会用到这些,将遇到的坑以及思路整理一下,好让别人不再掉到坑里去.开始!

首先,要使用Cycript你必须有一台越狱手机,这是必要条件,且能连接SSH

关于怎么连接SSH可以看我上一篇文章:SSH连接越狱iPhone(WIFI和USB)

第一步:安装Cycript

  • 打开Cydia搜索Cycript进行安装


第二步:SSH连接手机

为了演示一下cy的一些用法,又不至于东西太多,我随手写了几行代码做个Demo来测试
如图


就一个label+一个按钮,按钮点击了会改变label的字
上代码

- (void)viewDidLoad {
    [super viewDidLoad];
    
    self.titleLB = [UILabel new];
    self.titleLB.text = @"我是标题";
    self.titleLB.frame = CGRectMake(100, 200, 200, 40);
    [self.view addSubview:self.titleLB];
    
    
    self.selBtn = [UIButton buttonWithType:UIButtonTypeCustom];
    [self.selBtn setTitle:@"按钮" forState:UIControlStateNormal];
    self.selBtn.backgroundColor = [UIColor redColor];
    self.selBtn.frame = CGRectMake(100, 350, 40, 40);
    [self.view addSubview:self.selBtn];
    
    [self.selBtn addTarget:self action:@selector(btnClick) forControlEvents:UIControlEventTouchUpInside];
}


- (void)btnClick {
    self.titleLB.text = @"我点了按钮";
}

第三步:开始使用Cycript

  • 首先使用
ps ax或者ps -e

来查看当前手机进程(注意要把我们需要改的软件打开)


不难看出,红框中就是我写的测试Demo,因为我工程名就是testCycript
然后记住左边的数字,也就是进程的PID,我这里是28743,然后输入

cycript -p 28743


当出现

cy#

的时候,就代表已经hook住我们的程序了,可以开始下一步了

一些示例

1、

UIApp.keyWindow.recursiveDescription().toString()

获取视图结构图(这里的UIApp相当于[UIApplication sharedApplication])


可以很清晰的看到,当前Window上只有2个控件,UILabel和UIButton,后面还有它们的frame以及其它属性

2、

 #0x157d1e200

获取对象,当使用了这个命令后,我们就拿到了地址所对应的对象,可以查看其相应的属性,我这里是拿的Label的地址


接下来我们来改动这个Label的text,如图

手机上的label已经改变了

大家应该就懂了,改其它的也是一样了,例如改按钮背景色、透明度等

懂OC语法的应该都知道怎么用了.
这里也可以使用

var p = new Instance(0x157d1e200)

然后用p.alpha = 0.5;这样来修改属性

3、根据类来获取所有方法

function printMethods(className, isa) { 
    var count = new new Type("I");
    var classObj = (isa != undefined) ? objc_getClass(className)->isa :     
    objc_getClass(className); 
    var methods = class_copyMethodList(classObj, count); 
    var methodsArray = [];
    for(var i = 0; i < *count; i++) { 
        var method = methods[i]; 
        methodsArray.push({selector:method_getName(method),     
        implementation:method_getImplementation(method)});
    }
        free(methods); 
        return methodsArray;
}


可以这样一行一行的输入

也可以这样直接复制进去,使用方法如图下半部分

4、获取当前控制器

function currentVC() {
    var app = [UIApplication sharedApplication]  
    var keyWindow = app.keyWindow  
    var rootController = keyWindow.rootViewController  
    var visibleController = rootController.visibleViewController  
    if (!visibleController){
       return rootController
    }
    return visibleController.childViewControllers[0]
}

5、获取按钮的点击方法


这里第一步把按钮的地址传过去生成对象(也可以直接用地址,我这是为了方便)
然后获取按钮的Target,一般来说就是所在控制器,毕竟我们写代码的时候一般都是用的self
然后获取Events,将Target的地址和Events一起传入,最终获得btn的点击方法(可以看我上方代码,方法名就是btnClick)

6、修改按钮的点击方法

vi.constructor.prototype.btnClick = function() {}


然后我点击按钮就已经没反应了

7、退出Crcyipt

?exit

还有很多命令因为没怎么用到,就暂时不说了,大家可以去官网

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容