美文网首页
iOS逆向(三)-逆向的基本思路和cycript的使用演示

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

作者: Yochi | 来源:发表于2017-08-18 16:11 被阅读677次

    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的使用演示

          本文链接:https://www.haomeiwen.com/subject/qlhnlxtx.html