初始化配置iOSOpenDev的Xcode项目
去掉Deploymen Info
中的Mac
和确保iOS版本一致
此处,先去做第一个配置方面的改动:
TARGETS
->General
->Deploymen Info
:去掉Mac
,因为我们开发的是iOS
的插件,不需要发布到Mac
,且设置好iOS的最低版本PROJECT
->Info
->Deployment Target
->iOS Deployment Target
,也要同步设置iOS
的最低版本
导入依赖库libsubstrate.dylib
把libsubstrate.dylib
(一般在/opt/iOSOpenDev/lib/libsubstrate.dylib
):
导入到项目中的:Targets
->YourProjectName
->Build Phases
->Link Binary With Libraries
设置被hook的app包名或二进制文件名
去把要hook的,被拦截的app的包名,加到被hook的包名的列表中:
YourProjectName
->YourProjectName
->Package
->Libarary
->MobileSubstrate
->DynamicLibraries
->CurrentProjectBundleIdentifier.plist
在Root
->Filter
->Bundles
,会看到Item 0
:
Type
:String
Value
:填入你要hook的app的包名- 举例
com.crifan.ShowSystemInfo
- 举例
- 另外
- 如果要新增一行
- 移动到
Item 0
所在的行,会看到出现个➕
=加号
,点击加号
,会新增一行
- 移动到
- 如果要新增一行
如何hook二进制?
如果需要hook二进制,则是新建Array
类型的(和Bundles
并列的)Executables
子项,再加上对应的二进制文件名
举例:
- hook二进制:
akd
=AuthKit.framework
的daemon进程
此时,对应的plist
文件内容是:
- jailAppleAccount/Package/Library/MobileSubstrate/DynamicLibraries/jailAppleAccount.plist
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>Filter</key> <dict> <key>Executables</key> <array> <string>akd</string> <string>amsaccountsd</string> <string>AppleMediaServices</string> <string>AppleAccount</string> <string>Preferences</string> </array> <key>Bundles</key> <array> <string>com.apple.Preferences</string> </array> </dict> </dict> </plist>
设置iPhone的IP
把此处要把iOS调试设备(iPhone)中的IP地址:
此处是:192.168.1.27
去加到配置中去:
iOSOpenDevDevice
=192.168.1.27
附上原默认的更新后的配置:
iOSOpenDevBuildPackageOnAnyBuild = NO
iOSOpenDevCopyOnBuild = NO
iOSOpenDevDevice = 192.168.1.27
iOSOpenDevInstallOnAnyBuild = NO
iOSOpenDevInstallOnProfiling = YES
iOSOpenDevPath = /opt/iOSOpenDev
iOSOpenDevRespringOnInstall = YES
iOSOpenDevUsePackageVersionPList = YES
另外,理论上,去把对应变量加到环境变量:
➜ ~ cat ~/.zshrc | grep iOSOpenDevDevice
export iOSOpenDevDevice=192.168.1.27
效果应该也是一样的。