Warfans
Benvenuti!!!!! Warfans è il forum più completo che riguarda computer e giochi di qualsiasi tipo!!!! ! Che aspettate? Iscrivetevi ed entrerete nella nostra community

1- L'utente continuando la navigazione nel sito dichiara di aver letto attentamente il Regolamento.
2- Tutti i nuovi Utenti sono pregati di presentarsi nella sezione Presentazioni.
3- Lo Staff cerca: Moderatori, Coder, Graphic. Se vi interessa scrivete il Curriculum nella sezione Zona Reclutamento.
Warfans
Benvenuti!!!!! Warfans è il forum più completo che riguarda computer e giochi di qualsiasi tipo!!!! ! Che aspettate? Iscrivetevi ed entrerete nella nostra community

1- L'utente continuando la navigazione nel sito dichiara di aver letto attentamente il Regolamento.
2- Tutti i nuovi Utenti sono pregati di presentarsi nella sezione Presentazioni.
3- Lo Staff cerca: Moderatori, Coder, Graphic. Se vi interessa scrivete il Curriculum nella sezione Zona Reclutamento.
Warfans
Vuoi reagire a questo messaggio? Crea un account in pochi click o accedi per continuare.

Warfans

La nuova frontiera dei videogiochi
 
IndiceHomeUltime immaginiRegistratiAccedi
E' obbligatorio presentarsi nella sezione "presentazioni" prima di formulare una richiesta!!!!

 

 AntiCrack come proteggere le vostre applicazioni per iPhone e trarne guadagno

Andare in basso 
AutoreMessaggio
o0legolas0o
Vice Admin
Vice Admin
o0legolas0o


Numero di messaggi : 2683
Età : 29
Località : dintorni di napoli

AntiCrack come proteggere le vostre applicazioni per iPhone e trarne guadagno Empty
MessaggioTitolo: AntiCrack come proteggere le vostre applicazioni per iPhone e trarne guadagno   AntiCrack come proteggere le vostre applicazioni per iPhone e trarne guadagno Icon_minitimeSab 23 Ott 2010, 09:37

Introduzione:

L'AppStore e' diventato di recente meta di molti programmatori che come il sottoscritto, cercano di creare qualcosa che possa piacere agli utenti dei melafonini e di ricavarne guadagno. Durante il recente sviluppo della mia applicazione 3D Tunnel mi sono trovato di fronte al problema comune dei crackers e dei vari siti come appulo.us che prendono le ultime releases dall'appstore ufficiale, tolgono le misure di sicurezza e autenticazione delle apps e le rimettono online gratuitamente, a disposizione di chiunque abbia un melafonino jailbreakato.

Il problema:

Ogni persona che scarica l'applicazione gratuitamente e' ovviamente una potenziale perdita di guadagno per noi programmatori, oltre che ad essere la seccatura personale di vedere i propri mesi di lavoro disponibili gratuitamente per colpa di qualche ragazzino 13enne (crackare le apps e' un'operazione che richiede approssimativamente 5 minuti, con gli strumenti necessari). Apple da parte sua non sembra sforzarsi piu' di troppo per impedire tutto questo, quindi dobbiamo trovare il modo di arrangiarci.

La soluzione:

Fortunatamente ci sono persone come Oliver Drobnik che si sono gia' messe all'opera tempo fa per trovare un modo per proteggersi da questo inconveniente. Ho implementato l'idea di Oliver (che spieghero' tra un secondo) nel mio 3D Tunnel perche' l'ho ritenuta favolosa e meritevole di nota su pierotofy.it.

Partiamo dal presupposto che una protezione software sicura al 100% non esiste (perche' lo sappiamo bene che un reverser abbastanza bravo, con il tempo necessario, riuscira' sempre a trovare un modo per sbloccare le nostre protezioni) e che quando un'applicazione viene crackata e inserita nei vari siti per il download essa riceve un gran numero di downloads (il mio 3D Tunnel penso sia stato scaricato un migliaio di volte in meno di una settimana). La domanda che dobbiamo porgi e' questa: come possiamo sfruttare il fatto che la nostra protezione verra' crackata in un modo o nell'altro e che l'applicazione ricevera' molta visibilita'?

Oliver risponde alla domanda con il semplice concetto di Silent Lite (demo silenziosa). Esistono vari modi per verificare se l'applicazione e' stata crackata o meno. Un breve esempio lo trovate qui.

