2010-10-12 33 views
13

Tôi đã thảo luận điều này với một số người bạn và chúng tôi bắt đầu tự hỏi về điều này. Ai đó có thể có quyền truy cập vào URL hoặc các giá trị khác được chứa trong mã khách quan thực tế sau khi họ mua ứng dụng của bạn không?Thông tin an toàn chứa trong mã biên dịch ứng dụng iPhone như thế nào?

Cảm giác ban đầu của chúng tôi là không, nhưng tôi tự hỏi liệu có ai ngoài kia có kiến ​​thức dứt khoát theo cách này hay cách khác không?

Tôi biết rằng các tệp .plist có sẵn.

Ví dụ có thể là những thứ như:

giá trị -URL giữ trong một chuỗi

-API khóa và giá trị bí mật

+9

Những người DRM đã cố gắng giải quyết vấn đề này cho mọi lứa tuổi, nhưng nó chỉ là "Tôi chỉ muốn thiết bị có thể đọc nó nhưng không phải mọi người đọc nó" giống như "Tôi muốn mọi người có thể đọc nó, tôi chỉ không muốn họ có thể đọc được nó ". Điều duy nhất bạn thực sự có thể làm là làm xáo trộn các chuỗi bằng cách "xáo trộn" chúng bằng một số thuật toán như rot13 hoặc có thể nâng cao hơn, nhưng nếu bạn sử dụng mã hóa thì bạn phải lưu khóa ở đâu đó trong tệp thực thi. – Nimrod

Trả lời

22

Vâng, dây và thông tin có thể dễ dàng chiết từ các ứng dụng biên soạn bằng công cụ strings (see here) và thậm chí thực sự dễ dàng để trích xuất thông tin lớp học bằng cách sử dụng class-dump-x (check here).

Chỉ cần một số thức ăn để suy nghĩ.

Chỉnh sửa: một cách dễ dàng, mặc dù không an toàn, cách giữ bí mật thông tin bí mật của bạn là làm xáo trộn hoặc cắt thành từng mảnh nhỏ.

Các mã sau đây:

NSString *string = @"Hello, World!"; 

sẽ sản xuất "Hello, World!" sử dụng công cụ strings. Viết mã của bạn như sau:

NSString *string = @"H"; 
string = [stringByAppendingString:@"el"]; 
string = [stringByAppendingString:@"lo"]; 
... 

sẽ hiển thị các ký tự được nhập, nhưng không nhất thiết phải theo thứ tự.

Một lần nữa: dễ thực hiện, nhưng không an toàn lắm.

+1

cảm ơn thông tin +1 – dredful

+5

thậm chí chỉ đề xuất bảo mật mặc dù tối tăm sẽ giúp bạn có được -1. Bạn nên nói với mọi người rằng những gì họ đang cố gắng thực hiện là một lỗ hổng. Sai hy vọng khiến mọi người bị tấn công. – rook

+0

@Rook: Đôi khi tối nghĩa là phù hợp, ví dụ: nếu bạn đang ẩn mã cheat trong một trò chơi, bất cứ điều gì an toàn hơn sẽ là quá mức cần thiết. CSONG: Nếu đó là cách bạn cảm thấy, làm thế nào bạn không downvote nó? – benzado

12

Khi bạn mua ứng dụng, nó sẽ được lưu trên đĩa cứng của bạn dưới dạng "FooBar.ipa"; tệp đó thực sự ở định dạng Zip. Bạn có thể giải nén nó và kiểm tra các nội dung, bao gồm cả việc tìm kiếm các chuỗi trong tệp thực thi. Thử nó! Giá trị không đổi trong mã của bạn không bị nén, mã hóa hoặc tranh giành theo bất kỳ cách nào.

+0

cảm ơn thông tin +1 – dredful

1

Tôi biết điều này đã được trả lời, nhưng tôi cũng muốn đưa ra đề xuất của riêng mình.

Một lần nữa, hãy nhớ rằng tất cả các kỹ thuật obfuscation không bao giờ an toàn 100%, và do đó không phải là tốt nhất, nhưng thường là "đủ tốt" (tùy thuộc vào những gì bạn muốn làm xáo trộn). Điều này có nghĩa rằng một cracker xác định sẽ có thể đọc chuỗi của bạn anyways, nhưng những kỹ thuật này có thể ngăn chặn các "cracker bình thường".

Đề xuất khác của tôi là "crypt" các chuỗi bằng XOR đơn giản. Điều này cực kỳ nhanh và không yêu cầu bất kỳ sự cho phép nào nếu bạn đang bán ứng dụng thông qua App Store (nó không rơi vào các loại thuật toán yêu cầu ủy quyền xuất chúng).

Có rất nhiều đoạn xung quanh để thực hiện một XOR trong Cocoa, xem ví dụ: http://iphonedevsdk.com/forum/iphone-sdk-development/11352-doing-an-xor-on-a-string.html

Chìa khóa bạn sử dụng có thể là bất kỳ chuỗi, có thể là một chuỗi vô nghĩa của ký tự/byte hoặc một cái gì đó có ý nghĩa để gây nhầm lẫn bạn đọc (ví dụsử dụng tên của các phương thức, chẳng hạn như "stringWithContentsOfFile: usedEncoding: error:").

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