IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> ios动态库注入把越狱手机上自制的动态库安装到普通手机上 -> 正文阅读

[移动开发]ios动态库注入把越狱手机上自制的动态库安装到普通手机上

预备条件

本文假设你已经学会了在越狱手机上使用tweak给app添加自制的动态库.dylib
如果不会请查看下面这个目录,里面有我写的关于tweak的文章
tweak教程目录

导出越狱手机上的app包和自己注入的动态库

usb链接手机,登录root账户
使用下面工具查看要读取的app包目录

MJAppTools -l

例如:

# 04 【testCrackPwd】 <tdw.testCrackPwd>
  /private/var/containers/Bundle/Application/9692FA06-4755-406C-A3F0-66651CA1BC05/testCrackPwd.app

导出自己写的tweak动态库文件

使用iFunBox到Device\Library\MobileSubstrate\DynamicLibraries目录下查找你写的.dylib扩展名的tweak动态库文件

在这里插入图片描述
例如我这里的是testCrack.dylib

查看依赖库

先进入app包所在目录

执行命令查看程序依赖的动态库名字

otool -L 可执行程序名

例如:得到5个动态库

otool -L testCrackPwd
testCrackPwd:
	/System/Library/Frameworks/Foundation.framework/Foundation (compatibility version 300.0.0, current version 1858.112.0)
	/usr/lib/libobjc.A.dylib (compatibility version 1.0.0, current version 228.0.0)
	/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1311.100.3)
	/System/Library/Frameworks/CoreFoundation.framework/CoreFoundation (compatibility version 150.0.0, current version 1858.112.0)
	/System/Library/Frameworks/UIKit.framework/UIKit (compatibility version 1.0.0, current version 5522.2.101)

注意L要大写

用machoview查看

打开 Load Commands里面的 LC_LOAD_DYLIB开头的都是动态库
在这里插入图片描述
然后Load Commands段落的结尾添加LC_LOAD_DYLIB(自己的动态库),就可以注入自己的动态库了.一定要在结尾,否则被插入后面的位置就往后移动了.

安装insert_dylib

地址
https://github.com/Tyilo/insert_dylib
下载好,以后选择release编译,然后把product文件夹下的insert_dylib 可执行文件,复制到 usr/local/bin 目录下,这样就可以在任意目录下运行了

把动态库插入到app里

  • 先把动态库dylib文件放到app包里,跟可执行文件放在同一目录,例如下面把testCrack.dylib 和可执行文件testCrackPwd放在同一目录

在这里插入图片描述

insert_dylib @executable_path/动态库名 app包名 --all-yes

executable_path 意思是动态库就在可执行文件同一目录 --all-yes是自动替你输入2次y和回车
例如:

insert_dylib @executable_path/tweak_crack.dylib testCrackPwd --all-yes

这种结尾没有 --weak的app加载找不到动态库会闪退,添加 --weak的不会闪退
例如:

insert_dylib @executable_path/动态库名 app包名 --all-yes --weak

insert_dylib @executable_path/tweak_crack.dylib testCrackPwd --all-yes --weak

之后在app包里会多出一个文件以_patched结尾
在这里插入图片描述
把它拖拽到machoview里查看Load Commands段结尾,发现已经多了我们添加的动态库
LC_LOAD_DYLIB开头的,如下图:
在这里插入图片描述
–weak 加载动态库找不到不闪退的是这样 LC_LOAD_WEAK_DYLIB开头的,如下图
在这里插入图片描述

optool 代替insert_dylib 更方便

安装动态库

optool install -c load -p "@executable_path/tweak_crack.dylib" -t testCrackPwd

删除动态库

optool uninstall -p "@loader_path/libsubstrate.dylib" -t tweak_crack.dylib

删掉 libsubstitute.0.dylib

optool uninstall -p /usr/lib/libsubstitute.0.dylib -t libsubstrate.dylib

添加/usr/lib/libstdc++.6.dylib

optool install -c load -p "/usr/lib/libstdc++.6.dylib" -t libsubstrate.dylib

查看自己写的动态库都依赖哪些库

otool -L 自己的动态库名

例如:testCrack.dylib

otool -L testCrack.dylib

显示结果:

testCrack.dylib (architecture armv7):
	/Library/MobileSubstrate/DynamicLibraries/testCrack.dylib (compatibility version 0.0.0, current version 0.0.0)
	/usr/lib/libobjc.A.dylib (compatibility version 1.0.0, current version 228.0.0)
	/System/Library/Frameworks/Foundation.framework/Foundation (compatibility version 300.0.0, current version 1858.112.0)
	/System/Library/Frameworks/CoreFoundation.framework/CoreFoundation (compatibility version 150.0.0, current version 1858.112.0)
	/System/Library/Frameworks/UIKit.framework/UIKit (compatibility version 1.0.0, current version 5522.2.101)
	/System/Library/Frameworks/QuartzCore.framework/QuartzCore (compatibility version 1.2.0, current version 1.11.0)
	/Library/Frameworks/CydiaSubstrate.framework/CydiaSubstrate (compatibility version 0.0.0, current version 0.0.0)
	/usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 1300.23.0)
	/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1311.100.3)
