cycript使用的方式以及hook函数的过程

Cycript 有两种使用方式

1:动态使用在越狱机器上,可以对越狱机器的所有应用使用Cycript

2:xcode使用lib文件 可以在非越狱机器上使用 但仅仅限于构建自己的应用 只能在自己的应用里使用Cycript

下面来分别介绍这两种方式的使用过程

一:Cycript的安装

网上关于Cycript的安装都是使用sftp将下载的包文件推入越狱设备,但是Cycript官网给出的却是


显然Cycript.ios和Cycript.osx是在非越狱手机上使用并为xcode提供framework的,但第二种根本没有可以推入的deb包。

原来在这个网址里http://www.cycript.org/debs/

将最新的包下载到桌面


注意:使用stfp将包推送到越狱手机之前 一定要早终端上先cd进包的文件夹

sftp root@192.168.202.232

输入密码

sftp -> put cycript.deb

sftp -> put libffi_1-3.0.10-5_iphoneos-arm.deb

接下来退出stfp进入ssh root@192.168.202.232

首先要 dpkg -i libffi_1-3.0.10-5_iphoneos-arm.deb 不然cycript.deb包无法安装成功 cycript.deb是依赖libffi_1-3.0.10-5_iphoneos-arm.deb的

然后 dpkg -i cycript.deb

安装成功 运行cycript将会显示cy# 如下图所示


ssh远程登录的时候可能会出现这个问题

问题原因在于 ssh密码变更,电脑上rsa的钥匙串密码未改变

解决办法:

清除旧的公钥信息

ssh-keygen -R 192.168.0.100

在安装的过程中出现了这个问题 尚未解决

dyld: lazy symbol binding failed: Symbol not found: ___clear_cache

Referenced from: /usr/lib/libsubstrate.dylib

Expected in: /usr/lib/libgcc_s.1.dylib

有可能会出现这种bug

dyld: Library not loaded: /usr/lib/libapr-1.0.dylib

Referenced from: /usr/bin/cycript

Reason: no suitable image found.  Did find:

/usr/lib/libapr-1.0.dylib: no matching architecture in universal wrapper

/usr/lib/libapr-1.0.dylib: no matching architecture in universal wrapper

Trace/BPT trap: 5

然而通过这种方式安装不得不说实在是太傻X了

完全可以在cydia里搜索cycript进行安装,这种安装完全没有任何bug 不像之前 可能会出现各种问题

cycript也是一种源啊···

二:用越狱的方式使用cycript

现在来简单挂钩一下自己写的demo

运行前 如图



Last login: Fri Jul 22 17:42:36 on ttys000

dandeMacintosh:~ danchen$ sshroot@192.168.202.122//登录越狱机器

root@192.168.202.122's password:  //输入ssh密码

dande-iPhone:~ root# ps aux | grep test1 //获取test1的进程

root      3070   0.0  0.0   536256    444 s000  R+    5:50PM   0:00.01 grep test1 //系统根进程

mobile    3055   0.0  2.4   577264  25220   ??  SXs   5:45PM   0:00.55 /var/mobile/Containers/Bundle/Application/04882BBD-4E14-41CA-B0BE-E22B18AB8EF3/test1.app/test1   //test1的进程

dande-iPhone:~ root# cycript -p 3055  //cycript挂住该进程

cy#varapp=[UIApplication sharedApplication] //获取app的当前实例

#""

cy#varwindow=app.keyWindow  //获取当前实例的运行窗口

#"; layer = >"

cy#varrootController=window.rootViewController //获取运行窗口的根视图控制器

#""

cy# rootController.view.backgroundColor=[UIColor yellowColor] //将根视图下的view的背景色变为黄色

#"UIDeviceRGBColorSpace 1 1 0 1"

cy#


改变结果如图


下面进行函数的hook

依着上文 拿到viewController的句柄或者成为指针

配置打印viewController里面所有函数的函数


得到结果


发现了目标函数buttonClick。但是此时不知道如何获得这个函数的调用 网上以及官网里的isa调用messages方法在ios8.3里似乎不行

打印viewController里的所有属性


就没有发现所谓的message。

官网上给出的实现hook的案例是


这种方法在ios8.3上实现不了 IOS8.3的文件结构中没有messages这一项。

比如这个 是应该将ViewController里的validateLogin函数替换成function()这个函数

不过hook的方法肯定能找到。

