Những lợi thế của mã phát hành obfuscating là gì?


12

Ví dụ cụ thể mà tôi có trong đầu liên quan đến trò chơi Minecraft hiện tại, nhưng đây là một câu hỏi chung mà tôi nghĩ đảm bảo một số cuộc trò chuyện.

Minecraft được viết bằng Java và dấu vết ngăn xếp thường trông như thế này (ví dụ thực tế):

java.lang.NullPointerException
    at d.a(SourceFile:247)
    at gi.b(SourceFile:92)
    at bd.a(SourceFile:33)
    at bn.a(SourceFile:69)
    at bn.e(SourceFile:115)
    at bn.d(SourceFile:103)
    at net.minecraft.client.Minecraft.i(SourceFile:1007)
    at net.minecraft.client.Minecraft.run(SourceFile:596)
    at java.lang.Thread.run(Unknown Source)

Rõ ràng đây không phải là tên gói và phương thức thực sự mà nhà phát triển sử dụng khi anh ta viết. Vì anh ta đang ở giai đoạn alpha, nên có vẻ như nhà phát triển muốn có thể hiểu được dấu vết ngăn xếp của anh ta, đặc biệt là nếu ai đó có thể cung cấp một báo cáo lỗi. Như thế này, nó hầu như vô nghĩa.

Lợi thế nào người ta có thể hy vọng đạt được bằng cách làm xáo trộn mã của mình như thế này để khắc phục nhược điểm của việc xác định lỗi khó khăn hơn?


1
Nói một cách đơn giản, obfuscation thay đổi tính kinh tế của kỹ thuật đảo ngược mã của bạn, không có gì hơn.
Đánh dấu gian hàng

Câu trả lời:


22

Chúng tôi làm xáo trộn mã Java của chúng tôi quá ....

Ưu điểm là nó làm cho kỹ sư đảo ngược khó khăn hơn (nếu bạn lo lắng về việc ai đó đánh cắp cơ sở mã của bạn và sử dụng nó làm cơ sở để tạo ra một sản phẩm cạnh tranh tương tự, ví dụ, v.v.).

Bạn có thể lấy lại dấu vết ngăn xếp ban đầu: có các công cụ obfuscation ngoài đó tạo ra các tệp tham chiếu đặc biệt mà bạn có thể sử dụng để chạy dấu vết ngăn xếp bị che khuất thông qua, và nó đi ra với dấu vết ngăn xếp nguồn gốc. Chúng được tạo bởi chính quá trình obfuscation, vì vậy bạn không thể lấy lại dấu vết ngăn xếp ban đầu trừ khi bạn có trong tay tệp tham chiếu mà bạn đã sử dụng để làm xáo trộn mã ở vị trí đầu tiên.

Điều này không có nhược điểm thực sự. :)


3
Thật thú vị, tôi không bao giờ biết rằng họ đi kèm với "stack track unfuscation" (chưa bao giờ sử dụng obfuscator) ... thật là một ý tưởng gọn gàng :-)
Dean Harding

1
Hạn chế duy nhất mà tôi từng gặp phải đôi khi là một obfuscator (một .NET trong trường hợp này) đã che giấu nó đến mức mà jitter thậm chí không thể đọc được nó (hướng dẫn bất hợp pháp). Thất bại lớn.
vcsjones

@vcsjones: Điều đó không thực sự gây khó chịu sau đó ...
cấu hình

3
  • bảo vệ bạn sở hữu trí tuệ

Hầu hết các obfuscator cũng tối ưu hóa mã của bạn , loại bỏ siêu dữ liệu không đáng tin cậy hoặc mã không được sử dụng, nén, loại bỏ mã chết hoặc loại bỏ trùng lặp.


Nếu người ta phải sử dụng một obfuscator để tối ưu hóa như vậy, trình biên dịch đang sử dụng phải là một phần mềm thực sự lười biếng.
phresnel

@phresnel: Có obfuscator có thể làm một công việc khá tốt

@phresnel: không đầy đủ, có thể, nhưng crappy ...

Bạn đúng rồi. Hãy để tôi đăng lại.
phresnel

1
Không phải là tôi không tin bạn; Tôi làm! Nhưng tất cả những tối ưu hóa đó thường được thực hiện bởi các trình biên dịch hiện đại. Ít nhất tôi biết gcc có tất cả. Vì vậy, ý kiến ​​của tôi là: Nếu một obfuscator thực sự mang lại cho bạn một tốc độ đáng kể, thì trình biên dịch [nhà cung cấp] đã không cố gắng hết sức, hoặc nó không được đưa ra các cờ tối ưu hóa phù hợp.
phresnel
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.