2010-09-25 5 views
-1

Donc, fondamentalement, je travaille sur une application, et l'une des fonctionnalités est une fonction anti-fissuration. Il vérifie la page Web pour le numéro UDID de l'appareil, et si elle est là, il permet à l'application de s'exécuter, si ce n'est pas là, il exécute exit (0) ;. Jusqu'à présent, c'est ce que j'ai.Correspondance d'un NSString avec une partie d'un paragraphe de texte sur un site Web. - iPhone SDK

Ceci est mon AppDelegate.m

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 
    [window addSubview:mainViewController.view]; 

    if ([[[UIDevice currentDevice] uniqueIdentifier] isEqualToString:[NSString stringWithContentsOfURL:[NSURL URLWithString:@"http://example.com" ]]]) { 
     NSLog(@"Match!"); 
     [window makeKeyAndVisible]; 
    } 
    else { 
     NSLog(@"No match."); 
     alertView = [[UIAlertView alloc] initWithTitle:@"Access denied!" message:@"You aren't using an official version of this application." delegate:self cancelButtonTitle:@"Okay" otherButtonTitles:nil]; 
     [alertView show]; 
     [alertView release]; 
    } 

    return YES; 
} 

- (void)alertView:(UIAlertView *)alertView willDismissWithButtonIndex:(NSInteger)buttonIndex { 
    if (buttonIndex == 0) { 
    exit(0); 
    } 
} 

Et au fond, où vous voyez

if ([[[UIDevice currentDevice] uniqueIdentifier] isEqualToString:[NSString stringWithContentsOfURL:[NSURL URLWithString:@"http://example.com" ]]]) { 

Quand il court cela, il ne peut détecter que tout le texte, plutôt que de l'indexer et trouver ce numéro UDID. Donc, je ne peux mettre que 1 numéro UDID là-bas, ce qui provoque un plantage de l'application de chaque utilisateur. Je veux le configurer de manière à ce que je puisse avoir autant de choses que je veux, et il va simplement l'indexer et chercher ce numéro UDID sur la page. Est-ce que quelqu'un peut m'aider s'il vous plaît? C'est très important!

Merci beaucoup!

+0

Hi. Ceci est utile pour les applications ad hoc d'entreprise. Avez-vous trouvé une solution pour ce Daniel? Salutations, Ompah – Ompah

Répondre

2

Yay donc si j'achète votre application et votre serveur est en panne (stringWithContentsOfURL renvoie nul) votre application pensera que j'ai piraté votre logiciel!

Que diriez-vous de passer du temps sur les fonctionnalités de l'utilisateur final sans bug au lieu de cela?

+0

Non. Vous n'obtenez pas le point. Si le numéro UDID n'est pas répertorié sur le site, l'application se termine elle-même. Avez-vous même lu le code? Le site est une liste blanche, pas une liste noire. EDIT * Peu importe, désolé. Lisez-le pour jeûner et pensé que vous disiez si vous l'avez craqué. Fondamentalement, le crash du serveur dépendrait d'Apple. Donc, ce serait leur problème, car il est hébergé sur iDisk. –

+0

Je comprends très bien ce que vous faites et je pense que c'est une chose totalement stupide à mettre en œuvre.Si iDisk n'est pas disponible pour une raison quelconque (maintenance, problème de routage local, pare-feu, internet, etc.) et qu'un utilisateur LEGIT ne peut pas utiliser l'application parce que vous pensez qu'il pirate votre logiciel, alors quel est le problème? Je pense que vous pouvez vous attendre à beaucoup de remboursements et de mauvaises critiques dès que les gens le découvrent. –

0

Quant à moi, il serait plus facile de générer un xml de UDID, puis l'analyser dans un tableau, puis comparer chaque élément avec UDID paticular

+0

Pouvez-vous expliquer un peu plus sur la façon de faire cela? –

+0

vous allez créer une page web avec la liste des udid. Je vous propose de remplacer votre page Web par une page xml avec une structure comme puis d'implémenter le délégué de NSXMLParser qui pourrait analyser cette page xml dans un tableau. Si l'analyse est un problème faites le moi savoir. – knuku

+0

Je suis désolé, pourriez-vous faire un exemple de code? Je ne suis pas familier avec cette partie du SDK et c'est très confus. Merci! –

2

Je ne comprends pas comment cela est censé être un " anti-cracking feature ", sauf si vous envisagez d'obtenir en quelque sorte les UDID de tous les appareils d'un utilisateur qui a légalement acheté votre application via iTunes. Vous ne pouvez pas obtenir une telle liste. Et même si vous le pouvez, cela pourrait être une violation de l'accord de développement d'Apple, en particulier la section sur la confidentialité et le stockage de l'information.

Donc, en résumé:

  • Cette solution est fondamentalement et fatalement défectueux.
  • Il existe d'autres techniques anti-fissuration qui seront plus efficaces, en particulier celles qui utilisent une approche plus douce ... mais aucune ne sera parfaite. Comme le dit St3fan, votre technique nécessite une connexion Internet fonctionnelle, ce que vous ne pouvez pas toujours supposer. Dans ce cas, cette technique ne manque pas gracieusement. Dans ce cas, Apple peut rejeter votre application. Ce ne sera pas "le problème [d'Apple]" s'il échoue. C'est ton problème.
+0

Il cible la communauté Jailbreak et l'application est uniquement pour iPhone. Pouvez-vous me dire comment balayer toute la page Web? Je vous remercie. –

+0

Quelle que soit la communauté que vous ciblez, l'approche est fondamentalement erronée. Aussi: solution anti-cracking pour la communauté * jailbreak *? Es-tu sérieux? –

+0

Peu importe comment vous essayez, ** quelqu'un ** contournera votre solution. Des milliards de dollars sont dépensés chaque année sur des mesures anti-piratage par des entreprises comme Apple, Microsoft et Google - qu'est-ce qui vous fait penser que vous pouvez faire mieux? De plus, comme Shaggy l'a mentionné, l'approche ne fonctionnera tout simplement pas. Si quelqu'un qui a légitimement payé pour votre application essaie de l'utiliser hors de portée du WiFi ou n'a pas de connexion de données cellulaire, l'application va se fermer. Lorsque les applications se ferment d'elles-mêmes sur l'iPhone, les utilisateurs supposent que c'est un accident car c'est le même comportement. Les gens penseront que votre application est en panne. – Jasarien

Questions connexes