2013-04-09 28 views
5

Tôi đang viết một cơ chế (trong một ứng dụng iOS) để phát hiện xem thiết bị có được bẻ khóa hay không bằng cách kiểm tra tính toàn vẹn của hộp cát ứng dụng bằng cách thực hiện fork();. Có ai biết nếu thực hiện cuộc gọi này có vi phạm nguyên tắc của App Store không?Sẽ ngã ba() trong ứng dụng iOS có thể bị từ chối bởi quá trình kiểm tra của Apple?

+0

Đã một thời gian kể từ khi bạn hỏi điều này. Bạn có thể tải ứng dụng vào cửa hàng bằng 'fork()' không? Tôi tò mò. – mpontillo

+0

Tôi cũng muốn biết - Tôi có một ứng dụng là một trình bao bọc xung quanh tiện ích Unix cmdline và sẽ dễ dàng hơn nếu tôi có thể 'fork()' và sau đó gọi hàm 'main()' của tiện ích đó chạy nó trong một thread [tiện ích có nhiều nơi nó có thể gọi là 'exit()' để một quá trình chia nhỏ sẽ tốt hơn một thread] – Alnitak

Trả lời

4

Bạn không thể tạo quy trình mới trong ứng dụng iOS trên thiết bị không được bẻ khóa (bạn sẽ gặp lỗi như "Thao tác không được phép") nhưng bạn có thể tạo chuỗi mới bằng thư viện pthread.

Chỉnh sửa: Nhưng nếu bạn đang cố gắng phát hiện xem thiết bị có bị bẻ khóa hay không, tôi không nghĩ điều đó sẽ vi phạm nguyên tắc của cửa hàng chỉ để 'thử' để thực hiện một ngã ba, nhưng đó là một câu hỏi pháp lý hơn là kỹ thuật câu hỏi.

Tôi không tìm thấy gì trong hướng dẫn của cửa hàng ứng dụng cấm sử dụng một số API cấp thấp. Đó là hợp lý, kể từ khi jailbreak không tồn tại, những gì họ sẽ cấm bạn làm một cái gì đó mà bạn không thể làm gì?

Những điều gần nhất tôi thấy là:

  • Apps mà đọc hoặc ghi dữ liệu bên ngoài khu vực chứa thiết kế của nó sẽ bị từ chối
  • Apps tải mã trong bất kỳ cách nào hoặc hình thức sẽ bị từ chối
  • Apps cài đặt hoặc khởi chạy mã thực thi khác sẽ bị từ chối
+2

Bạn thực sự sẽ nhận được mã trả về '-1' nếu bạn gọi' fork () 'trên thiết bị iOS thông thường. (và có thể một cái gì đó như 'Tue Apr 9 03:06:41 chưa biết sandboxd [84] : HelloWorld (80) từ chối xử lý-ngã ba' trong nhật ký của bạn) OP chắc chắn muốn gọi điều này đơn giản để xem nó có hoạt động hay không. – Nate

+0

Có, tôi đã hiểu nhầm câu hỏi lúc đầu, đó là lý do tại sao tôi đã chỉnh sửa câu trả lời của mình. – zakinster

+0

@Nate Cảm ơn bạn đã chỉnh sửa – Ocelot

0

fork(2) có thể khiến bạn bị từ chối. Nếu mục đích của bạn là kiểm tra xem thiết bị đã được bẻ khóa chưa, bạn có thể kiểm tra sự tồn tại của APT.

Từ kinh nghiệm của tôi, một ứng dụng cố gắng kiểm tra xem thư mục có tồn tại ở số /private/{etc,var}/apt hay không.

+0

câu hỏi không yêu cầu giải pháp thay thế. – Ocelot

5

ngã ba() (và khác) sẽ không khiến bạn bị từ chối; các hoạt động bị từ chối bởi hệ điều hành vanilla không thể được sao chép trong khi gửi. Tôi có các ứng dụng trên appstore sử dụng fork() và system() gọi để kiểm tra môi trường jailbreak và không ai trong số họ bị từ chối vì điều này :)

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