testCrack.dylib (architecture arm64):
	/Library/MobileSubstrate/DynamicLibraries/testCrack.dylib (compatibility version 0.0.0, current version 0.0.0)
	/usr/lib/libobjc.A.dylib (compatibility version 1.0.0, current version 228.0.0)
	/System/Library/Frameworks/Foundation.framework/Foundation (compatibility version 300.0.0, current version 1858.112.0)
	/System/Library/Frameworks/CoreFoundation.framework/CoreFoundation (compatibility version 150.0.0, current version 1858.112.0)
	/System/Library/Frameworks/UIKit.framework/UIKit (compatibility version 1.0.0, current version 5522.2.101)
	/System/Library/Frameworks/QuartzCore.framework/QuartzCore (compatibility version 1.2.0, current version 1.11.0)
	/Library/Frameworks/CydiaSubstrate.framework/CydiaSubstrate (compatibility version 0.0.0, current version 0.0.0)
	/usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 1300.23.0)
	/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1311.100.3)
testCrack.dylib (architecture arm64e):
	/Library/MobileSubstrate/DynamicLibraries/testCrack.dylib (compatibility version 0.0.0, current version 0.0.0)
	/usr/lib/libobjc.A.dylib (compatibility version 1.0.0, current version 228.0.0)
	/System/Library/Frameworks/Foundation.framework/Foundation (compatibility version 300.0.0, current version 1858.112.0)
	/System/Library/Frameworks/CoreFoundation.framework/CoreFoundation (compatibility version 150.0.0, current version 1858.112.0)
	/System/Library/Frameworks/UIKit.framework/UIKit (compatibility version 1.0.0, current version 5522.2.101)
	/System/Library/Frameworks/QuartzCore.framework/QuartzCore (compatibility version 1.2.0, current version 1.11.0)
	/Library/Frameworks/CydiaSubstrate.framework/CydiaSubstrate (compatibility version 0.0.0, current version 0.0.0)
	/usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 1300.23.0)
	/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1311.100.3)

这里出现了3次 /Library/Frameworks/CydiaSubstrate.framework/CydiaSubstrate (compatibility version 0.0.0, current version 0.0.0)
Cydia是越狱的动态库,其他的都是系统的动态库.

或者用machoview打开 testCrack.dylib
也会找到段落LC_LOAD_DYLIB(CydiaSubstrate)如下图:

在这里插入图片描述
把这个越狱手机的动态库,从越狱手机上用iFunbox复制到app包里,如下图,虽然在iFunbox显示0b,复制到mac上就会显示真实大小150k
在这里插入图片描述
在这里插入图片描述
把app包里的_patched结尾的可执行文件覆盖原来的可执行文件
如下图:
在这里插入图片描述

testCrackPwd_patched改成testCrackPwd

修改越狱动态库的加载路径

/Library/Frameworks/CydiaSubstrate.framework/CydiaSubstrate

看上面CydiaSubstrate的路径,是越狱手机的路径,现在要把这个路径修改成跟自己的动态库动态库相同路径,使用下面指令,@loader_path是指被修改的动态库的路径是加载路径,表示自己的动态库和被修改的动态库是相同路径

install_name_tool -change  旧的动态库路径 @loader_path/越狱动态库名 自己的动态库名

例如上面的例子完整指令如下:

install_name_tool -change  /Library/Frameworks/CydiaSubstrate.framework/CydiaSubstrate @loader_path/libsubstrate.dylib tweak_crack.dylib

运行结果显示会让 testCrack.dylib的armv7 arm64 arm64e 的签名无效

/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/install_name_tool: warning: changes being made to the file will invalidate the code signature in: testCrack.dylib (for architecture armv7)
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/install_name_tool: warning: changes being made to the file will invalidate the code signature in: testCrack.dylib (for architecture arm64)
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/install_name_tool: warning: changes being made to the file will invalidate the code signature in: testCrack.dylib (for architecture arm64e)

使用machoview查看自己的动态库 testCrack.dylib,里面依赖的越狱动态库cydiaSubstrate里面的路径已经被修改了
在这里插入图片描述

给自己的动态库重签名

因为刚才我们修改了自己动态库里面加载越狱动态库的路径所以,文件签名被破坏了,使用指令重签名,这个签名不能使用ios App Signer工具,ios App Signer只会对最外层的app包重签名.
获取证书id

security find-identity -v -p codesigning

得到结果,下面其中一行是我要的 前面的数字 是我要的id :
07CA4B77ED192A9294DB84EBD74BC5159793DF69

  5) 07CA4B77ED192A9294DB84EBD74BC5159793DF69 "Apple Development: guangyu shi (6NRAA7665L)"

使用指令重签名动态库

codesign -fs 证书id 自己的动态库名
codesign -fs 证书id 越狱动态库名 

例如下面:

codesign -fs 07CA4B77ED192A9294DB84EBD74BC5159793DF69 tweak_crack.dylib
codesign -fs 07CA4B77ED192A9294DB84EBD74BC5159793DF69 libsubstrate.dylib

对外面app包重签名

使用ios app signer重签名,下面是我写的关于这个工具的教程
ios重签名工具ios-app-signer的使用
在这里插入图片描述
生成新的ipa包

把ipa包安装到手机上

用爱思助手或者其他工具,安装ipa包到手机上,发现这个app会运行自己写的动态库.

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2022-04-27 11:27:30  更:2022-04-27 11:28:31 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 23:43:29-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码