iOS app 动态库注入

来源:互联网 发布:win7如何优化 编辑:程序博客网 时间:2024/05/01 16:20

介绍

有时候需要给一个已有的app注入一个动态库,来hook某些函数,从而修改app的某些行为,或者给app增加一些功能等。

下面这个脚本可以将一个动态库或framework注入到一个app中

#!/bin/bashfunction usage(){    echo 'usage: inject-dylib.sh file.app libxxx.dylib'    echo '       inject-dylib.sh file.app xxx.framework'    exit 1}function abspath(){    echo "$(cd $(dirname "$1"); pwd)/$(basename "$1")"}if test $# -ne 2then    usagefi# app绝对路径apppath=$(abspath "$1")# app文件名appname=$(basename $apppath)# 可执行文件名execname="${appname%.*}"# 可执行文件绝对路径execpath="$apppath/$execname"# 动态库绝对路径dylibpath=$(abspath "$2")# 动态库文件名dylibname=$(basename "$dylibpath")# 动态库扩展名dylibext="${dylibname##*.}"# 动态库目的路径dylibdstpath="$apppath/Frameworks"mkdir -p "$dylibdstpath"cp -fR "$dylibpath" "$dylibdstpath" || exit 1if [ $dylibext = 'dylib' ]then    rpath="@rpath/$dylibname"elif [ $dylibext = 'framework' ]then    binname="${dylibname%.*}"    rpath="@rpath/$dylibname/$binname"else    usagefi# https://github.com/alexzielenski/optooloptool install -c load -p "$rpath" -t "$execpath"

这个脚本使用optool,所以要先安装这个工具,比如放在/usr/local/bin目录下
因为是非越狱环境,所以注入后需要重新签名才能安装到手机上运行

另一个集成方案
https://github.com/AloneMonkey/MonkeyDev

原创粉丝点击