2011-08-19 8 views
10

Powszechnym exploitem w zwykłych grach jest sztuczny postęp zegara systemowego, który przyspiesza rozgrywkę. W jaki sposób można wykryć takie postępy zegara użytkownika przez aplikację na urządzeniu z systemem iOS?Jak mogę lokalnie wykryć postęp zegara iPhone'a przez użytkownika między uruchomieniami aplikacji?

  • nie może obejmować komunikacja sieciowa
  • nie musi przyjąć aplikacja jest otwarta (działa lub zawiesza się), podczas gdy zegar jest zaawansowany
  • musi wykryć postęp zegara, wykrywanie zegara wycofywania nie wystarcza

Idealnie , rozwiązanie byłoby odporne na restart, ale nie jest to wymagane.

+1

Nie myśl, że można to zrobić bez komunikacji sieciowej. Odbiornik GPS "mógł" to zrobić, ale wydaje mi się, że nie ujawnia on żadnych rzeczy w API. – iandotkelly

Odpowiedz

1

Myślałem o tym, że rzeczy z CoreLocation mogą to zrobić, jeśli ta część danych GPS byłaby dla ciebie widoczna. Jednak to mnie zmusiło do myślenia.

Moja jedyna (daleko idąca) sugestia polega na umieszczeniu czegoś w przetwarzaniu w tle - które musi być z jednego z kilku określonych powodów, na przykład w celu śledzenia lokalizacji w tle. Jako efekt uboczny tego, spróbuj wykryć zmianę zegara na zwykłym zegarze. Apple może je odrzucić, ponieważ może być jasne, że nie wykorzystuje informacji o lokalizacji i jest tylko powodem do wykorzystania przetwarzania w tle.

Każde rozwiązanie, które nie wymaga pracy w sieci, jest trudniejsze do implementacji, ponieważ jest ono trudniejsze do implementacji. Zastanawiam się, dlaczego go nie używasz.

11
+1

mach_absolute_time resetuje się po ponownym uruchomieniu urządzenia. Jest ok, jeśli użytkownik omija wykrywanie przez ponowne uruchomienie, ale nie jest dobrze, jeśli ponowne uruchomienie jest niepoprawnie oznaczane jako zaawansowane zegary. –

+0

Ponadto, w oparciu o ładny post na blogu Bena Dodsona, http://bendodson.com/weblog/2013/01/29/ca-current-media-time/, nie zadziałałoby, gdyby urządzenie poszło spać dla niektórych czas pomiędzy odtworzeniami, ponieważ wydaje się, że CACurrentMediaTime (a zatem mach_absolute_time, ponieważ jest na nim oparty?), liczy tylko aktywny czas urządzenia, a nie czas działania. – stuckj

0

Chociaż nie sądzę, że to możliwe, aby wiarygodnie określić, czy dany użytkownik ma ręcznie obrócili swój zegar do przodu bez dostępu do sieci, można oczywiście niezawodnie ustalić, czy cofnęli się w czasie. A ponieważ wiemy, że jest to fizycznie niemożliwe, można założyć, że zmanipulowali swój zegar, aby oszukiwać.

Co mam na myśli, to nie jest zwykły proces, który uruchamia działanie w aplikacji, które wymaga dłuższego czekania, wyjścia z aplikacji i obrócenia zegara do przodu, ponownego uruchomienia aplikacji, aby uzyskać wszystko, co było. czekasz, a następnie resetujesz zegar do aktualnego czasu?

Jeśli tak jest rzeczywiście, to w oparciu o sugestię @smgambel można zapisać fizyczny czas i bieżącą strefę czasową przy każdym uruchomieniu i porównać z wcześniej zapisaną strefą czasową i czasową.Jeśli czas jest za wcześniej zapisany czas, a strefa czasowa urządzenia nie uległa zmianie, można bezpiecznie założyć, że użytkownik manipulował zegarem.

Powiązane problemy