iOS逆向(三)-逆向的基本思路和cycript的使用演示

Cycript工具介绍

  • Cycript是一款脚本语言,可以看作是Objective-JavaScript,它可以帮助我们轻松测试和验证函数效果。
    • 在越狱手机中可以通过注入方式在第三方应用中运行
    • 也可以用静态库的方式把cycript集成到自己的应用中(MonkeyDev,可以给非越狱iOS第三方App写插件,但是权限受沙盒限制)
  • 在越狱手机中安装Cycript
    • 方式一:在Cydia上搜索Cycript进行安装
    • 方式二:使用 APT 0.6 Transitional包管理工具,SSH登录iPhone设备,输入安装Cycript命令:$apt-get install cycript
  • Cycript使用(注入到第三方进程空间)
    • 注入Cycript模块到第三方进程
/** 确认进程名或者PID */
iPhone6Test0:~ root# ps -e | grep WeChat
654 ??         0:06.94    /var/containers/Bundle/Application/D28A1C43-2F50-435D-AD0E-DDB14992D63B/WeChat.app/WeChat
1527 ttys001    0:00.01 grep WeChat

/** 打开方式 1*/
cycript -p WeChat
/** 打开方式2  勾住进程id */
cycript -p 654

/** 退出cycript */
Control + D
  • Cycript实战演练
    对微信app界面进行修改 输入代码后回车 即可注入
/** 显示通知个数 */
[[UIApplication sharedApplication] setApplicationIconBadgeNumber:100] 
/** 隐藏状态栏 */
 [[UIApplication sharedApplication] setStatusBarHidden:YES]

对手机界面进行修改

查看SpringBoard 进行信息
$ ps -e | grep SpringBoard
  298 ??         1:54.86 /System/Library/CoreServices/SpringBoard.app/SpringBoard
 1601 ttys001    0:00.01 grep SpringBoard
勾住SpringBoard
iPhone6Test0:~ root# cycript -p SpringBoard

/** 屏幕闪紫色光 */
[[SBScreenFlash mainScreenFlasher] flashColor:[UIColor magentaColor] withCompletion:nil] 

iOS应用(Store App)沙盒目录

  • Application Bundle包含应用可执行文件和资源文件
如何获取iOS上微信程序的Bundle路径 :$ps -e | grep appname
如上面的微信,前提是你需要先下载app解压获取app包名
iPhone6Test0:~ root# ps -e | grep WeChat
654 ??         0:06.94    /var/containers/Bundle/Application/D28A1C43-2F50-435D-AD0E-DDB14992D63B/WeChat.app/WeChat
1527 ttys001    0:00.01 grep WeChat
  • Application Data 包含App运行生产的数据和配置信息等
如何获取iOS上微信程序的Data路径,同样可以通过cycript工具
iPhone6Test0:~ root# cycript -p WeChat
cy# directory = NSHomeDirectory()
@"/var/mobile/Containers/Data/Application/E9232D81-80E3-4684-BB0E-FC3643703947"

查看Data目录结构

iPhone6Test0:~ root# cd /var/mobile/Containers/Data/Application/E9232D81-80E3-4684-BB0E-FC3643703947
iPhone6Test0:/var/mobile/Containers/Data/Application/E9232D81-80E3-4684-BB0E-FC3643703947 root# ls
Documents  Library  StoreKit  tmp

==:)Document 存放应用运行时生成的并且需要保存的数据。注:iTunes或iCloud同步设备时会备份该目录

==:)Library/Caches 存放应用运行时生成的并且需要保存的数据。iTunes或iCloud不同步。

==:)Library/Preferences 存放偏好设置。iOS的偏好设置(settings)应用也会在该目录查找应用的设置信息。NSUserDefaults保存在该目录下。iTunes或iCloud同步设备时备份该目录。

==:)tmp 存放应用运行时所需的临时数据。当某个应用没运行时,iOS系统可能会清除该目录下的文件。但不可依赖这种自动清除机制,应该及时手动清除。

逆向的基本思路

  • 正向工程(Forward Engineering)
    抽象的逻辑设计 ==》具体的物理实现
    设计概念和算法 ==》编写源代码 ==》编译成二进制机器码
    将想法和设计理念变成具体实现的过程

  • 逆向工程(Reverse Engineering)
    具体的物理实现 ==》抽象的逻辑设计
    反编译机器码 ==》汇编代码(类似的高级语言代码)==》理解其算法和设计概念
    从二进制码中提取设计概念和算法

  • 程序的编译和反编译
    高级语言(C/C++/OC/Java/Python/C#)==》中间语言(如:汇编等)==》目标代码(exe/lib/dll/sys/dylib等二进制文件)
    高级语言 ===》(编译链接)===》机器码
    高级语言 《===( 反汇编/反编译)《===机器码

  • 逆向的思路

    • 逆向必须是有目的的、有针对性的(明确你要做的事情)
    • 先熟悉你要逆向的目标程序,从正向的思路去猜测他的可能的实现方法(使用的框架、调用的系统API等)
    • 定位关键代码
      • 通过监控UI事件的响应定位关键代码
      • 通过监控底层API的调用定位关键代码(如网络访问接口、文件读写接口等)
      • 通过观察数据的变化来定位关键代码和地址

逆向是一个试错的过程,需要不停的猜测、查找和进行验证,既考验耐心也考验动手能力

你可能感兴趣的:(iOS逆向(三)-逆向的基本思路和cycript的使用演示)