Codice:
01.
#if HEARTBEAT_CHECK_PIRACY
02.
+ (BOOL)isCracked {
03.
 
04.
#if TARGET_IPHONE_SIMULATOR
05.
return NO;
06.
#else
07.
static BOOL isCracked = NO;
08.
static BOOL didCheck = NO;
09.
if(didCheck) return isCracked;
10.
 
11.
#if HEARTBEAT_PIRACY_THRESHOLD >= 1
12.
if([[[NSBundle mainBundle] infoDictionary] objectForKey:@"SignerIdentity"] != nil) {
13.
#if HEARTBEAT_PIRACY_THRESHOLD >= 2
14.
NSString* infoPath = [[NSBundle mainBundle] pathForResource:@"Info" ofType:@"plist"];
15.
if([[NSString stringWithContentsOfFile:infoPath encoding:NSUTF8StringEncoding error:NULL] rangeOfString:@""].location != NSNotFound)
16.
{
17.
#if HEARTBEAT_PIRACY_THRESHOLD >= 3
18.
NSDate* infoModifiedDate = [[[NSFileManager defaultManager] fileAttributesAtPath:infoPath traverseLink:YES] fileModificationDate];
19.
NSDate* pkgInfoModifiedDate = [[[NSFileManager defaultManager] fileAttributesAtPath:[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"PkgInfo"] traverseLink:YES] fileModificationDate];
20.
if([infoModifiedDate timeIntervalSinceReferenceDate] > [pkgInfoModifiedDate timeIntervalSinceReferenceDate]) {     
21.
#endif
22.
#endif
23.
isCracked = YES;
24.
#if HEARTBEAT_PIRACY_THRESHOLD >= 2
25.
#if HEARTBEAT_PIRACY_THRESHOLD >= 3
26.
}
27.
#endif
28.
}
29.
#endif
30.

31.
#endif
32.
 
33.
didCheck = YES;
34.
 
35.
return isCracked;
36.
#endif
37.
}
38.
#endif

Oppure potete fare una donazione ad Oliver tra i 30 e i 100 euro e lui vi inviera' i sorgenti del suo AntiCrack, che oltre ad includere un modo per controllare se il codice e' crackato o meno rendera' la vita molto difficile ai crackers grazie ad una serie di protezioni aggiuntive (piu' informazioni sono sul suo sito in lingua inglese).

Una volta che avete a disposizione un modo per vedere se la vostra applicazione e' stata compromessa, cosa si fa? I meno esperti sicuramente penseranno di visualizzare un messaggio del tipo "Applicazione non valida perche' crackata" e di chiudere l'app. SBAGLIATO!

Cosi' facendo il cracker si accorgera' che state usando un metodo di protezione e impieghera' ulteriore tempo per rompere la vostra protezione! E noi sappiamo che con un po' di tempo a disposizione, probabilmente ci riuscira'.

Invece noi siamo piu' furbi. Noi vogliamo che la nostra applicazione venga inserita senza difficolta' nei canali illegali della pirateria, ma vogliamo che essa resti vigile di chi ha realmente acquistato l'applicazione e chi no. Perche' al momento giusto, possiamo decidere di far diventare tutte le copie illegalmente scaricate delle versioni demo o addirittura obbligare gli utenti che hanno scaricato illegalmente la nostra app ad acquistare la versione ufficiale!

E come?

Ho scritto una piccola classe nel mio 3D Tunnel che voglio condividere con voi. Questa classe si occupa di creare un file nella directory del gioco che tiene traccia di quanti giorni sono passati dalla prima esecuzione dell'app. E se sono passati piu' di 5 giorni, il metodo timeToSetLiteVersionOn ritorna true, consentendoci di cambiare il comportamento dell'applicazione. Perche' 5 giorni? Perche' il cracker non deve accorgersi che sta inviando ai vari siti un'applicazione Lite, e trovo che 5 giorni siano un tempo sufficiente per raggiungere questo obiettivo. Se infatti si dovesse accorgere del trucco, non invierebbe l'applicazione e non potremmo mai avere la nostra enorme pubblicita' gratuita.

Ma ecco il codice. Usatelo liberamente per le vostre applicazioni commerciali e non, e se trovate un modo per salvare le informazioni in maniera persistente nell'iPhone (ora eliminando il gioco e ricaricandolo dara' all'utente altri 5 giorni di versione completa, anche se non e' un gran problema visto che la percentuale di persone che capira' questo trucco e' probabilmente molto bassa) per favore fatemelo sapere. Scusate se non ho curato molto il design:

Time Checker.h
Codice:
01.
//
02.
//  TimeChecker.h
03.
//  3DTunnel
04.
//
05.
//  Created by Piero Toffanin on 10/13/09.
06.
//
07.
 
08.
#import
09.
 
