天天看點

iOS逆向工程之Cycript

1.連接配接裝置

打開一個終端,輸入指令:

iproxy 2222 22      

重新打開一個新的終端,輸入指令:

ssh -p 2222 [email protected]      

這時候會提示輸入密碼:預設密碼為“alpine”。這樣就可以連接配接到裝置了。

也可直接通過如下指令連接配接到裝置:

ssh [email protected] -p 22      

如果後面沒有"-p 22",有可能會報錯:

iOS逆向工程之Cycript

這個時候,使用如下指令修改"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;
}      

無善無惡心之體,

有善有惡意之動,

知善知惡是良知,

為善去惡是格物。