cycript是大神saurik开发的一个非常强大的工具,可以让开发者在命令行下和应用交互,在运行时查看和修改应用。它确实可以帮助你破解一些应用,但我觉得这个工具主要还是用来学习其他应用的设计(主要是UI的设计及实现)。

这个工具使用了Objective-C和Javascript的混合模式,可以实时的和应用交互甚至修改应用。它的网址请猛戳这里。在官网上可以下载到完整的软件包。使用的方式有两种,一种是在越狱的设备上通过MobileSubstrate加装,这样可以在所有的应用里使用;另一种是通过静态库的方式把cycript集成到自己的应用,这样做不要求越狱,当然也只能在自己的应用内使用了。

在越狱模式下cycript的安装:

1. 在cydia下安装openSSH,这样可以确保能用SSH登录到iOS设备上,如果你已经安装过了,可以不用继续安装了

2. 用sftp上传下载的cycript_0.9.501_iphoneos-arm.deb和libffi_1-3.0.10-5_iphoneos-arm.deb安装包到iOS设备上

3. 用dpkg -i来安装deb包

4. 运行cycript,如果出现cy#的符号,那么就是安装完成了

安装之后自然是使用,这个使用方法网上讲得比较详细了,很多拿的还是支付宝的例子,所以在这里顺便提醒一下小伙伴们,现在设备集成了越来越多的应用,重要性和不可替代性都是越来越高,所以设备最好还是不要越狱,安全第一嘛。

cycript的用法上主要是注入你关注的那个应用的线程,然后就可以获得app,获得window,慢慢去获得viewController,逐步逐步拨开UI的面纱,这个在学习经典应用的UI时真的是无上的利器!

下图是我在跟踪微信的UI时的样子,大致上方向就是这样逐步深入。

上面的例子是在越狱的机器上安装cycript,然后可以在任意的应用中使用。

还有一种用法是在开发过程中,把cycript的framework集成在应用中,这样可以用于实时调整UI的参数,而且不要求机器越狱。下面给出一个最最简单的例子:

1. 从官网下载cycript的包,是一个压缩文件,里面包括三个cycript.framework,cycript.lib和cycript

2. xcode里面新建一个target,仅仅用最简单的singleViewApplication创建一个空白的应用,这时界面应该是一片纯洁

3.
添加cycript框架以及依赖,添加cycript.framework框架是应有之义,但这个框架还需要依赖库的支持,包括
JavaScriptCore和libstdc++;这里需要注意的是libstdc++是有版本要求的,必须是
libstdc++.6.0.9.dylib,如下图所示

4. 设置编译选项

为了解决libstdc++的兼容问题,还需要在BuildSetting页设置"Other Linker
Flags",添加-lstdc++;另外还有“C++ Standard Library”,确保选择了“Compiler
Default”。如果没有选择特定的libstdc++版本并且正确配置编译器选项的花,在iOS7下链接会失败的,这一点请务必注意。

5. 修改代码,打开cycript监听端口

这个最好用一个宏来包一下,比如用:CYCRIPT_ENABLE

  1. #ifdef CYCRIPT_ENABLE
  2. CYListenServer(8888);
  3. #endif

这里的8888就是cycript的监听端口,为了让这句代码起作用,请把CYCRIPT_ENABLE在加入到预设宏里面。

6. 运行模拟器,这里还有一个要说明,目前只支持64bit的,不能使用32bit的模拟器,这个也需要配置一下,然后选择正确的模拟器运行,应用就可以跑起来了,仍然是一片纯洁的UI

7. 进入cmd界面,切换路径到cycript包的解压目录下,运行./cycript -r 127.0.0.1:8888

其中,127.0.0.1是你的模拟器或者设备地址,8888就是你代码里面配置的监听接口,如果正常,会进入cycript的REPL,这时就可以现场修改一些UI了,比如把白色背景改成红色:

此时的UI应该就变成了红色背景。

cycript的使用基本方法就是这样了,剩下的就是如何使用的问题了,这个一方面需要对iOS的框架有足够的了解,另一方面也需要积累经验。

