Construção e link da biblioteca dinâmica do iOS 6.1
Eu estou tentando criar uma biblioteca dinâmica para iOS e carregá-lo em tempo de execução. Depois de dar uma olhadaessa questão eesta respostaEu venho fazendo isso usando o iOSOpenDev e implantando tudo no meu iPhone. O projeto xCode para o dylib é chamado KDylibTwo e os arquivos que eu modifiquei são:
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
Para testar se minha biblioteca funciona, depois de criá-la para criação de perfil (como o iOSOpenDev a implanta no iPhone), posso encontrá-la armazenada no meu dispositivo em/usr/lib/libKDylibTwo.dylib
e construiu um tweak (novamente usando iOSOpenDev), ligando o SpringBoard da seguinte forma:
#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
Depois de instalar o ajuste no dispositivo e tocar em um ícone (que dispararia o código viciado), a saída do console se parece com:
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]
Minha pergunta é o que estou fazendo errado e a função da biblioteca não é chamada ou executada! Acho que devo esclarecer que estou falando apenas de dispositivos com jailbreak e não do desenvolvimento da App Store, então, por favor, não publique que isso não pode ser feito!
Agradeço antecipadamente,
Panagiotis.