2010-02-25 43 views
43

Tôi vừa hoàn thành một thư viện trong Objective-C mà tôi biên soạn như là một thư viện tĩnh để phân phối.Decompiling Objective-C thư viện

Tôi muốn biết cơ hội nào để có được sự giải mã này được thực hiện ở đó.

  • Bạn có biết bất kỳ phần mềm nào có thể thực hiện việc này không?
  • Nếu có, làm thế nào tôi có thể bảo vệ tôi tốt hơn?

EDIT: lib tĩnh của tôi được thực hiện cho iPhone/ARM

Tôi tạo ra một thuật toán phụ thuộc vào một số thông số của ứng dụng, nó có thể chạy như demo hoặc dưới dạng mã đầy đủ. Bạn khởi tạo đối tượng với các biến X và mở khóa phiên bản đầy đủ. Tôi đã tự hỏi nếu họ sẽ có thể xem thuật toán này để họ có thể tạo ra một máy phát điện chính.

+0

FYI, khi người dùng nhập mã để sử dụng phiên bản đầy đủ sẽ gây ra tiếng ồn cho ứng dụng iPhone.Nếu họ mua toàn bộ trò chơi từ App Store, bạn không cần nhập mã. Nếu họ mua nó bên ngoài App Store, Apple sẽ không được hạnh phúc. – Chuck

+3

Cảm ơn, tôi không có nghĩa là người dùng cuối mà là người phát triển. [[myLib alloc] initWithMySecretKey: @XXX]] –

+0

Thuật toán của bạn sẽ chạy để kiểm tra khóa; họ có thể thấy các hướng dẫn (như máy, nó cần phải biết các hướng dẫn để chạy nó), sau đó họ có thể nhìn thấy nó và phát triển một máy phát điện. – JHG

Trả lời

58

Không rõ những gì bạn đang cố bảo vệ mình từ. Có, nó có thể được đảo ngược thiết kế. Các công cụ đơn giản nhất là otool, một phần của phân phối phát triển tiêu chuẩn:

otool -tV <library> 

Từ đó họ chạy đến những thứ như IDA Pro, trong đó có hỗ trợ iPhone và rất thoải mái cho các loại hình công việc. Ở giữa, tôi thực sự ngạc nhiên rằng tôi đã không nhìn thấy một rework của otx cho iPhone/ARM được nêu ra. Tôi sẽ không ngạc nhiên khi thấy một chương trình cuối cùng. Và tất nhiên có gdb nếu bạn đang cố gắng tìm ra cách mọi thứ lưu thông và dữ liệu ở các điểm khác nhau.

Nếu bạn có thêm chi tiết về những gì bạn đang cố gắng tự bảo vệ mình, có thể có một số câu trả lời được nhắm mục tiêu. Ngoài ra, đọc nhận xét của Chuck.

+1

Cảm ơn Rob, điều này đã rất khai sáng. Tôi đã thêm thông tin về những gì tôi đang cố gắng bảo vệ. –

+2

Tôi thấy bản chỉnh sửa. Đối với câu hỏi của bạn, có, với một trình gỡ lỗi họ sẽ có thể tạo ra một máy phát điện chính. Nhưng họ sẽ không bận tâm. Họ sẽ chỉ sửa đổi nhị phân để bỏ qua kiểm tra chính. Đừng lo lắng về nó quá nhiều. Nếu thư viện của bạn phổ biến đến mức mọi người đang gặp khó khăn để tạo ra các khóa giả, thì nó đủ phổ biến đến mức bạn sẽ kiếm được nhiều tiền. Lo lắng về nó khi bạn đang lăn trong tất cả bột đó. Nếu bạn lãng phí thời gian của bạn vào obfuscation (mà sẽ không giúp nhiều), sau đó bạn sẽ không bao giờ có đủ thời gian để làm cho sản phẩm tuyệt vời mà bất cứ ai sẽ mua anyway. –

+1

Trong mọi trường hợp, tôi khuyên bạn nên xây dựng các phiên bản riêng biệt thay vì sử dụng một khóa. Khi mọi người thanh toán, hãy gửi cho họ phiên bản đầy đủ. Ít công cụ để đi sai theo cách đó, ít mã bloat, khó khăn hơn nhiều để phá vỡ bởi những người ngẫu nhiên (vì họ sẽ không có mã đầy đủ). –

5

ChanceGetsDecompiled = ExpectedGainFromBeingDecompiled/PopularityOfLibrary

Vâng, nếu bạn thực sự muốn biết tôi sẽ cố gắng dịch ngược nó tự của bạn. Bạn không nói nếu điều này là cho PPC, Intel, hoặc ARM mà làm cho một sự khác biệt. Đây là bộ giải mã cho Intel i386 Decompiler

Tôi không biết bạn có thể làm gì (tôi không nghĩ có nhiều) để hạn chế điều này. Mã luôn có thể được thiết kế ngược. Hãy vui vẻ rằng bạn không sử dụng java hoặc .net. Sự giải mã của họ thật tuyệt vời.

+0

Xin chào Jamone, cảm ơn vì bài đăng của bạn. Trên thực tế lib tôi xây dựng là dành cho iPhone SDK. –

+0

Liên kết được cung cấp bị hỏng –

+0

Liên kết được cập nhật: http://www.ohloh.net/p/i386codedump –

80

Nếu nó thực hiện, nó có thể được giải mã. Mục tiêu-C đặc biệt dễ dàng để dịch ngược thành mã có thể đọc được nhờ vào các tính năng động của nó. Nếu bạn muốn làm cho mọi thứ khó hơn một chút, bạn có thể viết hầu hết mã của mình ở dạng C thuần túy và loại bỏ tệp thực thi - điều này tất nhiên có sự cân bằng làm cho thiết kế ứng dụng của bạn khó quản lý hơn. Nhưng hãy trung thực với chính mình: Nếu ai đó muốn crack mã của bạn, bạn sẽ không thể ngăn họ lại được. Bánh quy có thực tế không giới hạn số lượng thời gian và sự nhiệt tình và thực sự sẽ được vui mừng bởi bất kỳ nỗ lực tiểu thuyết bạn đặt vào để ngăn chặn chúng. Chưa có ai tạo ra phần mềm không thể ngăn cản được, và các tập đoàn lớn nhất trên thế giới đã thử. Bạn sẽ không làm tốt hơn họ, đặc biệt là nếu bạn cần hỏi về nó trên Stack Overflow.

Dành thời gian mà bạn sẽ đặt vào việc giải mã ngược và sử dụng nó để làm cho sản phẩm của bạn tốt hơn - điều đó sẽ có ROI tốt hơn nhiều.

+72

'Bạn sẽ không làm tốt hơn chúng, đặc biệt nếu bạn cần hỏi về nó trên Stack Overflow.' - Lol ... – Rodrigo

+4

"và thực sự sẽ được kích thích bởi bất kỳ nỗ lực tiểu thuyết nào bạn đặt vào để ngăn chặn chúng" Lol ... Vâng đặt. – theKRAY

+0

Bạn có thể vui lòng cho tôi biết bất kỳ công cụ hoặc cách nào hữu ích cho việc biên dịch thư viện ios. tôi trích xuất tập tin đối tượng nhưng điều đó không hữu ích vì nó là nhị phân. tôi muốn mã nguồn từ thư viện tĩnh. ar -xv MyLib.a MyObj.o lệnh này chỉ cung cấp tệp nhị phân. làm thế nào tôi có thể trích xuất tập tin lớp học từ đó. –