电脑一直跳出实时调试(实时调试)

实时调试(电脑一直跳出实时调试)

是由Cydia创始人Saurik推出的一款脚本语言,Cycript混合了OC、JavaScript语法的解释器,这意味着我们能够在一个命令中使用OC或者JavaScript,甚至两者并用。

它能够挂钩正在运行的进程,能够在运行时修改很多东西,关键,它还不会暂停我们的程序。

说白了,就是在运行时把程序弄得清清楚楚,然后好进行玩耍这个App。

iOS逆向|Cycript安装和使用,实时调试从未如此简单,逆向必备

Cycript 安装

官网:http://www.cycript.org/

  1. 下载SDK

  2. 在SDK中,你能找到一个可执行文件,没错,进去Terminal,执行命令 $./cycript 就ok了

iOS逆向|Cycript安装和使用,实时调试从未如此简单,逆向必备

安装中的出错

如果报了这个错误,很明显需要Ruby 2.0。

iOS逆向|Cycript安装和使用,实时调试从未如此简单,逆向必备

1、查看当前Ruby版本

$ cd /System/Library/Frameworks/Ruby.framework/Versions/
$ ls

2、创建一个符合目录的文件夹

$ sudo mkdir -p /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/

3、copy 一个Ruby 2.0 进去,当然其中的2.3为你自己 ls 出来的Ruby版本

sudo ln -s /System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/lib/libruby.2.3.0.dylib /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/libruby.2.0.0.dylib

成功的标志:

iOS逆向|Cycript安装和使用,实时调试从未如此简单,逆向必备

配置zsh

当然,为了使用方便,我们需要将 Cycript 配置到 bash 当中去,这样就不用每次都去找这个可执行文件了。

  1. 找到你的 cycript 执行文件目录

  2. 在 .zshrc 文件中,配置 PATH

  3. 这就完成了,然后打开我们的 iterm2 ,直接输入 $cycript

iOS逆向|Cycript安装和使用,实时调试从未如此简单,逆向必备

Cycript 使用

说完了安装,接下来才是我们的重头戏,那就是使用了。我们来看看这个被我吹嘘的这么牛逼的东西到底有多么变态的好用。

前面说到,Cycript 可以勾住正在执行的进程,这是什么意思?

一、连接

我们的手机打开一个App的时候,就是开启了一个进程。没错,当App开启过后,Cycript 链接上我们的手机,就可以勾着这个App了。

当然勾住进程还是需要条件的

  • 首先需要通过 ssh 连接手机

  • 然后将 Cycript 中的 Cycript.framework 注入App当中

这两件事情,自己去做比较麻烦,这里介绍一个工具——MonkeyDev。它的使用的安装非常简单,可以去 git 上查看
https://github.com/AloneMonkey/MonkeyDev。

二、通过 MonkeyDev 创建一个工程,这里举例微信

打开iterm2,连接手机,输入:$cycript -r 192.168.0.0:6666 (192.168.0.0为你手机WiFi的IP,可在设置中查看)

三、使用

因为 Cycript 兼容多种语法,所以OC也可以兼容,并且有tab可以提示。他的语法十分强大,这里举一些例子。

  • UIApp:打印出UIApplication对象

  • var keyWindow = UIWindow.keyWindow();:自定义变量,以后 keyWindow 就可以当做一个变量使用了

  • *#变量地址:打印出这个对象所有属性和相关信息

  • keyWindow.recursiveDescription().toString:查看层级关系,所有keyWindow上的层级就出来了,后面的toString()会格式化输出

  • choose(UIButton):打印所有UIButton类创建的对象

脚本登录

整个 Cycript 的使用连接都已经介绍完了。为了养成一个使用脚本的习惯,还有方便记忆和使用,我们最好把登录连接写到脚本当中去。

1、在home目录专门创建一个文件夹,用来放自定义的脚本

iOS逆向|Cycript安装和使用,实时调试从未如此简单,逆向必备

