iOS逆向工程之Cycript

时间:2023-03-08 19:09:00

1.连接设备

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

iproxy  

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

ssh -p  root@127.0.0.1

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

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

ssh root@10.1.200.152 -p 

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

iOS逆向工程之Cycript

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

sudo vi /etc/services 

2.获取设备进程信息

输入指令:

ps ax

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

ps ax | grep SpringBoard

3.勾住某个进程

输入指令:

//1236为进程ID
cycript -p

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[]
} //获取当前控制器方法调用
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 = ; 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 = ; i < *count; i++) {
var ivar = ivars[i];
ivarsArray(ivar_getName(ivar));
}
free(ivars);
return ivarsArray;
}