免越狱tweak应用逆向开发
2017-02-07 21:35
411 查看
对于已越狱的设备,系统默认安装了mobilesubstrate动态库,提供一个系统级的入侵管道,所有的tweak都可以依赖它来进行开发。而对于没有越狱的手机,我们需要向目标app注入libsubstrate.dylib动态库,才能使程序在运行时加载我们编写的动态库。
访问:http://www.jianshu.com/p/cd1f8ae46a3c获得更好的阅读体验~
环境准备:ios-app-signer:应用签名打包工具(可选)
class-dump:头文件导出工具
theos
sudo clone git://github.com/DHowett/theos.git /opt/theos
libsubstrate.dylib下载到/opt/theos/lib/
ldid签名工具下载到/opt/theos/bin/
sudo chmod 777 /opt/theos/bin/ldid
配置dpkg-deb下载dm.pl,重命名为dpkg-deb后,放到/opt/theos/bin/
sudo chmod 777 /opt/theos/bin/dpkg-deb
optool:依赖注入工具
编译安装 optool 工具,下载之后需要修改项目Build Setting中Base SDK项为当前系统sdk,否则可能编译报错:
# 因为 optool 添加了 submodule,因为需要使用 --recuresive 选项,将子模块全部 clone 下来 git clone --recursive https://github.com/alexzielenski/optool.git cd optool xcodebuild -project optool.xcodeproj -configuration Release ARCHS="x86_64" build #编译完成后建议将生成二进制文件放到/usr/local/bin目录下
实现部分:
1. 在tweak工程目录下编译代码,生成目标库:
make
可以在./.theos/obj/debug下找到生成的目标库xxx.dylib
2.修改目标库依赖文件的相对地址:
otool -L xxx.dylib
查看动态库的依赖库,图中可以看到两个架构的依赖库,其中大部分都是系统库,只有一个需要我们注入的库。由于
/Library/Frameworks/CydiaSubstrate.framework/CydiaSubstrate
在实际设备上没有对应的文件,我们需要修改其地址为相对地址:
install_name_tool -change /Library/Frameworks/CydiaSubstrate.framework/CydiaSubstrate @loader_path/libsubstrate.dylib xxx.dylib
如果系统显示的是/usr/lib/libsubstrate.dylib而不是/Library/Frameworks/CydiaSubstrate.framework/CydiaSubstrate的话,使用以下命令:(命令中只有依赖地址不同,@loader_path指明相对地址。)
install_name_tool -change/usr/lib/libsubstrate.dylib @loader_path/libsubstrate.dylib xxx.dylib
完成之后我们再次查看依赖库:
可以看到,依赖库加载地址已经成功被修改
3.注入xxx.dylib到目标应用中
拷贝libsubstrate.dylib和我们编写的库xxx.dylib到需要hook的应用的zzz.app目录下,修改应用目录下二进制文件的zzz的Load Commands段:
optool install -c load -p "@executable_path/xxx.dylib" -t ./zzz #注:zzz为二进制文件名
4.重签名和打包应用:
codesign -f -s ‘iPhone Developer: xxx(xxx)’ —entitlements xxx.entitlements zzz.app
此处也可以简单的使用工具一步完成ios-app-signer生成ipa
5.使用itunes或pp助手或itool等方法安装食用~
知识扩展链:
相关文章推荐
- 三层C/S结构及其应用开发
- 中国人自己的VB:HB++.(网络)应用软件的专业开发工具
- COM应用软件开发技术 (bcd的文章)
- 树形结构在开发中的应用
- 实战揭秘:开发.Net平台应用系统框架
- SharePoint 应用的开发学习笔记(-)
- 国内应用软件开发管理的探讨
- Flash 组件应用与开发
- RUP过程与UML模型驱动开发应用实例
- 在PPC上面用.NET CF开发应用需要注意些什么——(一)CPU、OS以及CLR差别简述
- JBuilder 4 Enterprise 开发CORBA/WEB应用实例
- XML在B/S架构开发中的应用
- 企业应用开发和开放源码项目
- 办公之星控件OA应用开发方案
- 关于用 C++Builder 进行 MIDAS 应用开发的讨论
- 基于MySQL的高性能数据库应用开发
- MTS开发多层数据库应用系统
- 用c#开发程序应用框架
- PB开发Sybase数据库应用技巧点滴
- 团队开发中,如何处理一个站点不同Web应用通用Session