一、shell预习
shell预习代码:
vi 123.sh
i 进入编辑
mkdir shell
cd shell
touch 123.txt
:x 保存退出 :wq 也行
//执行 sh文件
bash 123.sh
zsh 123.sh
source 123.sh //会进入文件夹
./123.sh //会报错 没有权限
chmod +x 123.sh //按权限 执行
二、Framwork注入
一般修改原始的程序,是利用代码注入的方式,注入代码就会选择利用FrameWork或者Dylib等三方库的方式注入。
Framwork注入
-
通过Xcode新建Framwork,将库安装进入APP包
-
通过
yololib注入Framwork库路径
。命令:$yololib(空格)MachO文件路径(空格)库路径 -
所有的Framwork加载都是由DYLD加载进入内存被执行的
-
注入成功的库路径会写入到MachO文件的
LC_LOAD_DYLIB
字段中
三、yololib工具
代码:
//! Project version number for Hook.
FOUNDATION_EXPORT double HookVersionNumber;
//! Project version string for Hook.
FOUNDATION_EXPORT const unsigned char HookVersionString[];
+(void)load
{
NSLog(@"\n\n\n\n??????\n\n\n\n");
}
Dylib注入
-
通过Xcode新建Dylib库(注意:Dylib属于MacOS所以需要修改属性)
-
添加Target依赖,让Xcode将自定义
Dylib
文件打包进入APP包。 -
利用
yololib
进行注入。
在/usr/local/bin 下配置yololib工具和环境
需要利用yololib
工具进行调用注入 :
在shell脚本中加入:
yololib "$TARGET_APP_PATH/$APP_BINARY" "Frameworks/libHankHook.dylib"
把libHankHook.dylib 路径写入到MachO文件的LC_LOAD_DYLIB
字段中,就完成代码注入。
四、dylib注入
class_addMethod方式
:
- 利用AddMethod方式,让原始方法可以被调用,不至于因为找不到SEL而崩溃
class_replaceMethod方式
:
- 利用class_replaceMethod,直接给原始的方法替换IMP
method_setImplementation方式
:
- 利用method_setImplementation,直接重新赋值原始的新的IMP
© 版权声明
文章版权归作者所有,未经允许请勿转载,侵权请联系 admin@trc20.tw 删除。
THE END