iOS运行时工具-cycript的更多相关文章

  1. iOS执行时工具-cycript

    cycript是大神saurik开发的一个很强大的工具,能够让开发人员在命令行下和应用交互,在执行时查看和改动应用.它确实能够帮助你破解一些应用,但我认为这个工具主要还是用来学习其它应用的设计(主要是 ...

  2. iOS运行时编程(Runtime Programming)和Java的反射机制对比

    运行时进行编程,类似Java的反射.运行时编程和Java反射的对比如下:   1.相同点   都可以实现的功能:获取类信息.属性设置获取.类的动态加载(NSClassFromString(@“clas ...

  3. iOS运行时 -- Runtime(摘抄自网络)

    运行时(iOS) 一.什么是运行时(Runtime)? 运行时是苹果提供的纯C语言的开发库(运行时是一种非常牛逼.开发中经常用到的底层技术) 二.运行时的作用? 能获得某个类的所有成员变量 能获得某个 ...

  4. 趣谈iOS运行时的方法调用原理

    一个成熟的计算机语言必然有丰富的体系,复杂的容错机制,处理逻辑以及判断逻辑.但这些复杂的逻辑都是围绕一个主线丰富和展开的,所以在学习计算机语言的时候,先掌握核心,然后了解其原理,明白程序语言设计的实质 ...

  5. iOS运行时使用(动态添加方法)

    1 举例  我们实现一个Person类 然后Person 其实是没得对象方法eat:的 下面调用person的eat方法 程序是会奔溃的 那么需要借助运行时动态的添加方法 Person *p = [[ ...

  6. iOS 运行时使用(交换两个方法)

    举例 在创建了如下代码 NSString *str=nil; NSURL *url =[NSURL URLWithString:str]; NSLog(@"%@",url); 但是 ...

  7. iOS 运行时详解

    注:本篇文章转自:http://www.jianshu.com/p/adf0d566c887 一.运行时简介 Objective-C语言是一门动态语言,它将很多静态语言在编译和链接时期做的事放到了运行 ...

  8. 第2月第6天 iOS 运行时添加属性和方法

    http://blog.csdn.net/meegomeego/article/details/18356169 第一种:runtime.h里的方法 BOOL class_addProperty(Cl ...

  9. ios 运行时特征,动态改变控件字体大小

    需求:ex: 在不同尺寸的iPhone上面显示的字体大小不一样 https://github.com/rentzsch/jrswizzle #import <UIKit/UIKit.h> ...

随机推荐

  1. CSS3的chapter2

    CSS的选择符有很多,大致分为八种: 通配选择符 元素选择符 群组选择符 关系选择符 id及class类选择符 伪类选择符 属性选择符 伪对象选择符 1.通配选择符: 可以使用模糊指定的方式来对对象进 ...

  2. 发布网站详细步骤(.Net)

    (i)打开需要发布的网站 右键需要发布的项目 点击下拉框新建配置文件,输入配置文件名称,点击确定,下一步 发布方法选文件系统,目标位置:项目的根目录 配置选Release 点击发布 (ii) 打开ii ...

  3. 推荐10个bootstrap及其他框架的后台管理模板

    相对于网站前台炫目多彩的设计,网址后台的设计模板貌似有点少,在这里推荐10个可以免费下载的~ 1.自适应超酷整站 win8风格的Bootstrap响应式网站后台管理模板-Apricot 2.boots ...

  4. 自定义弹出框基于zepto 记得引入zepto

    html <!DOCTYPE html> <html> <meta charset="utf-8"> <title></tit ...

  5. Scrum Meeting 6-20151208

    任务安排 姓名 今日任务 明日任务 困难 董元财 修复app特定情况下崩溃 服务器购买记录接口 无 胡亚坤 聊天界面优化 发布记录和购买记录 无 刘猛 请假(生病了) 完成Scrum Meeting ...

  6. [css3]CSS3选择器:nth-child和:nth-of-type之间的差异

    by zhangxinxu from http://www.zhangxinxu.com本文地址:http://www.zhangxinxu.com/wordpress/?p=1709 一.深呼吸,直 ...

  7. Android 之计算控件颜色透明度

    Android 之计算控件颜色透明度 1.UI会给一个数值,例如:#EFE000,透明度30% 2.用255乘以30%等于76.5,然后四舍五入等于77 3.用计算器将十进制的77转成十六进制的数据为 ...

  8. python——挖装饰器祖坟事件

    装饰器是什么呢? 我们先来打一个比方,我写了一个python的插件,提供给用户使用,但是在使用的过程中我添加了一些功能,可是又不希望用户改变调用的方式,那么该怎么办呢? 这个时候就用到了装饰器.装饰器 ...

  9. 两种PHP生成二维码的方法

    PHP生成二维码,个人认为最常用的有两种,1.使用google的api生成,2.使用PHP QR Code生成,两种方法生成的二维码都是很清淅的,效果不错.下面来分别说明这两种方法如何实现. 一.PH ...

  10. 转-浅谈HTTP中Get与Post的区别

    Http定义了与服务器交互的不同方法,最基本的方法有4种,分别是GET,POST,PUT,DELETE.URL全称是资源描述符,我们可以这样认为:一个URL地址,它用于描述一个网络上的资源,而HTTP ...