2011-08-19 22 views
10

Một sự khai thác phổ biến trong trò chơi thông thường là tăng giả tạo đồng hồ hệ thống để nhảy trước trong trò chơi. Sự phát triển đồng hồ người dùng như vậy có thể được phát hiện bởi một ứng dụng trên thiết bị iOS như thế nào?Làm cách nào để phát hiện đồng bộ hóa iPhone đồng hồ của người dùng giữa các lần chạy ứng dụng?

  • Phải không liên quan đến giao tiếp mạng
  • Không được giả định ứng dụng đang mở (chạy hoặc treo) trong khi đồng hồ là tiên tiến
  • Phải phát hiện tiến bộ đồng hồ, phát hiện đồng hồ rollback là chưa đủ

Lý tưởng nhất , giải pháp sẽ mạnh mẽ khi khởi động lại, nhưng đó không phải là yêu cầu.

+1

Đừng nghĩ rằng nó có thể được thực hiện mà không cần giao tiếp mạng. Máy thu GPS 'có thể' làm điều này, nhưng tôi không nghĩ rằng nó phơi bày bất kỳ thứ gì trong API. – iandotkelly

Trả lời

1

Tôi đã suy nghĩ về thực tế rằng các công cụ CoreLocation có thể làm điều này nếu một phần dữ liệu GPS được tiếp xúc với bạn. Tuy nhiên điều đó khiến tôi suy nghĩ.

Đề xuất duy nhất (được tìm nạp nhiều) của tôi là đưa một thứ gì đó vào xử lý nền - đó phải là một trong những lý do cụ thể nhỏ, ví dụ như theo dõi vị trí trong nền. Như là một tác dụng phụ của điều đó, cố gắng phát hiện một sự thay đổi đồng hồ trên một bộ đếm thời gian thông thường. Apple có thể từ chối nó vì nó có thể được rõ ràng rằng nó không sử dụng thông tin vị trí và nó chỉ là một lý do để khai thác xử lý nền.

Bất kỳ giải pháp nào không liên quan đến mạng là vì vậy khó thực hiện hơn, tôi tự hỏi tại sao bạn không sử dụng nó.

11
+1

reset reset mach_absolute_time khi khởi động lại thiết bị. Nó là ok nếu một người dùng circumvents phát hiện gian lận bằng cách khởi động lại, nhưng nó không phải là ok nếu khởi động lại không chính xác cờ chúng như có tiên tiến đồng hồ. –

+0

Ngoài ra, dựa trên bài đăng blog đẹp của Ben Dodson ở đây, http://bendodson.com/weblog/2013/01/29/ca-current-media-time/, điều này sẽ không hoạt động nếu thiết bị chuyển sang chế độ ngủ cho một số thời gian giữa các lượt chơi kể từ khi nó xuất hiện CACurrentMediaTime (và do đó mach_absolute_time kể từ khi nó dựa trên nó?) chỉ đếm thời gian thiết bị hoạt động không phải là thời gian hoạt động. – stuckj

0

Trong khi tôi không nghĩ rằng nó có thể đáng tin cậy xác định có hay không một người dùng có tay quay đồng hồ của họ về phía trước mà không cần truy cập mạng, tất nhiên bạn có thể xác định một cách đáng tin cậy nếu họ đã quay ngược thời gian. Và vì chúng ta biết điều này là không thể về mặt vật lý nên có thể cho rằng họ đã thao túng đồng hồ của họ để lừa gạt. Ý tôi là, đây không phải là quy trình thông thường để kích hoạt một số hành động trong ứng dụng đòi hỏi thời gian chờ đợi, thoát khỏi ứng dụng và xoay đồng hồ về phía trước, khởi chạy lại ứng dụng để đạt được bất kỳ thứ gì chờ đợi và sau đó thiết lập lại đồng hồ trở lại thời gian thực tế?

Nếu đây thực sự là trường hợp, sau đó để xây dựng theo đề xuất của @smgambel, bạn có thể lưu trữ thời gian thực và múi giờ hiện tại trên mỗi lần khởi chạy và so sánh với thời gian và múi giờ được lưu trước đó.Nếu thời gian là sau thời gian đã lưu trước đó và múi giờ của thiết bị không thay đổi thì bạn có thể giả định một cách an toàn người dùng đã thao tác đồng hồ.

Các vấn đề liên quan