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

news2024/11/22 11:12:39

背景

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.coloradmin.cn/o/2244518.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

LLM文档对话 —— pdf解析关键问题

一、为什么需要进行pdf解析? 最近在探索ChatPDF和ChatDoc等方案的思路,也就是用LLM实现文档助手。在此记录一些难题和解决方案,首先讲解主要思想,其次以问题回答的形式展开。 二、为什么需要对pdf进行解析? 当利用L…

HarmonyOS Next 浅谈 发布-订阅模式

HarmonyOS Next 浅谈 发布-订阅模式 前言 其实在目前的鸿蒙应用开发中,或者大前端时代、vue、react、小程序等等框架、语言开发中,普通的使用者越来越少的会碰到必须要掌握设计模式的场景。大白话意思就是一些框架封装太好了,使用者只管在它…

【HCIP]——OSPF综合实验

题目 实验需求 根据上图可得,实验需求为: 1.R5作为ISP:其上只能配置IP地址;R4作为企业边界路由器,出口公网地址需要通过PPP协议获取,并进行CHAP认证。(PS:因PPP协议尚未学习&#…

利用大语言模型对基准数据集在预处理和微调过程的数据污染检测

概述 虽然大规模语言模型发展迅速,但对其进行评估却变得越来越困难。人们在短时间内建立了许多基准来评估大规模语言模型的性能,但这些分数并不一定反映真实世界的性能。此外,还有人指出,这些基准数据集可能受到预处理和微调过程…

【SKFramework框架】一、框架介绍

推荐阅读 CSDN主页GitHub开源地址Unity3D插件分享QQ群:398291828小红书小破站 大家好,我是佛系工程师☆恬静的小魔龙☆,不定时更新Unity开发技巧,觉得有用记得一键三连哦。 一、前言 【Unity3D框架】SKFramework框架完全教程《全…

Linux中定时操作

一、一次性定时 这里以23&#xff1a;00为例 输入相关时间----at 23&#xff1a;00 所保存在哪个文件里------ ls /root > at.txt <EOT> &#xff08;ctrld退出到root&#xff09; 查看计划任务 ------ at -l 最后删除任务----at -d 2 二、周期性定时&#xf…

自回归和Rectified Flow完美融合统一多模态理解和生成!DeepSeek北大等开源JanusFlow

论文链接&#xff1a;https://arxiv.org/pdf/2411.07975 github链接&#xff1a;https://github.com/deepseek-ai/Janus 亮点直击 统一多模态框架&#xff1a; 提出 JanusFlow&#xff0c;一个同时处理图像理解和文本到图像生成任务的统一模型&#xff0c;解决了任务分离带来的…

Docker1:认识docker、在Linux中安装docker

欢迎来到“雪碧聊技术”CSDN博客&#xff01; 在这里&#xff0c;您将踏入一个专注于Java开发技术的知识殿堂。无论您是Java编程的初学者&#xff0c;还是具有一定经验的开发者&#xff0c;相信我的博客都能为您提供宝贵的学习资源和实用技巧。作为您的技术向导&#xff0c;我将…

数据结构在二叉树Oj中利用子问题思路来解决问题

二叉树Oj题 获取二叉树的节点数获取二叉树的终端节点个数获取k层节点的个数获取二叉树的高度检测为value的元素是否存在判断两颗树是否相同判断是否是另一棵的子树反转二叉树判断一颗二叉树是否是平衡二叉树时间复杂度O(n*n)复杂度O(N) 二叉树的遍历判断是否是对称的二叉树二叉…

【C++】踏上C++学习之旅(九):深入“类和对象“世界,掌握编程的黄金法则(四)(包含四大默认成员函数的练习以及const对象)

文章目录 前言1. 实现Date类的构造函数2. 实现Date类的拷贝构造函数3. 实现Date类的赋值运算符重载4. 实现各Date对象之间的比较接口5. 实现Date对象的加减接口6. const成员7. 取地址及const取地址操作符重载 前言 在我们前面学习到了"类和对象"的四大默认成员函数(…

远程控制软件使用教程

随着数字化办公浪潮的席卷&#xff0c;远程控制软件已经悄无声息地融入我们的日常生活&#xff0c;成为提升工作效率的神奇工具。它让我们无论身处何地&#xff0c;都能轻松驾驭办公室电脑&#xff0c;让旅途中的工作也变得轻松自如。那么&#xff0c;远程控制软件究竟是什么&a…

oracle查看锁阻塞-谁阻塞了谁

一 模拟锁阻塞 #阻塞1 一个会话正在往一个大表写入大量数据的时候&#xff0c;另一个会话加字段&#xff1a; #会话1 #会话2 会话2被阻塞了。 #阻塞2 模拟一个会话update一条记录&#xff0c;没提交。 另一个会话也update这一条记录&#xff1a; 会话2被阻塞了。 二 简单查…

我用豆包MarsCode IDE 做了一个 CSS 权重小组件

作者&#xff1a;夕水 查看效果 作为一个前端开发者&#xff0c;应该基本都会用VSCode来做开发&#xff0c;所以也应该见过如下这张图的效果: 以上悬浮面板分为2个部分展示内容。 <element class"hljs-attr">: 代表元素只有一个类名叫hljs-attr的类选择器&am…

第三届航空航天与控制工程国际学术会议 (ICoACE 2024)

重要信息 会议官网&#xff1a;www.icoace.com 线下召开&#xff1a;2024年11月29日-12月1日 会议地点&#xff1a;陕西西安理工大学金花校区 &#xff08;西安市金花南路5号&#xff09; 大会简介 2024年第三届航空航天与控制工程国际学术会议&#xff08;ICoACE 2024&a…

如何下载链接为blob类型的视频,video 标签 src:blob 链接转下载MP4

文章目录 前言这种链接是如何生成的&#xff1f;原理分析 第一步&#xff0c;找到源地址1.在想下载的视频网页&#xff0c;按f12打开开发人员工具。找到video标签&#xff0c;锁定src属性2.确认src源为blob&#xff1a;样式&#xff0c;转到网络&#xff08;network&#xff09…

Redis | Redis常用命令及示例总结(API)

前言 参考文档&#xff1a;http://doc.redisfans.com/index.html 本篇主要总结Redis的常用命令&#xff0c;笔者在记录命令时的格式如下&#xff1a; 命令关键字&#xff1a;命令示例&#xff1b;命令说明&#xff1b; 命令参数解释及一些说明&#xff1b; 其中命令关键字使用…

【VTK】MFC中使用VTK9.3

MFC中如果使用VTK 碎碎念一、vtk环境配置二、具体实现1、新建类2. 自定义控件3、跑个栗子 总结 碎碎念 如果不是老程序用的MFC&#xff0c;我才不想用MFC去使用VTK呢。 一、vtk环境配置 关于环境配置你可以看这篇文章&#xff0c;在这里不过多赘述。需要注意要选择支持MFC&a…

《译文》2024年11月数维杯国际大学生数学建模挑战赛题目

# 赛题正式发布 2024年第十届数维杯国际大学生数学建模挑战赛顺利开赛&#xff0c;竞赛开始时间为北京时间2024年11月15日09:00至北京时间2024年11月19日09:00&#xff0c;共计4天&#xff0c;竞赛题目正式发布&#xff0c;快来一起围观&#xff0c;你认为今年的哪个题目更具有…

SentenceTransformers×Milvus:如何进行向量相似性搜索

你可曾经历过在 Meetup 上听到一段绝妙的内容&#xff0c;但发现回忆不起具体的细节&#xff1f;作为一名积极组织和参与 Meetup 的开发者关系工程师&#xff0c;我常常会有这种感受。 为了解决这个问题&#xff0c;我开始探索使用相似性搜索技术来筛选大量的非结构化数据。非结…

如何在 Ubuntu 20.04 上的 PyCharm 中使用 Conda 安装并配置 IPython 交互环境

如何在 Ubuntu 20.04 上的 PyCharm 中使用 Conda 安装并配置 IPython 交互环境 要在 Ubuntu 20.04 上的 PyCharm 中配置 IPython 交互环境&#xff0c;并使用 Conda 作为包管理器进行安装&#xff0c;你需要遵循一系列明确的步骤。这些步骤将确保你可以在 PyCharm 中使用 Cond…