10.
 
11.
@interface TimeChecker : NSObject {
12.
NSDate *firstExecutionDate;
13.
}
14.
-(BOOL)timeToSetLiteVersionOn;
15.
+(NSString *)getWorkingTimeCheckerPath;
16.
- (BOOL)dateGreaterThan:(NSDate *)aDate Date:(NSDate *)bDate;
17.
@end
Time Checker.m
Codice:
01.
//
02.
//  TimeChecker.m
03.
//  3DTunnel
04.
//
05.
//  Created by Piero Toffanin on 10/13/09.
06.
//
07.
 
08.
#import "TimeChecker.h"
09.
 
10.
@implementation TimeChecker
11.
 
12.
-(id)init{
13.
if (self = [super init]) {
14.
firstExecutionDate = nil;
15.
 
16.
NSData *data = [NSData dataWithContentsOfFile:[TimeChecker getWorkingTimeCheckerPath]];
17.
if (data != nil){
18.
//We have a countdown going on! haha
19.
firstExecutionDate = [NSKeyedUnarchiver unarchiveObjectWithData:data];
20.
//NSLog(@"Restore: %@",firstExecutionDate);
21.
}else{
22.
//First timer, let's start countdown
23.
firstExecutionDate = [NSDate date];
24.
data = [NSKeyedArchiver archivedDataWithRootObject: firstExecutionDate];
25.
[data writeToFile:[TimeChecker getWorkingTimeCheckerPath] atomically:YES];
26.
//NSLog(@"Wrote today's date");
27.
}
28.
 
29.
}
30.
return self;
31.
}
32.
- (BOOL)dateGreaterThan:(NSDate *)aDate Date:(NSDate *)bDate {
33.
BOOL result = NO;
34.
if([aDate compare:bDate] == NSOrderedDescending) result = YES;
35.
return result;
36.
}
37.
-(BOOL)timeToSetLiteVersionOn{
38.
int daysToAdd = 5; //After 5 days... DEMO!
39.
NSDate *expirationDate = [firstExecutionDate addTimeInterval:60*60*24*daysToAdd];
40.
NSDate *today = [NSDate date];
41.
if ([self dateGreaterThan:today Date:expirationDate]){
42.
 
43.
//Makes sure that they don't pull back the clock and still make it work.. :)
44.
firstExecutionDate = [NSDate dateWithTimeIntervalSince1970:0];
45.
NSData *data = [NSKeyedArchiver archivedDataWithRootObject: firstExecutionDate];
46.
[data writeToFile:[TimeChecker getWorkingTimeCheckerPath] atomically:YES];
47.
 
48.
//Return
49.
return YES;
50.
}
51.
return NO;
52.

53.
+(NSString *)getWorkingTimeCheckerPath{
54.
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES);
55.
 
56.
return [[paths objectAtIndex:0] stringByAppendingPathComponent:@"highscores.plist"]; //LOL in fact we save the expiration date for crackers
57.
}
58.
 
59.
@end

Vostro modulo principale con il codice di inizializzazione:
Codice:
01.
if (isCracked()){
02.
NSLog(@"Loaded :)");
03.
 
04.
TimeChecker *tc = [[TimeChecker alloc] init];
05.
if ([tc timeToSetLiteVersionOn]){
06.
LITE = YES;
07.
}
08.
[tc release];
09.
}else {
10.
NSLog(@"Loaded");
11.
}

Conclusione

La pirateria delle applicazioni per l'iPhone non dev'essere per forza un male. Usando un po' di furbizia, noi sviluppatori possiamo usufruire di essa per farci un po' di pubblicita' gratuita a basso costo. Nelle domande frequenti di Appulo.us dicono che il sito esiste perche' manca un sistema che permetta agli utenti di provare le applicazioni prima di comprarle dall'iTunes store. Ebbene, anche se i gestori di appulo mancano proprio di etica perche' sono presenti cracks per applicazioni dove esistono versioni Lite, con quest'articolo spero di aver dato agli sviluppatori iPhone come me un buon modo per far rispettare questa premessa: volete provare la mia app? Liberi di farlo. Ma dopo 5 giorni... pagate o niente. Smile

Fonte: PieroTofy
Torna in alto Andare in basso
https://warfans.forumattivo.com/forum.htm
 
AntiCrack come proteggere le vostre applicazioni per iPhone e trarne guadagno
Torna in alto 
Pagina 1 di 1

Permessi in questa sezione del forum:Non puoi rispondere agli argomenti in questo forum.
Warfans :: Svago & Discussioni :: Giornale del Forum-
Vai verso: