内容简介:之前文章已经对LLDB进行了介绍和使用。LLDB在我们调试应用的时候确实很爽,但他每次都要断住程序,这在分析并且修改APP的时候确实是一个优势,但是在面对一个比较大型的项目,我们需要整体分析的时候,这样调试就显得有些力不从心了。而Cycript就可以弥补上这个需求。Cycript是由Cydia创始人Saurik推出的一款脚本语言,Cycript混合了OC、JavaScript语法的解释器,这意味着我们能够在一个命令中使用Oc或者JavaScript,甚至两者并用。它能够挂钩正在运行的进程,能够在运行时修改很
之前文章已经对LLDB进行了介绍和使用。LLDB在我们调试应用的时候确实很爽,但他每次都要断住程序,这在分析并且修改APP的时候确实是一个优势,但是在面对一个比较大型的项目,我们需要整体分析的时候,这样调试就显得有些力不从心了。而Cycript就可以弥补上这个需求。
Cycript是由Cydia创始人Saurik推出的一款脚本语言,Cycript混合了OC、JavaScript语法的解释器,这意味着我们能够在一个命令中使用Oc或者JavaScript,甚至两者并用。它能够挂钩正在运行的进程,能够在运行时修改很多东西。
一、语言分类
-
编译型语言(OC) 需要将源码经过编译器编译,生成对应架构的可执行文件(二进制)
-
解释型语言(Python) 源码不需要编译器提前编译,而是在运行的时候,经过一套对应的解释器,临时将源码翻译成二进制让CPU识别。
编译型语言就相当于一个英语娴熟的人看一本英文书籍,不需要借助别的 工具 了。代价就是学英语这个过程很慢(编译时间长)。 解释型语言就相当于一个不会英语的人看一本英文书籍,这时候就需要借助工具(字典)才能正常阅读。好处的就是没有学习(编译)这么个耗时的过程。
理论上解释型语言在运行效率上会比解释型语言慢很多,但实际上现在有很多牛逼的解释器,在执行特定的代码的时候效率也非常快。原理就是在执行的的时候会将之前解释过的代码缓存起来,之后就不需要重复解释了。如:pypy3
这片文章的主角Cycript就是解释型语言!
二、安装
1、下载安装
Cycript的安装极其简单,在这里下载SDK,下载下来的就是一个可执行文件。文件不大,只有2.9M。
打开终端,CD进入Cycript目录直接运行Cycript
./cycript 复制代码
不出意外这个时候会有如下报错:
这是因为本地 Ruby 版本和Cycript要求的版本不一样导致(其实代码都一样,只是版本号换了就不认识了,真蠢)。
2、解决Ruby
Step 1 查看本地Ruby版本:
cd /System/Library/Frameworks/Ruby.framework/Versions/ ls 复制代码
本地显示版本号为:2.3,而Cycript要求的版本号2.0。
解决方案:
复制一本Ruby源码,将其版本号(文件夹名称)改为2.0
Step 2 关闭系统的SIP
在 OS X El Capitan 中有一个跟安全相关的模式叫 SIP(System Integrity Protection ),它禁止让软件以 root 身份来在 Mac 上运行,在升级到 OS X 10.11 中或许你就会看到部分应用程序被禁用了,这些或许是你通过终端或者第三方软件源安装。对于大多数用户来说,这种安全设置很方便,但是也有些开发者或者高级 Mac 用户不需要这样的设置。
csrutil disable csrutil enable
Step 3 直接把2.3的复制一份,改为2.0即可
重启电脑后,运行如下命令:
sudo mkdir -p /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ 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 复制代码
注:根据每个人ruby版本不同,将上面第二条命令的/System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/lib/libruby.2.3.0.dylib中的2.3改成本机的ruby版本。 这里不是降级ruby,只是复制一份2.0的ruby的dylib,让cycript运行起来。
再次运行
./cycript 复制代码
如果出现 cy#
即代表进入Cycript环境了。
3、配置环境变量
Step 1 移动Cycript
/opt
目录是专门放置一些额外功能包的目录,所以我们将Cycript也放在该目录下。
Step 2 环境变量
进入用户的根目录,里面有个文件 .bash_profile
,用文本编辑器打开。
如果你们有这个文件,就用vim新建一个吧。注意一定要用vim新建哦! 输入如下命令:
export CY=/opt/cycript_0.9.594/ export PATH = $CY:$PATH 复制代码
Save保存。之后就可以在任意目录下使用Cycript了。
三、简单使用
1、基本的语法
2、基本调试
在上篇文章中已经介绍了Monkey,并且可以看出它已经帮我们集成了Cycript的动态库。所以一下就配合着Monkey来进行调试。
马不停蹄,新建一个Monkey工程,将已经砸壳成功的优酷ipa包放入对应的Target目录下。详情参考:
由于Monkey默认开放了一个端口号6666,如图:
所以我们就使用Cycript连接端口号6666,找到手机连接的Wifi的IP地址:
我这的是:192.168.32.113
所里在终端输入指令:
cycript -r 192.168.32.113:6666 复制代码
如果你那一直停在这一步,没有进入Cycript环境
那么有三种可能
- 手机和电脑必须处于同一个wifi
- wifi有问题,换一个wifi试试,或者直接使用手机开个热点,电脑连上你的热点
- 端口号被占用,需要换一个端口(先换Monkey开放的端口,再换指令连接的端口)
一切正常后就可以开始调试了,见如下图:
// 查看当前的KeyWindow UIWindow.keyWindow() // 自定义变量 var keyWindow = UIWindow.keyWindow() keyWindow // 隐藏状态栏 [UIApp setStatusBarHidden:YES]; // 使用地址查看 #0x108e3cd80 // 查看一个对象下的所有变量 *#0x108e3cd80 // 查看一个对象下成员变量的名字 [i for(i in *keyWindow)] // 格式化输出当前View的层级关系 keyWindow.recursiveDescription().toString() // 显示当前View下的所有的Button choose(UIButton) 复制代码
3、高级用法
在之前的文章 LLDB,自制LLDB脚本,窜改微信红包金额 中介绍了LLDB可以自己定义脚本以方便自己使用,同样Cycript也是可以做到自定义API。
1、新建cy文件
新建一个cy文件,取名FYTest.cy
2、定义变量和函数
在FYTest.cy中定义变量和函数
// 获取AppID FYAPPID = NSBundle.mainBundle.bundleIdentifier; // 获取沙盒目录 FYAPPPATH = NSBundle.mainBundle.bundlePath; FYRootVC = function(){ return UIApp.keyWindow.rootViewController; }; FYGetCurrentVCFromRootVC = function(rootVC){ var currentVC; if([rootVC presentedViewController]){ rootVC = [rootVC presentedViewController]; } if([rootVC isKindOfClass:[UITabBarController class]]){ currentVC = FYGetCurrentVCFromRootVC(rootVC.selectedViewController); }else if([rootVC isKindOfClass:[UINavigationController class]]){ currentVC = FYGetCurrentVCFromRootVC(rootVC.visibleViewController); }else{ currentVC = rootVC; } return currentVC; }; // 获取当前VC FYCurrentVC = function(){ return FYGetCurrentVCFromRootVC(FYRootVC()); }; 复制代码
3、导入Cy文件
4、使用Cy文件
FYTest.cy文件虽然已经在我们的APP里面了,但是我们每次使用的时候还是需要导入一次。
@import FYTest 复制代码
5、大神们封装好的cy
Monkey默认帮我们预装好了几个cy文件,分别在一下两张图的位置:
-
MachO中的cy
-
通过网络加载的cy
具体有哪些变量可以用,哪些函数可以用都可以在这找到哦:ms, md
以上所述就是小编给大家介绍的《iOS逆向(9)-Cycript,动态分析APP利器》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- 数据分析利器之 Pandas
- 性能分析利器总结二《Arthas》
- AS3.0 Profiler 性能分析利器
- Kubernetes 日志分析利器:Elassandra 部署使用指南
- 网络分析利器wireshark命令版:tshark简介(1)
- iOS开发中的AOP利器 - Aspects 源码分析(二)
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
精通JavaScript+jQuery
曾顺 编著 / 人民邮电出版社 / 2008-9 / 59.00元
随着Ajax技术的不断风靡,其核心技术JavaScript越来越受到人们的关注,各种JavaScript的框架层出不穷。jQuery作为JavaScript框架的优秀代表,为广大开发者提供了诸多便利。 本书从介绍JavaScript的基础知识开始,围绕标准Web的各项技术予以展开,通过大量实例对JavaScript、CSS、DOM、Ajax等 Web关键技术进行深入浅出的分析,主要内容包括J......一起来看看 《精通JavaScript+jQuery》 这本书的介绍吧!