【Frida】【Android】04

2024-06-04 6953阅读

🛫 系列文章导航

  • 【Frida】【Android】01_手把手教你环境搭建 https://blog.csdn.net/kinghzking/article/details/136986950
  • 【Frida】【Android】02_JAVA层HOOK https://blog.csdn.net/kinghzking/article/details/137008446
  • 【Frida】【Android】03_RPC https://blog.csdn.net/kinghzking/article/details/137050967
  • 【Frida】【Android】04_Objection安装和使用 https://blog.csdn.net/kinghzking/article/details/137071768
  • 【Frida】【Android】05_Objection实战 https://blog.csdn.net/kinghzking/article/details/137071826

    ▒ 目录 ▒

      • 🛫 系列文章导航
      • 🛫 导读
        • 需求
        • 开发环境
        • 1️⃣ Objection介绍
        • 2️⃣ 安装
          • 环境要求
          • 安装
          • 报错
          • 3️⃣ 使用
            • objection --help
            • 进入REPL界面
            • help命令
            • exit命令
            • frida命令
            • ui命令
            • intent命令
            • 内存漫游相关命令:hooking list / search
            • Hook命令:class_method
            • Hook命令:class
            • jobs命令
            • 主动调用命令:heap
            • memory命令
            • root命令
            • 关闭 ssl 效验命令
            • 🛬 文章小结
            • 📖 参考资料

              🛫 导读

              需求

              开发环境

              版本号描述
              文章日期2024-03-27
              操作系统Win11 - 22H222621.2715
              node -vv20.10.0
              npm -v10.2.3
              夜神模拟器7.0.5.8
              Android9
              python3.9.9
              frida16.2.1
              frida-tools12.3.0
              objection1.11.0

              1️⃣ Objection介绍

              Objection介绍如果说在Frida提供的各种API基础之上可以实现无数的具体功能,那么Objection就可以认为是一个将各种常用功能整合进工具中供我们直接在命令行中使用的利器,Objection甚至可以不写一行代码就能进行App的逆向分析。功能列表如下:

              • 支持 iOS 和 Android。
              • 检查容器文件系统并与之交互。
              • 绕过 SSL 固定。
              • 转储钥匙扣。
              • 执行与内存相关的任务,例如转储和修补。
              • 浏览和操作堆上的对象。
              • ……

                据官方Wiki所描述的,Objection主要有三大组成部分。

                • 第一部分是指Objection重打包的相关组件。Objection可以将Frida运行时所需要的frida-gadget.so重打包进App中,从而完成Frida的无root调试。

                • 第二部分是指Objection本身。Objection是一个Python的pypi包,可以和包含frida-gadget.so这个so文件的App进行交互,运行Frida的Hook脚本,并分析Hook的结果。

                • 第三部分是指Objection从TypeScript项目编译而成的一个agent.js文件。该文件在App运行过程中插了Frida运行库,使得Objection支持的所有功能成为可能。

                  2️⃣ 安装

                  环境要求

                  • Python的版本大于3.4。
                  • Python包管理软件pip的版本大于9.0。
                    • 使用pip --version查看版本
                    • 使用pip install pip --upgrade升级pip
                    • (可选的)virtualenv,版本大于15。

                      安装

                      使用pip命令安装Objection。官网的建议是直接执行以下命令:pip3 install -U objection。

                      objection最新的release版本是1.11.0,已经2021年4月的版本了。不过依然兼容最新的frida,使用该版本可以使用最新的frida。

                      报错

                      您可能面临的最常见错误可能如下所示,这意味着您正在尝试使用 Python 2 而不是 Python 3 进行安装。请安装 Python 3.4以上版本解决该问题。

                      Collecting objection
                        Could not find a version that satisfies the requirement objection (from versions: )
                      No matching distribution found for objection
                      

                      3️⃣ 使用

                      objection --help

                      我们先看下objection的帮助界面:

                      【Frida】【Android】04 第1张

                      从图可知:

                      • Objection默认通过USB连接设备,这里不必和Frida的命令行一样通过-U参数指定USB模式连接
                      • 通过-g参数指定注入的进程,
                      • 通过explore命令进入REPL模式(交互模式)。在进入REPL模式后便可以使用Objection进行Hook的常用命令。
                      • 通过-N参数来指定网络中的设备并通过-h参数和-p参数来指定对应设备的IP和端口以进行连接,从而完成对网络设备的注入与Hook。
                      • 通过patchapk命令将frida-gadget.so打包进App。

                        进入REPL界面

                        根据上面的说明,我们以Android系统的基本应用“设置”为例来介绍Objection的REPL模式常用命令。

                        • 首先,我们启动夜神模拟器,并运行相应版本的frida-server。
                        • 然后,我们通过frida-ps -Uai找到“设置”应用的App及其包名,具体操作如下:

                          【Frida】【Android】04 第2张

                        • 最后,在找到设置的包名com.android.settings后,通过objection注入“设置”应用,注入成功后便进入了Objection的REPL界面,具体操作命令以及结果如下:

                          objection -g com.android.settings explore

                          【Frida】【Android】04 第3张

                          help命令

                          不知道当前命令的效果是什么时,在当前命令前加help(比如help env)再回车之后就会出现当前命令的解释信息:

                          【Frida】【Android】04 第4张

                          exit命令

                          退出objection

                          【Frida】【Android】04 第5张

                          frida命令

                          查看Frida相关信息。

                          【Frida】【Android】04 第6张

                          小编的环境中,一开始执行的时候,报了下面的错误:

                          【Frida】【Android】04 第7张

                          找到该文件,将这行注释了就可以了:

                          【Frida】【Android】04 第8张

                          ui命令

                          //截图
                          android ui screenshot [image.png]
                          //设置FLAG_SECURE权限
                          android ui FLAG_SECURE false
                          

                          intent命令

                          # 强制启动activity
                          android intent launch_activity com.example.androiddemo.Activity.FridaActivity1
                          # 强制启动service
                          android intent launch_service
                          

                          内存漫游相关命令:hooking list / search

                          Objection可以快速便捷地打印出内存中的各种类的相关信息,这对App快速定位有着无可比拟的优势,下面介绍几个常用命令。

                          • 列出内存中的所有类

                            android hooking list classes

                            【Frida】【Android】04 第9张

                            • 在内存中所有已加载的类中搜索包含特定关键词的类

                              android hooking search classes

                              【Frida】【Android】04 第10张

                              • 从内存中搜索所有包含关键词key的方法。

                                android hooking search methods

                                从上文中可以发现,内存中已加载的类高达上万个。它们的方法是类的个数的数倍,整个过程会相当耗时。

                                【Frida】【Android】04 第11张

                                • 类方法

                                  搜索到我们感兴趣的类后,可以使用以下命令查看关心的类的所有方法

                                  android hooking list class_methods

                                  【Frida】【Android】04 第12张

                                  • 列出进程所有的四大组件列表

                                    android hooking list activities

                                    android hooking list services

                                    android hooking list receivers

                                    android hooking list providers(命令有问题,待解决)

                                    【Frida】【Android】04 第13张

                                    Hook命令:class_method

                                    命令格式:android hooking watch class_method

                                    这里选择Java中File类的构造函数进行Hook,结果如下:

                                    android hooking watch class_method java.io.File.$init --dump-args --dump-backtrace --dump-return

                                    【Frida】【Android】04 第14张

                                    在上述命令中,我们加上了–dump-args、–dump-backtrace、–dump-return三个参数,分别用于打印函数的参数、调用栈以及返回值。

                                    这三个参数对逆向分析的帮助是非常大的:

                                    • 有些函数的明文和密文非常有可能放在参数和返回值中。
                                    • 打印调用栈可以让分析者快速进行调用链的溯源。

                                      另外需要注意的是:

                                      • 此时虽然只确定了Hook构造函数,但是默认会Hook对应方法的所有重载。
                                      • 在输出的最后一行显示Registering job 605559,这表示这个Hook被作为一个“作业”添加到Objection的作业系统中了,此时运行job list命令可以查看到这个“作业”的相关信息,如下图所示。可以发现这里的JobID对应的是605559,同时Hooks对应的6正是Hook的函数的数量。

                                        【Frida】【Android】04 第15张

                                        当我们在“设置”应用中的任意位置进行点击时,会触发File的构造函数,将打印出堆栈、参数、返回值信息。

                                        【Frida】【Android】04 第16张

                                        Hook命令:class

                                        命令语法:android hooking watch class

                                        示例:android hooking watch class java.io.File

                                        【Frida】【Android】04 第17张

                                        jobs命令

                                        作业系统很好用,用于查看和管理当前所执行Hook的任务,建议一定要掌握,可以同时运行多项Hook作业。

                                        • 像上面一样的hook命令,就可以增加job

                                        • jobs kill

                                        • 查看

                                          job list

                                          【Frida】【Android】04 第18张

                                          主动调用命令:heap

                                          关于主动调用,可以参考《【Frida】【Android】02_JAVA层HOOK https://blog.csdn.net/kinghzking/article/details/137008446》,在objection中,对应的是android heap相关命令

                                          • 查找实例

                                            语法:android heap search instances

                                            示例:android heap search instances java.io.File

                                            【Frida】【Android】04 第19张

                                            如图,可以搜索到很多File的实例,并且打印出对应的Hashcode和toString()的结果。其中Hashcode作为Java对象的唯一标识,可以用于实例方法的调用。

                                            • 调用实例方法(无参数)

                                              语法: android heap execute

                                              示例:android heap execute -54300376 getPath

                                              下面演示一下执行File的getPath方法:

                                              【Frida】【Android】04 第20张

                                              • 调用实例方法(带参数)

                                                语法: android heap evaluate

                                                示例:android heap evaluate -54300376

                                                执行上面的示例后,objection将进入一个迷你编辑器环境后,输入想要执行的脚本内容,确认编辑完成,然后按Esc键退出编辑器,最后按回车键,即会开始执行这行脚本并输出结果。

                                                这里的脚本内容和在编辑器中直接编写的脚本内容是一样的(使用File类的canWrite()函数和setWritable()函数进行测试)

                                                【Frida】【Android】04 第21张

                                                执行结果如下图所示:

                                                【Frida】【Android】04 第22张

                                                memory命令

                                                # 查看内存中加载的库
                                                memory list modules
                                                # 查看库的导出函数
                                                memory list exports libssl.so
                                                # 将结果保存到json文件中
                                                memory list exports libart.so --json /root/libart.json
                                                # 搜索内存
                                                memory search --string --offsets-only
                                                # 修改内存内容
                                                memory write "" "" (--string)
                                                # dump所有内存
                                                memory dump all 
                                                # dump指定内存
                                                memory dump from_base   
                                                

                                                root命令

                                                # 尝试关闭app的root检测
                                                android root disable
                                                # 尝试模拟root环境
                                                android root simulate
                                                

                                                关闭 ssl 效验命令

                                                android sslpinning disable
                                                

                                                🛬 文章小结

                                                • objectin的命令是区分大小写的。
                                                • 内存漫游相关命令,通过各种操作,让app加载更多的类,可以漫游出更多的内容!!!

                                                  📖 参考资料

                                                  • objection官网: https://github.com/sensepost/objection
                                                  • 《安卓Frida逆向与抓包实战》
                                                  • 【Frida】 00_简单介绍和使用 https://blog.csdn.net/kinghzking/article/details/123225580
                                                  • 本节源码地址 https://gitcode.com/android8/AndroidFridaBeginnersBook

                                                    ps: 文章中内容仅用于技术交流,请勿用于违规违法行为。


    免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

    目录[+]