Kỹ thuật đảo ngược: nó thực sự tốt cho cái gì? [đóng cửa]


15

Tôi có một số câu hỏi ngây thơ / người mới bắt đầu:

  • Kỹ thuật đảo ngược là tốt cho cái gì?
  • Là một lập trình viên, tôi có nên học nghệ thuật kỹ thuật đảo ngược không?
  • Những lợi ích cho một lập trình viên có kinh nghiệm với nó là gì?

5
Có phải câu hỏi này chỉ về loại tháo gỡ của kỹ thuật đảo ngược, hoặc các loại khác không? (vì "lắp ráp" và "cấp thấp" nằm trong các thẻ ..)
Izkata

Câu trả lời:


14

Kỹ thuật đảo ngược là tốt cho cái gì?

Reverse Engineering chủ yếu tốt cho việc bẻ khóa và hack (loại bỏ bảo vệ số sê-ri hoặc nhắc nhở mật khẩu), nhưng cũng để hiểu virus hoặc phép lạ mà các phần mềm khác có thể thực hiện. Đôi khi, đó là một kỹ năng hữu ích để tìm lỗi trong các chương trình mà bạn chưa có nguồn và vá chúng.

Là một lập trình viên, tôi có nên học nghệ thuật kỹ thuật đảo ngược không?

Có, hãy cố gắng học trình biên dịch chương trình và sử dụng một trình gỡ lỗi đàng hoàng. Nó sẽ làm cho bạn trở thành một nhà phát triển tốt hơn bằng cách hiểu những thứ ở cấp độ thấp hơn, gần với kim loại hơn.

Điều gì sẽ là lợi ích của một lập trình viên có kinh nghiệm với kỹ thuật đảo ngược?

Bạn sẽ là một hacker / cracker tốt. Bạn có thể làm việc cho các nhà sản xuất chống vi-rút khác. Như một ví dụ cá nhân: Tôi đã từng đảo ngược một phần mềm để theo dõi một lỗi xảy ra trong khi thiết lập một kết nối sấm sét. Không ai khác có thể giải quyết vấn đề, vì vậy tôi đã nổi tiếng.

Ngoài ra, tôi cũng muốn trích dẫn bình luận của @ johannes , vì anh ấy hoàn toàn đúng:

Tôi sẽ không giới hạn nó để bẻ khóa "xấu". Việc phân tách có thể hữu ích để tìm hiểu xem trình biên dịch có bị điên hay không (thường là mã của bạn), từ quan điểm sysadmin hơn, thật thú vị khi xem ứng dụng bị lỗi ở đâu


8
Tôi sẽ không giới hạn nó để bẻ khóa "xấu". Việc phân tách có thể hữu ích để tìm hiểu xem trình biên dịch có bị điên hay không (thường là mã của bạn), từ quan điểm sysadmin hơn, thật thú vị khi xem ứng dụng thất bại ở đâu, ...
johannes

@johannes: Vâng, bạn nói đúng. Tôi có thể viết điều đó trong câu trả lời của tôi không?
Falcon

chắc chắn, làm như bạn muốn, tôi khẳng định không có bản quyền về điều đó ;-)
johannes

7
Tôi xin lỗi nhưng đây là một câu trả lời hoàn toàn khủng khiếp. Reverse Engineering hoàn toàn không "chủ yếu để ... bẻ khóa và hack" như đã định nghĩa, và bất kỳ ai không đối phó với lập trình hệ thống đều đang thực hiện một sự bất đồng bằng cách được giới thiệu với nó từ quan điểm ý thức hệ đó.
Chuu

1
Tôi không nghĩ rằng nó đã được đề cập, nhưng hãy cẩn thận nếu bạn làm điều này trên phần mềm không phải của bạn (hoặc không nói cho ai biết). Hầu như tất cả các EULAs thương mại đều cấm kỹ thuật đảo ngược. Bạn không muốn nhận được một lá thư chấm dứt và thôi miên với các bản sao cho luật sư IP của ai đó.
Bratch

25

Tôi thích câu trả lời của Falcon , nhưng tôi muốn thêm rằng trên một số ứng dụng kinh doanh thế giới nhàm chán cũ kỹ thuật đảo ngược có thể giúp bạn thoát khỏi một số rắc rối khó chịu.

Trong công việc, chúng tôi làm rất nhiều khi thực hiện tích hợp dữ liệu với hệ thống bên thứ 3 không có bất kỳ bảo trì mới nào, vì vậy chúng tôi có thể biết nơi nào nên hoặc không nên phá vỡ.

Chúng tôi cũng sử dụng kỹ sư đảo ngược để kiểm tra chất lượng mã (tất nhiên với một số ràng buộc nhất định) trên các thành phần bên thứ 3 mà chúng tôi mua, nếu không bao gồm mã nguồn.

Quan điểm thực sự của tôi là: kỹ thuật đảo ngược không gắn liền với một công nghệ hay ngôn ngữ, mà là một quá trình bạn học các phần bên trong của "hộp đen" . Nếu bạn có mã mà bạn phụ thuộc, nhưng bạn không hoặc không thể tin tưởng, bạn chắc chắn nên xem qua phần mui xe và xem mã đó đang làm gì.


Heck, chúng tôi thậm chí còn xem xét các thủ tục được lưu trữ SQL của các hệ thống bên thứ 3 mà chúng tôi thuê chỉ để kiểm tra xem đôi khi chúng có đáp ứng đúng yêu cầu của chúng tôi không.
Machado

