iOS逆向工程之Cycript

1.连接设备

打开一个终端,输入指令:

iproxy 2222 22

重新打开一个新的终端,输入指令:

ssh -p 2222 root@127.0.0.1

这时候会提示输入密码:默认密码为“alpine”。这样就可以连接到设备了。

也可直接通过如下指令连接到设备:

ssh root@10.1.200.152 -p 22

如果后面没有"-p 22",有可能会报错:

这个时候,使用如下指令修改"services"文件,把5860修改为22即可:

sudo vi /etc/services 

2.获取设备进程信息

输入指令:

ps ax

也可以查看具体某个进程的PID:

ps ax | grep SpringBoard

3.勾住某个进程

输入指令:

//1236为进程ID
cycript -p 1236

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]
}

//获取当前控制器方法调用
var vc = currentVC()

//获取控制器所有方法
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;
}

//调用获取所有方法
printMethods(CYTabBarController, objc_getClass(CYTabBarController))

//打印成员变量
function printIvars(className, isa) { 
    var count = new new Type("I");
    var classObj = (isa != undefined) ? objc_getClass(className)->isa :     
    objc_getClass(className); 
    var ivars = class_copyIvarList(classObj, count); 
    var ivarsArray = [];
    for(var i = 0; i < *count; i++) { 
        var ivar = ivars[i]; 
        ivarsArray(ivar_getName(ivar));
    }
        free(ivars); 
        return ivarsArray;
}

 

 

posted @ 2017-06-09 22:07  LeeGof  阅读(609)  评论(0编辑  收藏  举报