安装Cycript
在Cydia中,搜索并安装该插件,这个很简单,就不贴流程了
调试App
$cycript -p 可执行文件的名字/进程ID
示例
首先通过ps -A
查看进程列表
接着,可以通过两种方式附加到WeChat上
附加上后,你就可以各种玩耍了
基础的语法和其他使用,可以查阅官方文档
编写自定义.cy文件
我们除了使用常用的一些命令之外,我们编写自定义函数来实现我们的特殊功能,可以提高我们逆向调试的效率
第一步:编写一个简单.cy文件
大部分功能我都是从网上copy下来的,只有最后一个是自己动手写的,嘿嘿
相信大家大部分都能看得懂,这里的语法有点怪怪的,js+oc,我也是模仿着写的
(function(exports) {
APPID = [NSBundle mainBundle].bundleIdentifier,
APPPATH = [NSBundle mainBundle].bundlePath,
APPHOME = NSHomeDirectory(),
APPDOC = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0],
APPLIBRARY = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES)[0],
APPCACHE = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)[0]
RootVC = function(){
return UIApp.keyWindow.rootViewController;
};
KeyWindow = function(){
return UIApp.keyWindow;
};
GetCurrentVCFromRootVc = function(rootVC){
var currentVC;
if ([rootVC presentedViewController]) {
// 视图是被presented出来的
rootVC = [rootVC presentedViewController];
}
if ([rootVC isKindOfClass:[UITabBarController class]]) {
// 根视图为UITabBarController
currentVC = GetCurrentVCFromRootVc(rootVC.selectedViewController);
} else if ([rootVC isKindOfClass:[UINavigationController class]]){
// 根视图为UINavigationController
currentVC = GetCurrentVCFromRootVc(rootVC.visibleViewController);
} else {
// 根视图为非导航类
currentVC = rootVC;
}
return currentVC;
};
// 获取当前的界面的控制器
CurrentVC = function(){
return GetCurrentVCFromRootVc(RootVC());
}
// 传入控件,能获取到他事件函数【例如能获取点击事件绑定的事哪个方法】
ActionName = function(control){
var ret = [control actionsForTarget:[[control allTargets] allObjects][0] forControlEvent:[control allControlEvents]];
return ret;
}
})(exports);
第二步:导入该文件
- 首先把我们编写好的文件拷贝到手机的usr/lib/cycript0.9目录下
有两种办法,一种直接通过工具iFunBox,直接拖。第二种输入指令
scp -P 6699 utils.cy root@localhost:/usr/lib/cycript0.9
,把写好的cy文件拷贝进去
成功导入咯~~~
- 接着在Cycript下可以直接引用,如果提示{}就代表成功,然后就可以调用各种函数和变量了
小小展示一下我写的方法【ActionName】有何作用
现在我要找上面这个登录按钮是哪一个点击事件
- 首先我们通过
$UIApp.keyWindow.recursiveDescription().toString()
找到登录按钮的内存地址
- 接着
$ActionName(#按钮的内存地址)
就可以找到这个按钮的点击事件了,记得在内存地址前面加一个#号
现在你已经知道哪个控制器,哪个函数,想hook不就是分分钟的事吗?
拓展
非越狱环境下,同样也能使用我们的cy文件,由于MonkeyDev内置了Cycript
在这里把我们的cy文件放到copy Files中
导入和使用的方式和上面说的方式是一样的~