IOS逆向学习-Cycipt

1. Cycript

1.1 Cycript简介和安装

  • Cycript是Objective-C++、ES6(JavaScript)、Java等语法的混合物
  • 可以用来探索、修改、调试正在运行的Mac、IOS App
  • 官网:http://www.cycript.org/
  • 文档:http://www.cycript.org/manual/
  • 通过Cydia安装Cycript,即可在iPhone上调试运行中的APP
  • Cycript支持的语言:在这里插入图片描述
  • Cydia中安装Cycript(如果发现失败,报错:can’t find a source to download version… 请刷新下全部的源,在安装):在这里插入图片描述

1.2 Cycript的开启和关闭

  • 如何获取手机app的进程id和进程名称

    • 需要在手机上安装adv-cmds,在安装Cycript的时候就已经安装了adv-cmds
    • ps命令是process status的缩写,使用ps命令可以列出系统当前的进程
    • ps -A: 列出所有的进程
    • ps -A | grep 关键词:所有关键词相关的进程
    • 查询手机上当前所有进程、根据关键字搜索进程,以网易云音乐为例:在这里插入图片描述
  • cycript: 进入cycript语言编程环境

    • cycript -p 进程ID或则cycript -p 进程名称都进入某个app的调试状态
    • ctrl + D: 退出调试环境
    • 注意:建议使用进程的名称,因为进程名称只要app装在手机上,可执行文件就是不变的,所以名称不会变,而进程的id可能时刻都在变化
    • 进入某个app的调试环境(以网易云音乐为示例):在这里插入图片描述
    • ctrl + C: 取消输入

1.3 Cycript的常用语法

  • UIApp :[UIApplication shareApplication]

  • 定义变量: var 变量名 = 变量值

  • 用内存地址获取对象:#内存地址

  • ObjectiveC.classes:已加载的所有OC类

  • 查看对象的所有成员变量:*对象

  • 递归打印view的所有子控件(跟LLDB一样的函数):view.recursiveDescription().toString()
    在这里插入图片描述

  • 刷选出某种类型的对象:choose(UIViewController)choose(UITableViewCell)

  • 常用语法示例:

    • #对象地址: 获取当前对象
      在这里插入图片描述

    • 获取类的所有成员变量(*UIApp):在这里插入图片描述

    • 递归打印所有子控件(UIApp.keyWindow.recursiveDescription().toString()):在这里插入图片描述

    • cycript自带函数:choose(xxxxx)筛选某种类型的对象:在这里插入图片描述

1.4 自己的Cycript-.cy文件

  • 首先我们可以下载一个超级编辑器sublimetext

  • 我们可以将常用的Cycript代码封装在一个.cy文件

    • 首先需要编写一个.cy文件
    • .cy文件拷贝到iPhone端的usr/lib/cycript0.9目录下
    • 终端进入调试环境,然后导入写好的.cy文件 然后使用
    • 导入方式如下图:在这里插入图片描述
  • exports参数名固定,用于向外部提供接口如果.cy文件内部的属性和方法没有用exports来修饰,那么在外部是无发访问的,在js中在函数中声明函数属于私有
    在这里插入图片描述

  • 外部调用方法是类型(文件名).函数名(变量名):在这里插入图片描述

*如果想实现全局函数,则不需要使用exports关键字来修饰,则可以直接调用
在这里插入图片描述
在这里插入图片描述

由上图可知,没有使用exports关键字修饰的方法和属性 都不属于test,所以我们导入test时候,发下里面只有使用exports关键字来修饰的方法和属性

  • 如果把封装的文件没有放入到cycript的根路径下,那么在导入你自己写的库时需要带上路径
    在这里插入图片描述

  • MJ封装Cycript库

1.5 Reveal

  • Reveal是一款调试IOS程序UI界面神器

  • 官网:Reveal官网下载,本人这里是在玩转苹果上下载一个Reveal24版本的

  • iPhone上安装Reveal Loader 工具,但是此版本很久了, 本人安装的是Reveal2Loader ,直接在Cydia中搜索即可:在这里插入图片描述

  • 调试配置环境

    • 在Mac和iPhone上安装软件之后,连接之后调试APP的时候可能会报错:The operation couldn’t be completed. The app is linked against an older version of the Reveal library. You may need to update the Reveal library in your app.
    • 网上很多的资料是说 把RevealServer文件拷贝到iPhone的/Library/RHRevealLoader/RevealServer文件, 如果路劲不存在的话就自己创建, 这里本人试过,但是没有用。正确操作如下
    • 首先找到Mac的Reveal中的RevealServer文件,覆盖iPhone的/Device/Library/Frameworks/RevealServer.framework中的ReverServer文件
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
  • 经过上述文件替换之后, 我们重启Mac上的Reveal,在打开手机上的app就可以正常调试界面了,如果你的手机和电脑连着同一个wifi,会出现wifi标志的选择, 插着USB线,会出现USB线调试的选择, 一般会选择USB的选项,速度比较快
    在这里插入图片描述

  • 重启SpringBoard或则重启手机,可以在iPhone上输入终端命令

    • 重启SpringBoard : killall SpringBoard
    • 重启手机: reboot

1.6 ipa安装过程

  • ipa的安装: Mach-o 文件(IOS中代码可执行文件的格式)
    在这里插入图片描述

1.7 逆向APP的思路

  • 界面分析:Cycript、Reveal
  • 代码分析:对Mach-O文件的静态分析
  • MachOView、class-dump、Hopper Dosassember、ida等软件
  • 动态调试:对运行中的APP进行代码调试;debugserverLLDB
  • 代码编写:注入代码到APP中,必要时还可能需要重新签名、打包ipa

1.8 class-dump

  • class-dump:顾明思议,它的作用就是吧Mach-O文件的class信息给dump出来(把类信息导出来),生成对应的.h文件,官网地址:http://stevenygard.com/projects/class-dump/

  • Mac上终端编译指令为什么输入就会找到,而有些是找不到, 那是因为你执行的命令,mac会去两个地方寻找(user/binuser/local/bin),
    在这里插入图片描述

  • 平时所有用到的指令都在这两个文件夹下,所以我们执行 cd等指令都可以直接执行,但是 在mac系统10.11 开始 usr/bin目录已经不能写数据了, 所以我们可以把class-dunmp执行文件放在local/bin目录下,这样你在执行class-dump指令时不会出现找不到该指令

  • 常用格式:class-dump -H Mach-O文件路径 -o 头文件存放目录

  • class-dumpMac-o文件的可执行头文件导出来,根据头文件我们可以分析app的一些类、函数。代码编译过程:
    在这里插入图片描述

  • class-dump是分析机器语言,然后导出一些头文件:
    在这里插入图片描述

1.9Hopper Disassmbler

  • Hopper Disassmbler能够将Mach-O文件的机器语言代码反编译成汇编代码、OC伪代码或则swift伪代码
  • 常用快捷键 : Shift + option + X()找出哪里引用了这个地方
  • 可以分析以下苹果框架的方法调用流程, 可以看一些伪代码 ,大概知道调用过程 还是比较实用的
  • 软件 百度搜索下载即可
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值