|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
管理你的ViewController的层次可以自己写View切换的动画关掉他默认的动画文档:还有个蛋疼的UIWindow都快忘了他了因为iOS是从MacosX过来的很多工具直接拿来用这个UIWindow就是在iOS里每个App独占屏幕所以同时存在的只有一个UIWindowiOS体系不休晋级,布局不休调剂,以是我们能够使用的静态库注进办法也依据体系版本的分歧而分歧。
在此之前,我们能够使用情况变量DYLD_INSERT_LIBRARY来增加静态库,iOS7被乐成逃狱后,我们必要本人往探究理论iOS7静态库注进的体例。
本文将在iOS7.0.4情况下,以hook付出宝app程序中ALPLauncherController的视图加载办法为例,先容在iOS7下,怎样完成静态库注进打击。
相干工具地位信息
先总结排列一下相干编译、链接工具的地位路径信息,在列位自行下载的iOSSDK中
clang:/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang
gcc:/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/arm-apple-darwin10-llvm-gcc-4.2
ld:/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/ld
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ld
sdk:/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.0.sdk/
静态库源程序
我们编写一个hook付出宝app程序中ALPLauncherController的viewDidLoad办法,详细办法是使用MethodSwizzling。
不熟习MethodSwizzling的话,能够参看我之前的这篇文章:Objective-C的hook计划(一):MethodSwizzling
- #import<UIKit/UIKit.h>
- #import<objc/runtime.h>
- @implementationUIViewController(HookPortal)
- -(void)myViewDidLoad
- {
- NSLog(@"-----------------------myViewDidLoad----------------------");
- }
- @end
- staticvoid__attribute__((constructor))initialize(void)
- {
- NSLog(@"=======================initialize========================");
- Classclass=objc_getClass("ALPLauncherController");
- Methodori_Method=class_getInstanceMethod(class,@selector(viewDidLoad));
- Methodmy_Method=class_getInstanceMethod(class,@selector(myViewDidLoad));
- method_exchangeImplementations(ori_Method,my_Method);
- }
编译dylib
我们能够使用xcode间接协助编译.o,大概本人手动利用clang编译,然先手动ld:
- ld-dylib-lsystem-lobjc-syslibroot/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.0.sdk/-olibwq.dylibxxx.o
安装、考证dylib
将编译好的libwq.dylib拷贝到iPhone文件体系中/Library/MobileSubstrate/DynamicLibraries/下
假如不宁神库是不是能一般事情,能够加一步考证操纵,写一个demo实验翻开本人的库:
- voidvoid*handle=(void*)dlopen("/Library/MobileSubstrate/DynamicLibraries/libwq.dylib",0x2);
- handle=dlsym(handle,"myViewDidLoad");
- if(handle){
- NSLog(@"++++");
- }else{
- NSLog(@"----");
- }
运转查验效果
到了考证效果的时分,重启设备后者实行:
启动付出宝app,然后察看log信息:
- Portal[3631]<Notice>:MS:Notice:Injecting:com.alipay.iphoneclient[Portal](847.21)
- Portal[3631]<Notice>:MS:Notice:Loading:/Library/MobileSubstrate/DynamicLibraries/libwq.dylib
- Portal[3631]<Warning>:=======================initialize========================
- Portal[3631]<Warning>:-----------------------myViewDidLoad----------------------
- 证实我们的静态库已被加载,我们的Hook同样成功了。
剩下的就要本人往思索了,除加句无聊的Log,我们还能够做点甚么呢?
很少去思考,没有去多问几个为什么。这是学习的大忌,我认识到了自己学习方法上的错误。孔子说,学而不思则罔,思而不学则殆。一点也没错,学和思是要结合的,这样才能进步。现在回想一下,我学到了什么?自己也无言以对了。 |
|