ios动态库注入把越狱手机上自制的动态库安装到普通手机上
文章目录
- 预备条件
- 导出越狱手机上的app包和自己注入的动态库
- 导出自己写的tweak动态库文件
- 查看依赖库
- 执行命令查看程序依赖的动态库名字
- 用machoview查看
- 安装insert_dylib
- 把动态库插入到app里
- optool 代替insert_dylib 更方便
- 查看自己写的动态库都依赖哪些库
- 修改越狱动态库的加载路径
- 给自己的动态库重签名
- 对外面app包重签名
- 把ipa包安装到手机上
预备条件
本文假设你已经学会了在越狱手机上使用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会运行自己写的动态库.
ios动态库注入把越狱手机上自制的动态库安装到普通手机上相关推荐
- ios保存gif到相册_怎么将GIF动态图保存到iPhone手机上【详细方法】
很多iPhone用户都在询问:iphone如何保存GIF动态图?关于这个问题,小编尝试了不少方法之后,发现秘诀有两个.一个是你的iPhone系统必须是IOS7以上(含IOS7),另外一个秘诀就是需要& ...
- uni-app [真机运行失败,失败原因:手机上没有信任本计算机的授权,请在手机上信任该授权]
在hbuilder上连接手机运行uni-app项目时,出现了这样的问题:[真机运行失败,失败原因:手机上没有信任本计算机的授权,请在手机上信任该授权],本人用得Android荣耀手机,大家可以根据以下 ...
- iOS冰与火之歌番外篇 - 在非越狱手机上进行App Hook(转载)
作者简介:郑旻(花名蒸米),阿里巴巴移动安全部门资深安全工程师,香港中文大学移动安全(Android & iOS)方向博士,曾在腾讯.百度以及硅谷的FireEye实习.在博士期间发表了多篇移动 ...
- iOS冰与火之歌番外篇 - 在非越狱手机上进行App Hook
作者简介:郑旻(花名蒸米),阿里巴巴移动安全部门资深安全工程师,香港中文大学移动安全(Android & iOS)方向博士,曾在腾讯.百度以及硅谷的FireEye实习.在博士期间发表了多篇移动 ...
- 在非越狱手机上进行App Hook
作者简介:郑旻(花名蒸米),阿里巴巴移动安全部门资深安全工程师,香港中文大学移动安全(Android & iOS)方向博士,曾在腾讯.百度以及硅谷的FireEye实习.在博士期间发表了多篇移动 ...
- 华为手机怎么导入主题_如何在华为手机上设置主题动态壁纸
许多智能手机现在可以设置动态桌面墙纸,您还可以选择自己喜欢的桌面主题. 很多用户经常使用系统随附的主题界面后会感到呆板,因此他们想自己设置一些不同的主题界面,还可以自定义一些动态锁屏墙纸. 但是,有很 ...
- 怎么调节手机的刷新率_二分钟科普:手机上的“高刷新率”
上回粗略带过屏幕刷新率,这篇将会以更简单的叙述,介绍手机屏幕刷新率和插帧.本期关键词:屏幕刷新率.FPS.插帧正文不纠结这是谁带节奏,进步是必然的.屏幕刷新率(通常单位为Hz),是一个硬件固定数值.例 ...
- android手机如何加速,小技巧:如何给Android手机上的Chrome浏览器加速
当你使用过Android版本的谷歌Chrome浏览器后,你可能会对花费大量时间等待加载.浏览器假死的经历印象深刻. 假如你习惯了使用谷歌Chrome浏览器,不愿意再更换其它浏览器,但又不得不去面对它占 ...
- 微信开发H5 video 视频在ios可以播放但是在android手机上无法播放或者黑屏
1.首先视频在ios无法播放可能的原因是视频地址可能无效,在确认视频在PC端浏览器可以播放后则看是否是ios的安全限制,视频放的位置不可以访问到. 2.视频在android上黑屏,可以播放但是暂停时黑 ...
最新文章
- Apache Tomcat 7.x 概述
- UML类图关系大全 and 报表的基本用法
- idea+docker 快速部署项目
- 在VS.NET 的项目中使用生成事件
- 在Web服务器磁盘上缓存数据和HTML页面
- android取消自动调试模式吗,Android进入调试模式的三种技巧
- 大一C语言大作业ip合法性,c语言实现判断ip地址是否合法
- acdream 1042: Classification of the species 抽象无根树并查集
- fedora 19 gnome 3.8 关闭笔记本盖子的动作
- Springboot中常用的注解
- Web Api 接口文档制作
- VSLAM算法(二):PnP求解 3D-2D 相机位姿及 BA优化算法
- kubuntu18.04安装搜狗输入法
- 新一代防泄密系统即将发布
- 华为云桌面客户端_华为云服务器购买及环境搭建简述
- 聊一聊B端和C端产品的区别
- 基于STM32与红外感应开关的自动门设计与实现(结构+设计)
- 嵌入式开发:硬件在环测试
- JavaScript 获得对象的N种方法 [转]
- python获取指定扩展名的文件_python查找目录下指定扩展名的文件实例
热门文章
- linux scp密码配到命令里,Linux scp命令
- 作业帮冯雪胡不归问题_阅读下面的文字,完成文后小题目。隐逸文化的精神价值“归去来兮,田园将芜胡不归。”陶渊明的这一声清啸,引得林泉激荡,岩穴来风,千载之下尚令人追慕不已。其实,这并非陶渊明...
- 音视频传输协议众多, 5G时代不同业务应该如何选择?
- 变频器LED显示灯闪烁_雷克萨斯LX570经常启动不着火,胎压灯闪烁且胎压显示不正确...
- 将电子书转为PDF涉及的PDF拆分合并总结
- HDFS的fsimage和edits是什么、有什么作用
- HDU 5983(模拟魔方 模拟)
- itunes不识别ipad解决方法
- C++代码 回文素数
- PDF文件 文档有权限 无法保存注释