当前位置: 首页 > news >正文

iOS逆向入门:使用theos注入第三方依赖库

背景

theos是一个跨平台的软件开发框架,常用于管理,开发和部署iOS项目,同时也是开发iOS越狱插件的主要工具。和MonkeyDev不同的是,它不依赖于xcode,可以在多个操作系统上运行。一个完整的iOS越狱开发流程包括:越狱设备,砸壳App,分析controller,编写注入程序,打包并注入dylib,重签名应用运行等步骤。本文只总结了在获得砸壳app后,使用theos注入自己编写的依赖库的步骤。

执行环境:

  • pc:Apple M1 Pro
  • os: Sonoma 14.5

相关工具

  • otool:查看目标文件信息的工具,
    用来发现应用中使用到了哪些系统库,调用了其中哪些方法,使用了库中哪些对象及属性比如查看iOS的Mach-O格式的二进制文件的信息。
  • zsign:程序重签名工具。
  • theos:是一个跨平台构建系统,可用于做ios越狱插件的开发
  • insert_dylib:将动态库注入到二进制文件中的工具。
  • install_name_tool:修改应用程序对动态库的依赖路径。

安装依赖环境

  • 安装dpkg和ldid(theos依赖这两个库)

    brew install dpkg ldid
    
  • 安装theos

    export THEOS=/opt/theos
    git clone https://github.com/theos/theos $THEOS
    export PATH=$PATH:$THEOS/bin
    update-theos
    
  • 安装insert_dylib

    export INSERTLIB = /opt/insert_dylib
    git clone https://github.com/Tyilo/insert_dylib $INSERTLIB
    cd /opt/insert_dylib
    xcodebuild
    export PATH=$PATH:$INSERTLIB/build/Release/
    
  • 安装zsign
    参考:https://github.com/zhlynn/zsign

创建iphone/tweak项目

  1. 创建iphone/tweak项目
  2. 文件目录介绍
  • Makefile:工程用到的文件,框架,库等信息。可以置顶SDK版本,处理器架构等。(在此文件中加上我们需要注入的framwork,同时需要将对应的framework源码移入theos的lib目录中才能编译)

  • wechatinject.plist:制定bundle为tweak的作用对象,可指定多个。

  • control:tweak所需的基本信息。

  • Tweak.x:重要文件,用来编写hook代码。(.x 文件支持Logos语法,.xm 文件支持Logos和C/C++语法)。logos语法请参考:https://theos.dev/docs/logos-syntax

  1. 编译
    make clean
    make
    
    编译成功后,动态库位于~/.theos/obj/debug目录
  2. 替换libsubstrate.dylib
    非越狱手机中没有CydiaSubstrate库,手动替换。
    install_name_tool -change /Library/Frameworks/CydiaSubstrate.framework/CydiaSubstrate @loader_path/libsubstrate.dylib .theos/obj/debug/wechatinject.dylib
    

注入依赖库

  1. 注入libsubstrate库,这个库在非越狱手机中没有,需要手动将这个库打进ipa包中。
    libsubstrate库能够在程序运行时加载我们注入的动态库。

    git clone https://github.com/TKkk-iOSer/TKTweakDemo.git
    cp others/libsubstrate.dylib ~/Downloads/Payload/WeChat.app/
    
  2. 将我们编译的dylib库移动到ipa包中。

    cp .theos/obj/debug/wechatinject.dylib ~/Downloads/Payload/WeChat.app/
    
  3. 在WeChat库中执行注入,会得到WeChat_patched文件

    cd ~/Downloads/Payload/WeChat.app/
    insert_dylib @executable_path/wechatinject.dylib ~/Downloads/Payload/WeChat.app/WeChat
    

    替换wechat文件

    rm WeChat
    mv WeChat_patched WeChat
    
  4. 重签名
    zsign -f -k ~/Downloads/cert.p12 -p xxxxxx -m xxxxx.mobileprovision -o ~/Downloads/wechat2.ipa ~/Downloads/Payload

  5. 安装验证。

参考

https://github.com/TKkk-iOSer/TKTweakDemo

http://www.lryc.cn/news/487335.html

相关文章:

  • JavaScript 原型
  • 力扣 LeetCode 20. 有效的括号(Day5:栈与队列)
  • git使用及上线流程(仅为我工作中常用)
  • React Native 全栈开发实战班 - 打包发布之热更新
  • 2024年11月16日 星期六 重新整理Go技术
  • 力扣第 55 题 跳跃游戏
  • Golang | Leetcode Golang题解之第564题寻找最近的回文数
  • Spring Boot汽车资讯:科技与速度的交响
  • 从 IDC 到云原生:稳定性提升 100%,成本下降 50%,热联集团的数字化转型与未来展望
  • 移动零
  • C#编写的日志记录组件 - 开源研究系列文章
  • 猎板PCB罗杰斯板材的应用案例
  • 使用esp32c3开发板通过wifi连网络web服务器
  • 供应链管理、一件代发系统功能及源码分享 PHP+Mysql
  • Windows docker下载minio出现“Using default tag: latestError response from daemon”
  • 工厂模式-简单工厂模式
  • 【linux】使用minicom调试串口
  • C# 异常处理、多个异常、自定义异常处理
  • 【从零开始的LeetCode-算法】3210. 找出加密后的字符串
  • redis linux 安装
  • springboot006基于SpringBoot的网上订餐系统(源码+包运行+LW+技术指导)
  • 【QNX】QNX侧如何抓取日志?
  • 深度学习:计算卷积神经网络中输出特征图尺寸的关键公式
  • 【惠州大亚湾】之维修戴尔服务器DELLR730XD
  • 跟我学C++中级篇——Design Patterns的通俗说法
  • 消息队列原理面试题及参考答案
  • 有序数组的平方(leetcode 977)
  • 网页抓取API,让数据获取更简单
  • 23.<Spring图书管理系统(强制登录版本)>
  • 【插件】重复执行 pytest-repeat