2009-05-24 33 views
8

Tôi đang cố gắng đặt mã chống vi phạm bản quyền trong ứng dụng của mình. Câu trả lời trước cho điều này (mà tôi không thể liên kết đến vì trạng thái thành viên của tôi - sucks) có thể dễ dàng bị phản đối, vì chuỗi "SignerIdentity" có thể được tìm kiếm và được thay thế bằng nhị phân bằng trình soạn thảo hex. Thay vào đó, kiểm tra tập tinSize của tập tin info.plist và so sánh nó với một giá trị tham khảo âm thanh vững chắc hơn (kể từ khi info.plist được sửa đổi ở đây và ở đó khi bẻ khóa ứng dụng). Tôi sẽ làm như thế nào? Tôi đã thử các sau đây nhưng nó có thể ghi 0.Nhận tệpSize of info.plist để ngăn vi phạm bản quyền

NSBundle *bundle = [NSBundle mainBundle]; 
NSDictionary *mainDictionary = [bundle infoDictionary]; 
NSLog(@"%d", [mainDictionary fileSize]); 

Trả lời

7

Bạn có thể ngăn chặn các bánh noobish từ việc tìm kiếm tài liệu tham khảo để "SignerIdentity" trong mã của bạn bằng cách áp dụng ROT13 hay một thuật toán đơn giản lu mờ tương tự http://en.wikipedia.org/wiki/ROT13

Sau khi áp dụng ROT13 , "SignerIdentity" sẽ trở thành "FvtareVqragvgl".

Dù sao, câu trả lời cho câu hỏi của bạn (làm thế nào bạn có được kích thước của file Info.plist):

NSBundle *bundle = [NSBundle mainBundle]; 
NSString* bundlePath = [bundle bundlePath]; 

NSFileManager *fileManager = [NSFileManager defaultManager]; 

NSString* path = [NSString stringWithFormat:@"%@/Info.plist", bundlePath ]; 

NSDictionary *fileAttributes = [fileManager attributesOfItemAtPath:path 
                  error:NULL]; 

if (fileAttributes != nil) { 
    NSNumber *fileSize; 

    if (fileSize = [fileAttributes objectForKey:NSFileSize]) { 
     NSLog(@"File size: %qi\n", [fileSize unsignedLongLongValue]); 
    }   
} 

Cũng nên nhớ rằng kích thước (tính theo byte) của Info.plist trong dự án Xcode của bạn thư mục và Info.plist bên trong gói có thể khác nhau. Bạn có thể muốn xây dựng trò chơi một lần, sau đó nhìn vào kích thước của <your app bundle.app>/Info.plist và sau đó cập nhật mã chống độc quyền của bạn.

+0

Điều đó là cướp biển có thể thay đổi chuỗi "FvtareVqragvgl" đó thành một chuỗi khác và điều đó sẽ kiểm tra một khóa khác trong info.plist .. có thể sẽ không có giá trị. Thuộc tính filesize được so sánh với một int nên thật sự không có cách nào dễ dàng để tìm nó trong binary. – samvermette

+0

Cảm ơn bạn đã trả lời! Cập nhật – samvermette

+0

: bây giờ // \t NSDictionary * fileAttributes = [tệpManager fileAttributesAtPath: pathP traverseLink: YES]; không được dùng nữa ... sử dụng: -> ... \t NSDictionary * fileAttributes = [tệpManager attributesOfItemAtPath: pathP error: NULL]; ... thay vì – meronix

5

Tôi chưa bao giờ được lập trình cho iPhone, nhưng bạn không thể lấy một mã băm của tệp đó và so sánh nó với tham chiếu, có thể làm giảm giá trị băm để ngăn người khác thay đổi băm tham chiếu sang giá trị mới?

2

mã đó vẫn còn nhiều quà tặng:

Chuỗi Info.plist rất dễ tìm. NSFileSize cũng rất đáng ngờ ....

2

Như đã nói ở đây Determining if an iPhone is Jail broken Programmatically có vẻ như một số ứng dụng bị nứt gần đây nhất được cài đặt qua install0us không có info.plist được sửa đổi. (ít nhất là info.plist không chứa bất kỳ khóa signeridentity nào). Làm thế nào chúng ta có thể phát hiện vết nứt trong trường hợp này?

+0

bạn có cố gắng so sánh 2 kích thước tệp info.plist không? – samvermette

+0

Không, nhưng tôi có thể đưa ra bất kỳ giả thiết nào về kích thước của info.plist khi tải xuống từ appstore bởi người dùng iPhone không? Nó sẽ giống như khi tôi tải nó lên appStore (thông qua iTunes Connect)? Thực tế là tệp này đôi khi trong xml, đôi khi dưới dạng nhị phân không cho tôi hình ảnh rõ ràng về toàn bộ luồng cho tệp này:/ – yonel

+0

Tệp được kích hoạt sẽ là tệp trong gói .app của bản dựng phân phối của bạn. Tôi không chắc chắn rằng Apple sẽ thay đổi một cái gì đó trong tệp info.plist sau khi bạn gửi ứng dụng của mình ... – samvermette

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