我正在尝试为 iOS 创建一个动态库并在运行时加载它。在看了这个问题之后这个答案之后,我一直在使用 iOSOpenDev 并在我的 iPhone 上部署所有东西。dylib 的 xCode 项目称为 KDylibTwo,我修改的文件是:
KDylibTwo.h
#import <Foundation/Foundation.h>
@interface KDylibTwo : NSObject
-(void)run;
@end
KDylibTwo.m
#import "KDylibTwo.h"
@implementation KDylibTwo
-(id)init
{
if ((self = [super init]))
{
}
return self;
}
-(void)run{
NSLog(@"KDylibTwo loadded.");
}
@end
为了测试我的库是否有效,在构建它以进行分析之后(iOSOpenDev 在 iPhone 上部署它的方式),我可以找到它存储在我的设备上/usr/lib/libKDylibTwo.dylib
并构建了一个调整(再次使用 iOSOpenDev),挂钩 SpringBoard 如下:
#include <dlfcn.h>
%hook SBApplicationIcon
-(void)launch{
NSLog(@"\n\n\n\n\n\n\nSBHook For libKDylibTwo.dylib");
void* dylibLink = dlopen("/usr/lib/libKDylibTwo.dylib", RTLD_NOW);
if(dylibLink == NULL) {
NSLog(@"Loading failed.");
} else {
NSLog(@"Dylib loaded.");
void (*function)(void);
*(void **)(&function) = dlsym(dylibLink, "run");
if (function) {
NSLog(@"Function found.");
(*function)();
} else {
NSLog(@"Function NOT found");
}
}
NSLog(@"End of code");
%log;
%orig;
}
%end
在设备上安装调整并点击图标(这将触发挂钩代码)后,控制台输出如下所示:
Aug 28 13:03:35 Pudge SpringBoard[18254] <Warning>: SBHook For libKDylibTwo.dylib
Aug 28 13:03:35 Pudge SpringBoard[18254] <Warning>: Dylib loaded.
Aug 28 13:03:35 Pudge SpringBoard[18254] <Warning>: Function NOT found
Aug 28 13:03:35 Pudge SpringBoard[18254] <Warning>: End of code
Aug 28 13:03:35 Pudge SpringBoard[18254] <Warning>: -[<SBApplicationIcon: 0x1d5008c0> launch]
我的问题是我做错了什么,图书馆的功能没有被调用或执行!我想我应该澄清一下,我只是在谈论越狱设备而不是 App Store 开发,所以请不要继续发布无法完成的帖子!
提前谢谢你,
Panagiotis。