Học máy có thể được sử dụng để phát triển các công cụ kỹ thuật đảo ngược / dịch ngược?


7

Tôi đã hiểu được điều này, nhưng ngoài một số bài báo, tôi không thể tìm thấy bất kỳ công cụ kỹ thuật đảo ngược nào được xây dựng bằng cách sử dụng máy học.

Tôi không phải là một chuyên gia về học máy và học sâu, nhưng có vẻ hợp lý khi nghĩ rằng chúng ta có hàng tỷ dòng mã nguồn mở, chúng ta có thể sử dụng chúng để "cỗ máy" của chúng ta có thể học cách lắp ráp và thực thi điều này mã trông giống như và chỉ nghiên cứu về chúng, làm chủ nghệ thuật đảo ngược và do đó xây dựng một công cụ theo cách này có thể đảo ngược bất kỳ chương trình đã cho nào với độ chính xác cao.

Bây giờ điều này có thể thực hiện được hay tôi đang thiếu một cái gì đó ở đây? Có một công cụ được xây dựng theo cách này hoặc trên đường ra mắt? Suy nghĩ của bạn về điều này là gì? Là một công cụ đảo ngược tốt hơn thậm chí cần thiết hay đã có một công cụ đảo ngược tuyệt vời có thể thực hiện công việc với độ chính xác tốt nhất có thể?


Bạn có thể mô tả chính xác những gì bạn có nghĩa là 'kỹ thuật đảo ngược' trong bối cảnh này?
DrMcCleod

@DrMcCleod Biên dịch mã thực thi
John Pence

Ý tưởng là giới hạn kết quả vào các bài báo học thuật chỉ với sự trợ giúp của Google Scholar. Nó đã tìm thấy 7610 lượt truy cập cho dịch vụ dịch ngược dịch vụ. Câu hỏi là không, nếu có thể lấy mã nguồn cho tệp nhị phân, câu hỏi đặt ra là bạn có thích thuật toán di truyền, học sâu, LSTM hay hệ chuyên gia không?
Manuel Rodriguez

Câu trả lời:


4

AI nói chung, bao gồm cả học máy, hứa hẹn những cải tiến đáng kể trong công cụ kỹ thuật đảo ngược. Disassemblers là khá câm. Nếu các ký hiệu không bị tước khỏi tệp thực thi, một tệp được tạo thành giống như mã lắp ráp nguồn có thể được tạo từ tệp thực thi. Các tệp thư viện như .a, .so hoặc các tệp dll cũng có thể được khôi phục để lắp ráp. Trong trường hợp của Java, mã byte có thể được khôi phục thành ngôn ngữ máy ảo.

Khôi phục mã cấp cao hơn trong C hoặc Java là khó khăn hơn. Cấu trúc cao hơn trong C ++ hoặc Scala tạo ra nhiều khó khăn hơn. Vấn đề là có nhiều hơn một cấu trúc mức cao biên dịch thành một máy đơn, mã byte hoặc chương trình cấp độ lắp ráp. Biên dịch gần với một mối quan hệ nhiều đối với bất kỳ trình biên dịch và mức độ tối ưu hóa cụ thể nào. Dịch ngược là mối quan hệ một đối với nhiều người và việc tối ưu hóa chỉ làm tồi tệ hơn tình hình. Mã trong một ngôn ngữ biên dịch giả vờ

    for int i = 0 to 10 by 2
      squares[i] = x[i]^2

có thể biên dịch ở mức độ tối ưu hóa cao cho cùng một mã với mã này trong cùng ngôn ngữ giả vờ.

    int i = 0
    while (true)
      s = x[i]^2
      squares[i ++] = s
      if ((i ++) > 10) break

Giống như AI có thể được sử dụng trong tối ưu hóa (để tìm tập lệnh máy nhỏ nhất và nhanh nhất để chạy thuật toán), AI cũng có thể được phát triển để gán kiểu lập trình cấp cao hơn cho việc dịch ngược mã lắp ráp, máy hoặc mã byte. Một vài điều sẽ là cần thiết.

  • Một mạng lưới sâu rộng, có thể tận dụng một mô hình đại diện cho phát triển và kỹ thuật đảo ngược để tích hợp vào đào tạo và sử dụng mạng
  • Một bộ trình biên dịch {gcc, g ++, llvm, llvm ++, vcc, v ++, javac, scala, ...} để sử dụng để tạo các tính năng (chương trình đã biên dịch) từ nhãn (mã nguồn)
  • Trình tạo các chương trình hợp lệ hoặc một bộ sưu tập lớn chúng hiện có (từ GitHub, Bitbucket hoặc GitLab) để cung cấp cho trình biên dịch

Trong trường hợp dịch ngược các tệp mà thông tin ký hiệu bị tước, AI có thể gán tên hợp lý cho các biến, hằng và hàm từ việc sử dụng các biến trong chương trình và từ vựng dành riêng cho miền được trích xuất từ ​​bất kỳ văn bản nào viết về chương trình .

Đây có thể là một lĩnh vực vượt xa các công nghệ hàng đầu, nhưng nó không phải là không khả thi.


-1

Hiện tại dịch ngược chỉ là một quá trình tạo mã ngôn ngữ cấp cao từ nhị phân đã cho (mã máy, mã byte, v.v.) có thể tuân thủ cùng mã.

Quá trình đó ít nhiều được thực hiện cho các ngôn ngữ quan trọng.

Tôi không nghĩ rằng có một nhu cầu cấp thiết để tạo ra một tốt hơn công cụ dịch ngược vì tôi thậm chí không chắc điều đó sẽ giúp ích như thế nào. Có, bạn có thể áp dụng ML để có được mã trông giống con người hơn với các tên và nhận xét có khả năng biến đổi, nhưng đó là về nó.

Vì vậy, trong hai từ - nhu cầu hiện tại được đáp ứng và phát triển hơn nữa trong lĩnh vực này là không chính đáng.

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.