但是似乎没有什么hook的必要性 原因在于

cycript是一种运行时工具,即是说如果要想hook一个目标函数,首先就需要得到它的句柄(又可以称为指针),然而拿到它的句柄的前提,是需要从根句柄,即是app的keyWindow出发一层层的解析遍历

然而这个app的分析就类似树的结构

从UIApp --> keyWindow  --->rootViewController

这样一层层的遍历分析下去 才能找出这个目标函数 然而每一层的遍历其实是很不容易的 原因在于

a:IOS本身的导航栏,TabController,pushViewController,scrollView等等其实是非常复杂的结构,不同的组合会应变出不同的结构 这个因app的种类繁杂而变得不同 依靠自动化去分析本身就是一件非常困难的事情,而每一种原生插件都有可能是我们需要分析的对象,每一种原生插件的

API以及结构已经足够复杂···

比如本例仅仅是只有一个页面,一个button,实现的组织结构为


诸如QQ这样的组织结构,一屏幕都放不下。

原本分析APP的逻辑本不是HOOK的主要工作,但是使用这样方式来做的话,非要层层分析到不可。这种分析的过程本身就带了OC以及IOS开发中很多知识,比如TabController控制着几个tab,UINavigationController被谁控制,同时又控制着谁,某个viewController是该UINavigationController的第几层,scrollView有几个子页面,滑动的时候有可能会触发一些操作,TableViewCell上的重用机制导致随着屏幕的滑动,cell句柄的改变等等...正是这种过程使得通过分析UI来层层获得对应的句柄困难重重···

b:很多非IOS原生的组织系统,比如第三方自己写的结构,如果app加入了这个,因为我们并不了解这种第三方结构,使得自动化分析几乎成为不可能的事情

c:这只是hook一些IOS app的API。假设我们要hook的是私有API,那么即是将树的某一步递归分得更加细致,拿到私有API的指针,进行HOOK。这样更加增加了自动化的难度。

d:即使经过层层努力,定位到了目标函数,然而仍然需要将目标函数的内容提取出来,才能实现监控,不然就改变了样本原有的操作。而通过这种方式获取目标函数的内容仍然是一大难点。

e:运行时hook 其实是运用的OC语言Method Swizzling的原理。这里我盗个图来解释一下这种原理。

原本的方法实现selector的名字和实现方式是存在着这样的一种一一映射


我们可以利用 method_exchangeImplementations 来交换2个方法中的IMP,

我们可以利用 class_replaceMethod 来修改类,

归根结底,都是偷换了selector的IMP,如下图所示:


cycript运用的就是这种机制。然而这并没什么用,仅仅是在运行时进行实时更改,一旦kill掉进程,重新来启动一遍的话,如果不再次实时hook,其实它是改变不了app的任何内容的,也无法进行监测。

这里可以将cycript和theos做一个比较

theos是在外部注入dylib去hook指定的类里的函数的,theos不需要进行动态运行时的分析,因为它不需要拿到任何运行时的指针,在外部进行hook修改。外部的插件总是存在的,不管app是否安装,是否启动,是否在后台活动。但theos不是太容易区分是哪个进程进行的操作,这个想必在tweak中的加入判断条件也不是难事。

cycript是在内部去hook的,它没有加入任何的dylib。进程一旦结束,则cycript内部所做的任何修改监测都将不复存在。但cycript却是对app进程唯一进行评判分析的。

简单点总结:cycript来实现自动化定位hook几乎是一件不太可能的事情,因为即便就是人为使用cycript去hook一个指定函数的话,都不是件太容易的事情。

而且使用cycript来进行扩展的话 基本是一件没必要也太可能实现我们目标的事情。

就实现的难度而言 theos容易扩展,较为方便的实现我们监控的需求。而cycript则实现的难度很大,而且实现的方式也不够满足我们的需求。

参考资料:http://www.mobile-open.com/2015/52491          htmlhttp://blog.csdn.net/fg313071405/article/details/38496305http://blog.csdn.net/sakulafly/article/details/29633627

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,265评论 6 490
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,078评论 2 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 156,852评论 0 347
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,408评论 1 283
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,445评论 5 384
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,772评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,921评论 3 406
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,688评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,130评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,467评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,617评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,276评论 4 329
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,882评论 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,740评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,967评论 1 265
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,315评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,486评论 2 348

推荐阅读更多精彩内容