3
+1. Ngay cả một sản phẩm phần mềm bán chạy từ một công ty lớn đôi khi cũng có thể là một hộp đen, những gì không phù hợp, lỗi thời, chỉ đơn giản là sai, đôi khi không có tài liệu trực tuyến và như vậy.
RalphChapin

13

Ngoài ra còn có khía cạnh nhàm chán của kỹ thuật đảo ngược. Đây là khi công ty bạn đang có một chút mã hoặc chương trình vẫn đang được sử dụng, nhưng không ai tuyên bố sẽ biết bất cứ điều gì về nó. Vì vậy, bạn đi qua nó, ghi lại nó, viết các bài kiểm tra và tất cả những thứ kỹ thuật nên được thực hiện trước khi một dự án được bắt đầu. Bạn làm điều này cho một phần mềm đã được viết, do đó "kỹ thuật đảo ngược".

Nó dễ dàng hơn nhiều khi bạn có mã, nhưng nó vẫn là kỹ thuật đảo ngược về mặt kỹ thuật. Đó là một trong những điều khoản xuất hiện rất nhiều trong các cuộc họp kinh doanh khi họ đang nói về các dự án cũ.


+1, đặc biệt đúng với tôi. Tôi đã làm việc ở một số ngân hàng nơi các hệ thống cũ không có một tài liệu kỹ thuật.
Machado

7

Chỉ để mở rộng giá trị kinh doanh của kỹ thuật đảo ngược - hơn một nửa số khách hàng mới mà chúng tôi gặp phải có một hệ thống / ứng dụng hiện có (không phải lúc nào cũng trong sản xuất, làm phiền bạn), nhưng mối quan hệ với nhà cung cấp phát triển phần mềm trước đó đã trượt dốc.

Trong khoảng 30% trường hợp khách hàng không có nguồn nào cho hệ thống của họ, và trong nhiều trường hợp, phần lớn quy trình kinh doanh thực tế, các quy tắc và kiến ​​thức bị khóa trong mã.

Và trong một vài trường hợp các nhà cung cấp trước đó đã nhận được độc hại rõ ràng, làm xáo trộn các mã nhị phân, mã hóa thời gian, vv để buộc khách hàng vô thời hạn.

Vì vậy, để trả lời câu hỏi của bạn, kỹ thuật đảo ngược thường là điểm khởi đầu cho các cam kết mới với khách hàng khá tuyệt vọng (và bị đốt cháy) và nó có thể là một yếu tố thành công 'quan trọng trong kinh doanh' để rút ra kiến ​​thức bị lãng quên từ mã hiện có.


2

Tôi sẽ lập luận rằng bộ kỹ năng cho kỹ thuật đảo ngược và bộ kỹ năng để gỡ lỗi là hoàn toàn giống nhau - nếu bạn là một người sửa lỗi tuyệt vời, bạn cũng là một kỹ sư đảo ngược tuyệt vời và ngược lại.


1

Đôi khi, nó được sử dụng để có được một số bộ phận / phần mềm để hoạt động theo như tôi hiểu. Một số giao diện kỳ ​​lạ, lỗi trong thực hiện, vv

Nhưng theo những gì tôi hiểu, đó là một chủ đề rất trơn tru, và do đó, các quy luật phát triển phần mềm vốn đã phức tạp đã được đưa đến cực điểm với kỹ thuật đảo ngược.


1

Chà, với kỹ thuật đảo ngược, bạn có thể sử dụng lại mã tối thiểu hóa công việc của mình. Ví dụ, trong Symfony2, bạn có thể chuyển đổi cơ sở dữ liệu được tạo từ MySQL thông thường và chuyển đổi sang định dạng học thuyết và đây là quy trình được thiết kế ngược có thể thực hiện được trong Symfony .... và với kỹ thuật đảo ngược, bạn có thể thấy mã hãy nói 'trong 2D'


0

Tôi chỉ đưa ra một ví dụ thực tế từ kinh nghiệm của tôi.

Khi công ty chúng tôi tiếp quản một dự án từ một công ty khác. Khoảng nửa năm tham gia dự án, chúng tôi nhận ra rằng một tiểu dự án không có mã. Khi chúng tôi yêu cầu công ty cũ giao mã, họ lịch sự trả lời rằng họ không thể tìm thấy mã cho tiểu dự án. Chúng tôi cần mã bởi vì chúng tôi muốn thay đổi một cái gì đó trong tiểu dự án đó.

Tôi đã phải đảo ngược kỹ sư tiểu dự án.

Đầu tiên tôi dịch ngược phần lắp ráp (vâng, đó là một dự án .NET). Kết quả của quá trình dịch ngược là mã nhạt nhẽo và khó hiểu mà không có tên của các biến cục bộ và cấu trúc điều khiển phức tạp. Điều này là do quá trình biên dịch loại bỏ thông tin quan trọng không thể dịch ngược.

Sau đó, tôi đã cố gắng tìm ra nơi để thay đổi mã đó. Để làm điều này, tôi sắp xếp hợp lý mã để hành xử tương tự nhưng theo cách ngắn gọn hơn. Tôi cũng đoán tên của các biến từ hành vi của nó. Tôi đã từng bước qua mã nhiều lần cho đến khi tôi nhận ra nó đang làm gì.

Tôi đã không đảo ngược mọi thứ, chỉ là phần chúng tôi phải thay đổi. Nó không quá tệ, khoảng 200 dòng mã VB. Mất khoảng năm ngày làm việc.

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.