システムでいくつかの健全性チェックを実行して、ユーザーが手動で時計を過去に戻したかどうかを確認できます。
(悪意を持って) ユーザー ファイルを削除するという計画は、一般的には良いアイデアだとはまだ思わないことに注意してください。
..しかし、好奇心から: これはすべてのファイルをチェックインし、それらのいくつかが将来変更されたかどうかを返すスニペットです(= システムは "過去に/var/log
"実行されている可能性が非常に高いです)
- (bool)isFakeSystemTime
{
int futureFileCount = 0;
// let's check against 1 day from now in the future to be safe
NSTimeInterval secondsPerDay = 24 * 60 * 60;
NSDate *tomorrow = [[[NSDate alloc] initWithTimeIntervalSinceNow:secondsPerDay] autorelease];
NSString *directoryPath = @"/var/log";
NSArray *filesInDirectory = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:directoryPath error:nil];
for (NSString* fileName in filesInDirectory)
{
NSDictionary *attributes = [[NSFileManager defaultManager] attributesOfItemAtPath:[directoryPath stringByAppendingPathComponent:fileName] error:nil];
NSDate *date = [attributes valueForKey:@"NSFileModificationDate"];
if (!date)
continue;
if ([date compare:tomorrow] == NSOrderedDescending)
{
NSLog(@"File '%@' modified >=1 day in the future", fileName);
futureFileCount++;
}
}
// again, some heuristic to be (more) on the safe side
return futureFileCount > 5;
}