2、创建一个 cylogin.sh 文件,在文件中写入登录命令

iOS逆向|Cycript安装和使用,实时调试从未如此简单,逆向必备

3、在 .zshrc 中配置环境变量

iOS逆向|Cycript安装和使用,实时调试从未如此简单,逆向必备

4、直接打开iterm2,执行脚本,完成

iOS逆向|Cycript安装和使用,实时调试从未如此简单,逆向必备

Cycript 带你装个B

1、微信转个账0.01元

iOS逆向|Cycript安装和使用,实时调试从未如此简单,逆向必备

2、Cycript 找到这个控件

iOS逆向|Cycript安装和使用,实时调试从未如此简单,逆向必备

3、直接搜索 “0.01”,找到对象地址

iOS逆向|Cycript安装和使用,实时调试从未如此简单,逆向必备

4、拿到这个对象使用 #0x1264d5e0 ,修改text

iOS逆向|Cycript安装和使用,实时调试从未如此简单,逆向必备

iOS逆向|Cycript安装和使用,实时调试从未如此简单,逆向必备

Cycript 一些高级用法

一、演示

  • ObjectiveC.class:当前进程中所有的类

  • APPID:获取该应用的bundleID

  • pviews():当前所有的View

  • pvcs():当前所有的控制器,还有控制器的堆栈

  • pactions(#0x1382ffaa):对象的响应者,当然需要这个对象有响应者

  • rp(#0x1382ffaa):对象的响应者链条

有上面这些用法的原因是什么的,其实这些语法并不是 Cycript 提供的,只是 Monkey 帮我们进行的了封装。

iOS逆向|Cycript安装和使用,实时调试从未如此简单,逆向必备

可以看到我们刚才敲出来的语法,都是已经封装的命令。

iOS逆向|Cycript安装和使用,实时调试从未如此简单,逆向必备

二、自定义一个 .cy 文件封装

当然这些高级的语法,我们也是可以自定义的,自己做你想做的事儿。

1、Xcode中找到Empty,创建一个 .cy 文件,注意target

iOS逆向|Cycript安装和使用,实时调试从未如此简单,逆向必备

2、修改该文件的语法

iOS逆向|Cycript安装和使用,实时调试从未如此简单,逆向必备

3、copyfile中添加该文件,注意选中的target

iOS逆向|Cycript安装和使用,实时调试从未如此简单,逆向必备

4、书写你的自定义代码,这里是JavaScript

//IIFE 匿名函数自执行表达式
(function(exports) {
 
 JGAPPPATH = [NSBundle mainBundle].bundlePath;
 JGROOTVC = function() {
 return UIApp.keyWindow.rootViewController;
 }

 JGKEYWIND = function() {
 return UIApp.keyWindow;
 }
 
 JGGetCurrentVCFromRootVc = function(rootVC){
 var currentVC;
 if([rootVC presentedViewController]){
 //视图被persent出来的
 rootVC = [rootVC presentedViewController];
 }
 
 if([rootVC isKindOfClass:[UITabBarController class]]){
 // 根视图如果是UITabBarController
 currentVC = JGGetCurrentVCFromRootVc(rootVC.selectedViewController);
 }else if([rootVC isKindOfClass:[UINavigationController class]]){
 //根视图如果是UINavigationController
 currentVC = JGGetCurrentVCFromRootVc(rootVC.visibleViewController);
 }else{
 //视为当前控制器
 currentVC = rootVC;
 }
 
 return currentVC;
 };
 

 JGCurrentVC = function(){
 return JGGetCurrentVCFromRootVc(JGROOTVC());
 };
})(exports);

5、先@import,然后执行(直接执行会报错)

iOS逆向|Cycript安装和使用,实时调试从未如此简单,逆向必备

总结

Cycript 能在进程中调试程序,而且不需要暂停程序。

语法命令强大,基本集成了LLDB中的指令。

(0)
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请发送邮件至 ZLME@ZLME.COM 举报,一经查实,立刻删除。

相关推荐