Gli iPhone Jailbroken mi danno i nervi saldi mentre rilassa alcune API fondamentali su iOS, utilizzando MobileSubstrate.Rileva lo spoofing UDID sull'iPhone in fase di esecuzione
http://www.iphonedevwiki.net/index.php/MobileSubstrate
Credo che molte applicazioni usano UDID come mezzo per autenticare un dispositivo e/o di un utente dal momento che è semi-automatico e maneggevole, ma si deve essere consapevoli di questo problema: UIDevice non è così manomissione prova come dovrebbe essere. Esiste un'app chiamata UDID Faker, che ti consente facilmente di spoofare l'UDID di qualcun altro in fase di runtime.
http://www.iphone-network.net/how-to-fake-udid-on-ios-4/
Ecco il codice sorgente di esso:
//
// UDIDFaker.m
// UDIDFaker
//
#include "substrate.h"
#define ALog(...) NSLog(@"*** udidfaker: %@", [NSString stringWithFormat:__VA_ARGS__]);
#define kConfigPath @"/var/mobile/Library/Preferences/com.Reilly.UDIDFaker.plist"
@protocol Hook
- (NSString *)orig_uniqueIdentifier;
@end
NSString *fakeUDID = nil;
static NSString *$UIDevice$uniqueIdentifier(UIDevice<Hook> *self, SEL sel) {
if(fakeUDID != nil) {
ALog(@"fakeUDID %@", fakeUDID);
/* if it's a set value, make sure it's sane, and return it; else return the default one */
return ([fakeUDID length] == 40) ? fakeUDID : [self orig_uniqueIdentifier];
}
/* ... if it doesn't then return the original UDID */
else {
return [self orig_uniqueIdentifier];
}
}
__attribute__((constructor)) static void udidfakerInitialize() {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
NSString *appsBundleIdentifier = [[NSBundle mainBundle] bundleIdentifier];
ALog(@"Loading UDID Faker into %@", appsBundleIdentifier);
NSDictionary *config = [NSDictionary dictionaryWithContentsOfFile: kConfigPath];
fakeUDID = [config objectForKey: appsBundleIdentifier];
[fakeUDID retain];
if(fakeUDID != nil) {
ALog(@"Hooking UDID Faker into %@", appsBundleIdentifier);
MSHookMessage(objc_getClass("UIDevice"), @selector(uniqueIdentifier), (IMP)&$UIDevice$uniqueIdentifier, "orig_");
}
[pool release];
}
Come si può vedere, il metodo uniqueIdentifier nella classe UIDevice ora ritorna fakeUDID su eventuali applicazioni.
Sembra che Skype e altre app rilevi questo tipo di contaminazione, ma non so come farlo.
Quello che volevo fare è: quando UIDevice è macchiato all'avvio, avvisa e esce (0).
Idee?
amico ... stai dando queste idee ad altre persone ... voglio dire che avresti potuto pubblicare solo la domanda senza il codice di esempio e le API/link esatti per lo spoofing. Ora tutti gli utenti SO sanno come falsificare un UDID. – lukya
Le persone con tali intenzioni o non hanno la capacità di capire il codice di cui sopra, o hanno l'abilità e già lo sanno. –
Avanti, ogni utente SO dovrebbe sapere come usare google. Solo perché i collegamenti non sono qui, non significa che qualcuno interessato non lo troverà. – JustSid