iOS代码注入&Method Swizzle技术
2021-04-25 本文已影响0人
spyn_n
说明:本文仅限于说明其技术点,没有别的,不要做坏事
注入
代码注入方式:动态库framework注入,dylib注入;
-
动态库注入
1、使用脚本重签名。
2、创建framework
,编译。
3、使用yololib
手动注入MachO
cd到.app包中,指令:yololib WeChat Frameworks/SPYHook.framework/SPYHook
4、替换掉ipa
包中的MachO
文件
5、重新打包成ipa
包(便于用脚本重签名,自动解压得到已经注入的.app
包)
结果查看:
-
dylib
注入
1、新建一个工程安装到手机上(其实就是需要从苹果服务器拿到描述文件)
2、可以使用脚本重新签名,先看一下是否成功。iOS应用重签名点这里
3、新建Library
如图点击项目Dylib注入
-->在TARGETS点下面的+
-->选择macOS
,搜索library
,选择Library
,点击Next
image.png
如图点击新建的Library
PSYHook
-->Build Setting
-->在搜索中输入base
,定位到Architectures
的Base SDK
,修改为iOS
image.png
如图点击新建的Library
PSYHook
-->Build Setting
-->在搜索中输入sign
,定位到signing
的Code Signing identity
,修改为iOS Developer
image.png
4、添加Copy Files
选择项目
TAEGETS --> Build Phases --> + --> NewCopy File Phase
,确认添加库,以及Destination
是Frameworks
image.png
image.png
5、在库的
.m
文件的+load方法中写注入代码image.png
6、查看注入结果:
【注意
Run Script
和Copy Files
的顺序,Run Script
在上面,斗则会崩溃,因为我的dylib
注入的脚本指令是在,重签名脚本指令之后,确保找到APP
包MachO
路径才可以正常操作】image.png
Method Swizzle
使用class_getInstanceMethod
获取到需要HOOK的方法,然后method_exchangeImplementations
交换方法的实现。
当我们注入成功后,我们一般要先进行动态调试,从界面入手,找到对应的类和事件名称,如图:
image.png
第一种方式:通过class_addMethod
配合method_exchangeImplementations
第二种方式:直接使用class_replaceMethod
第三种方式:method_getImplementation
和method_setImplementation
拿到其登录的密码并窗口弹出: