20 điểm bởi iolothebard 2025-02-28 | 9 bình luận | Chia sẻ qua WhatsApp

Từ một tệp nhị phân không phải mã nguồn mà chỉ là một phần (thiếu runtime DLL),
nó đã suy ra mục đích của chương trình gốc và viết lại bằng Python…
Dù theo hướng tốt hay xấu thì đúng là trí tuệ “nhân tạo”.

Bản dịch:

Sau nhiều năm thất vọng với AI, tôi thực sự bị sốc rất mạnh. Bài này không phải kiểu bài "AI thật đáng kinh ngạc" thông thường. Cho đến tận hôm nay tôi vẫn còn hoài nghi.

Bối cảnh : Giống như nhiều người khác, tôi cũng đã thử dùng ChatGPT và các công cụ AI khác để hỗ trợ lập trình. Kết quả ư? Liên tục gây thất vọng. Chúng giống như một công cụ tìm kiếm được tô vẽ đẹp đẽ, phun ra mã sai nhưng lại được gói trong những lời giải thích đầy tự tin.

Thử thách : Hôm nay cháu gái 2 tuổi của tôi đến chơi. Tôi chợt nhớ đến một ứng dụng đơn giản mà mình viết bằng Visual Basic 4 vào năm 1997. Nhưng chạy một tệp thực thi đã 27 năm tuổi ư? Không có DLL cũ và không có lớp tương thích ư? Đúng vậy.

Cú liều cuối cùng : Vì tò mò, tôi tải trực tiếp tệp EXE thật lên Claude 3.7 và hỏi một câu đơn giản: "Bạn có thể chỉ tôi cách chạy tệp này không? Có vẻ nó được tạo bằng Visual Basic 4. Sẽ rất hay nếu có thể chuyển nó sang Python."

Kết quả tôi dự đoán : Một câu trả lời chung chung kiểu "đây là tệp cũ, có rủi ro bảo mật này nọ..."

Điều thực sự đã xảy ra: Claude 3.7 mở đầu bằng những cảnh báo như tôi nghĩ, nhưng sau đó mọi thứ trở nên thú vị. Bằng cách nào đó nó đã phân tích tệp nhị phân và nhận diện được các thành phần cụ thể:

  • "Form1"
  • "cntTimer"
  • "btnExit"
  • Thậm chí còn phát hiện ra cả tệp âm thanh được nhúng bên trong!

Sau đó nó làm điều mà chưa AI nào khác từng làm được. Nó viết ra một bản chuyển đổi Python hoàn chỉnh bằng Pygame:

  1. Tái tạo chức năng gần như hoàn hảo.
  2. Có hướng dẫn cài đặt rõ ràng.
  3. Thực sự chạy được ngay từ lần đầu

Thời gian thực hiện: chưa đến 5 phút. Không hề cường điệu.

Khi tôi yêu cầu chỉnh sửa như gán âm thanh cho phím Space và thêm phông chữ nhiều màu, nó lập tức cung cấp bản cập nhật mã hoàn hảo.

Đây là lần đầu tiên kể từ khi dùng AI mà tôi thực sự kinh ngạc. Không phải một trò biểu diễn cho vui, mà là một giải pháp thực tế giúp tiết kiệm thời gian làm việc cho tôi.

Cuối cùng, tôi nói với Claude rằng mình rất ấn tượng và vụng về tóm tắt lý do vì sao tôi thấy điều đó tuyệt vời.... rồi gửi cho nó, sau đó nó đã viết lại bài đăng Reddit. Thực ra nghe "gần như" bình thường. (Đoạn này là tôi viết.)

<Cập nhật cùng ngày sau 5 giờ>

Tôi đã đăng một bản cập nhật/tóm tắt cho bài viết này (do tôi tự viết). Không chắc đây có phải cách làm đúng không, nhưng ít nhất có một người trên Internet đã nói vậy nên chắc là đúng.

https://www.reddit.com/r/ClaudeAI/comments/1iz1i61/update_i_uploaded_a_27yearold_exe_file_to_claude/

<Cập nhật - sau 11 giờ>

Có lẽ tôi là 'ông già Reddit'. Cũng vui đấy.

Xin đính chính vài điều:

- Vâng, Claude cho phép tải EXE lên.
- EXE đã biên dịch có một vài chuỗi ký tự có thể nhận ra, nhưng không nhiều.
- Claude đã viết bài này và cả tiêu đề này. Ngoài ra, phần hay nhất là nó làm được chỉ trong một lần.
- Giờ thì cô con gái nay đã 29 tuổi của tôi đã gõ bàn phím và làm phát tệp wav đồng thời hiển thị văn bản.

Có người không nhìn thấy liên kết cuộc trò chuyện trong phần bình luận nên tôi thêm ở đây:

https://claude.ai/share/3eecebc5-ff9a-4363-a1e6-e5c245b81a16

<Cập nhật - sau 1 ngày>

Bài đăng lại này trên Twitter/X đã vượt 1 triệu lượt xem. Toàn bộ bài viết ở đây. Tôi đã tải lên cho Claude bài đăng cùng toàn bộ bình luận trong đúng ngữ cảnh mà tôi đã dùng để viết script và bài đăng. Tôi đặc biệt yêu cầu nó tóm tắt các lời phê bình. Dưới đây là phần tóm tắt của Claude:

Bối cảnh kỹ thuật hợp lệ

Một số người đã chỉ ra chính xác rằng tệp thực thi VB4 được biên dịch thành p-code chứ không phải mã máy, nên dễ phân tích hơn so với tệp thực thi đã biên dịch hoàn toàn. Đây là một nhận xét chính xác. VB thời kỳ trước .NET lưu trữ một dạng bytecode có thể diễn giải, vì vậy việc trích xuất thông tin dễ hơn so với tệp nhị phân đã biên dịch hoàn toàn.

Sự hoài nghi về độ phức tạp

Những người khác chỉ ra rằng mã Python kết quả tương đối đơn giản (khoảng 100 dòng). Điều đó là vì bản thân ứng dụng không phải một ứng dụng phức tạp mà chỉ là một chương trình đơn giản với chức năng cơ bản. Điểm ấn tượng không nằm ở độ phức tạp của mã được tạo ra, mà ở chỗ việc chuyển từ tệp nhị phân sang mã có thể chạy được diễn ra mà gần như không cần nỗ lực nào.

Hiểu lầm về quy trình

Một số người phê bình dường như cho rằng tôi đang nói Claude đã 'decompile' tệp thực thi theo nghĩa truyền thống. Thực ra, như tôi đã mô tả trong cuộc trò chuyện, nó phân tích các chuỗi văn bản nhìn thấy được và suy luận ra chức năng, điều này vẫn rất ấn tượng nhưng không giống với decompile thực sự.

Sự hoài nghi chung với AI

Trong ngành công nghệ, việc giữ cái nhìn hoài nghi về năng lực AI là điều tự nhiên, và một số người bình luận phản xạ bác bỏ các bản demo ấn tượng là giả, là cường điệu, hoặc "chỉ là so khớp mẫu". Đây là một kiểu phản ứng phổ biến trước các tiến bộ của AI. Lời phê bình mà tôi cho là hợp lý nhất là thành quả này cần được đặt trong đúng bối cảnh. Claude không thực hiện phân tích nhị phân thực sự với mã biên dịch bất kỳ, mà đã suy luận thông minh từ các chuỗi văn bản trong tệp thực thi VB.

9 bình luận

 
ndrgrd 2025-03-04

Thực ra thì cũng chẳng khác mấy so với việc chỉ đọc và phân tích một tài liệu văn bản..

 
kandk 2025-02-28

Wow, liệu có thể khôi phục cả những tư liệu cũ bị lãng quên nữa không nhỉ haha
Ví dụ như đăng video game DOS ngày xưa lên rồi lại ra được file exe chẳng hạn..

 
hi098123 2025-02-28

Đúng như ý kiến trong bài, với file thực thi VB thì có thể kiểm tra gần như nguyên trạng phần mã đã được viết, nhưng vì đây là file thực thi C++ nên nếu chỉ là assembly thì có lẽ đến giờ vẫn chưa thể làm được.
Một trong những điểm mạnh của AI là có thể hiểu và vận dụng câu lệnh, nên nó lại khá giỏi trong các công việc migrate sang ngôn ngữ khác.

 
iolothebard 2025-02-28

Tôi đoán có lẽ trong dữ liệu mà Claude đã học có tài liệu liên quan đến p-code của VB 4.0.

Nếu không phải vậy (nếu không có thứ gì được tiền huấn luyện sẵn), thì từ góc nhìn của AI, p-code của VB 4.0 và mã máy x86 (hoặc arm hoặc...) có gì khác nhau không? Cả hai rốt cuộc cũng chỉ là một chuỗi các con số tuân theo một số quy tắc nhất định. Nếu nó đã đọc ra được mẫu từ một mẫu ngắn, thì điều đó cũng đáng sợ theo cách riêng của nó.

 
hi098123 2025-03-01

Với các ngôn ngữ như VB hay Python, khi tạo file .exe thì không phải là biên dịch thành mã máy, nên chỉ cần có file .exe là có thể trích xuất mã nguồn với nguyên tên hàm và tên biến.
Việc học các quy tắc như thế rồi ứng dụng chúng... có lẽ trong tương lai sẽ rất khó để tiếp tục sống sót với nghề lập trình viên.

 
kandk 2025-02-28

Nhưng dù sao thì assembly cũng có đặc tả, nên nếu đưa kèm đặc tả thì có vẻ sẽ dịch ra rất nhanh.

 
hi098123 2025-03-01

Việc từ assembly chuyển thành mã ngôn ngữ tự nhiên dễ đọc là lĩnh vực phải được tái tạo lại sau khi những phần không cần thiết đã bị loại bỏ (như tên biến, tên hàm, v.v.), nên tôi nghĩ sẽ cần thêm chút thời gian thì kết quả mới ra ổn.

 
kandk 2025-03-01

Có khi dễ thôi đó haha
Tôi đã viết một bài luận văn về thứ tương tự cách đây hơn 10 năm rồi

 
unsure4000 2025-02-28

Wow, cái này khá đáng kinh ngạc.