Decompiler-VB.Net
VN
Đăng nhập
VBReFormer Gen2 Engine được viết lại từ đầu, hỗ trợ P-code đầy đủ, và studio trực tuyến đang ở giai đoạn beta công khai. Đọc thông báo →
Tài liệu
VBReFormer Online

Hướng dẫn sử dụng VBReFormer Online

Hướng dẫn sử dụng VBReFormer Online: thả tệp thực thi VB6 vào trình duyệt, khám phá mã được tái tạo, tải xuống dự án mở lại được trong IDE.

Cập nhật ngày 20/09/202611 chương

Studio trong trình duyệt của bạn. Bạn thả một tệp thực thi Visual Basic 5 hoặc 6, bạn khám phá mã được tái tạo của nó, và bạn rời đi với một tệp lưu trữ mà VB6 IDE mở lại được. Không cần cài đặt gì, trên mọi hệ thống – kể cả macOS, Linux và các phiên bản Windows quá cũ đối với ứng dụng máy tính để bàn.

Lưu ý về bản dịch. Giao diện của studio trực tuyến không có phiên bản tiếng Việt. Trong tài liệu hướng dẫn này, tên các tab, chế độ xem và nút được trích dẫn bằng tiếng Anh đúng như hiển thị trong studio, kèm theo bản dịch tiếng Việt trong ngoặc đơn ở lần xuất hiện đầu tiên.

1. Mở studio

Không có gì để cài đặt, không có gì để cấu hình và không cần tạo tài khoản để bắt đầu: mở địa chỉ của studio trong một trình duyệt hiện đại, và bạn đã ở đó.

  • Mọi hệ thống – studio chỉ phụ thuộc vào trình duyệt. Đó là cách duy nhất để dùng VBReFormer từ một máy Mac, một máy Linux, hay một Windows cũ hơn 10.
  • Mười một ngôn ngữ – studio web được cung cấp bằng mười một ngôn ngữ, gần gấp bốn lần ứng dụng máy tính để bàn. Bộ chọn nằm ở đầu trang.
  • Chủ đề sáng hoặc tối – studio theo cài đặt hệ thống của bạn, và bạn có thể ghi đè nó.

Français · English · Español · Deutsch · Italiano · Português · 日本語 · 简体中文 · Українська · हिन्दी · العربية

2. Thả một tệp nhị phân

  1. Đánh dấu vào tuyên bố. Studio yêu cầu bạn tuyên bố rằng bạn sở hữu chương trình, hoặc bạn có quyền phân tích mã của nó. Đó là một điều kiện sử dụng, không phải chỉ là hình thức.
  2. Thả tệp. Kéo tệp vào vùng thả, hoặc duyệt các tệp của bạn. Các định dạng được chấp nhận: .exe, .dll, .ocx. Kích thước tối đa: 64 MB – giới hạn được hiển thị trên màn hình thay vì chỉ phát hiện ra sau một lần tải lên thất bại.
  3. Để quá trình phân tích chạy. Studio gọi tên từng giai đoạn khi tiến hành, kèm một bộ đếm: Receiving the file (Đang nhận tệp) → Analysing the binary (Đang phân tích tệp nhị phân) → Decompiling (Đang dịch ngược) → Inventorying symbols (Đang kiểm kê ký hiệu) → Call graph (Đồ thị lời gọi) → Control flow (Luồng điều khiển).

Thời gian phụ thuộc vào kích thước và bản chất của tệp nhị phân. Để tham khảo, một tệp thực thi 9,35 MB đi từ lúc mở đến dự án được ghi trong khoảng mười hai giây.

Khi phân tích xong, studio cũng cho bạn biết nó đã tìm thấy loại tệp nhị phân nào: mã native, P-code, hay loại không xác định.

3. Điều gì xảy ra với tệp của bạn

Tệp được phân tích, rồi bị xóa cùng với phiên của bạn. Không có gì được giữ lại.

Điều đó được ghi trên trang thả tệp, và đó thực sự là cách dịch vụ hoạt động: tệp nhị phân của bạn được xử lý trong suốt phiên làm việc của bạn, và biến mất cùng với phiên đó. Nó không được lưu trữ, không được lập chỉ mục, không được tái sử dụng.

Điều này cũng ngụ ý gì. Công việc của bạn cũng không tồn tại sau phiên. Nếu bạn đóng tab hoặc phiên hết hạn, bạn phải thả lại tệp nhị phân. Hãy tải xuống tệp lưu trữ của bạn trước khi rời đi. Việc khởi động lại dịch vụ cũng ngắt kết nối các phiên đang hoạt động – không có rủi ro cho tệp gốc của bạn, vốn nằm trên máy của chính bạn, nhưng bạn sẽ mất phần khám phá đang tiến hành.

Nếu tính bảo mật của tệp nhị phân của bạn là một vấn đề hợp đồng, hãy lưu ý rằng phiên bản Desktop xử lý cục bộ mọi thứ thuộc về việc đọc tệp – định dạng, byte, disassembly (phân rã mã máy), tài nguyên – và chỉ gửi đến dịch vụ những gì thuộc về việc tái tạo.

4. Bốn lối vào một tệp nhị phân

Ngăn bên trái cung cấp bốn điểm vào, và chúng trả lời bốn câu hỏi khác nhau.

tab câu hỏi mà nó trả lời
Project (Dự án) “Chương trình này được tổ chức như thế nào?” – cây các form, lớp, mô-đun và thủ tục của chúng, như VB6 nhìn thấy.
Symbols (Ký hiệu) “Cái này được định nghĩa ở đâu?” – bản kiểm kê đầy đủ, với loại và vùng chứa của mỗi ký hiệu. Nó phân biệt tên đọc được từ tệp nhị phân với tên mà nó phải tổng hợp, cho bạn biết ngay những gì bạn có thể tin cậy.
Search (Tìm kiếm) “Văn bản này xuất hiện ở đâu?” – trong mã được tái tạo cũng như trong các phần trình thiết kế.
Resources (Tài nguyên) “Ngoài mã ra, trong đó còn có gì?” – biểu tượng, con trỏ chuột, bitmap, bảng chuỗi, thông tin phiên bản, với loại, kích thước và nội dung của chúng. Được cung cấp không cần giấy phép: một tài nguyên được đọc, không phải được tái tạo.

Trong cây, mỗi thành viên mang phạm vi truy cập (visibility) mà tệp nhị phân khai báo – Public, Private, Friend. Một thành viên mà phạm vi truy cập không đọc được thì không mang dấu nào cả: chúng tôi không viết ra những gì chúng tôi không biết.

Đổi tên

Studio web cho phép bạn đổi tên các ký hiệu, và việc đổi tên có tính toàn cục: các vị trí gọi trong các mô-đun khác sẽ theo sau. Đây là thao tác trung tâm khi làm việc trên một tệp nhị phân – trình dịch ngược (decompiler) trả lại cho bạn logic, bạn trả lại cho nó các tên.

5. Các chế độ xem

Bảy chế độ xem, và chính studio nêu rõ, dưới mỗi chế độ xem, nó hiển thị gì và có yêu cầu giấy phép hay không.

chế độ xem hiển thị gì giấy phép
Source (Mã nguồn) mã VB6 được tái tạo xem trước không cần giấy phép
IR những gì trình dịch ngược thấy trước khi dựng lại luồng điều khiển xem trước không cần giấy phép
Assembly (Hợp ngữ) mã máy x86, ký hiệu đã được phân giải cung cấp đầy đủ
P-code các opcode của máy ảo VB6 cung cấp đầy đủ
Designer (Trình thiết kế) phần trình thiết kế của form cung cấp đầy đủ
Project tệp .vbp được tái tạo cung cấp đầy đủ
Structure (Cấu trúc) các cấu trúc định dạng đúng như đã đọc cung cấp đầy đủ

Ranh giới. Những gì được đọc từ tệp của bạn là miễn phí; những gì được tái tạo thì được bán. Disassembly, cấu trúc, phần trình thiết kế và .vbp được lấy từ các bảng có sẵn trong chính tệp thực thi của bạn. Mã nguồn VB6 không tồn tại ở đâu cả – nó phải được dựng lại, và công việc đó chính là sản phẩm.

Bên dưới mã, studio cũng hiển thị những gì trình dịch ngược báo cáo cho thủ tục hiện tại: các chẩn đoán, tức là những gì nó không thể làm và tại sao. Đó là phản xạ cần có mỗi khi một kết quả làm bạn ngạc nhiên.

6. Quá trình biên dịch giữ lại gì, và vứt bỏ gì

Chương này giải thích tại sao các form của bạn ra rất dễ đọc còn các mô-đun .bas của bạn lại ra với tên kỹ thuật. Quy tắc rất đơn giản:

Bất cứ thứ gì Visual Basic cần lúc chạy, nó đã ghi vào tệp: VBReFormer tìm lại được. Bất cứ thứ gì nó không còn cần sau khi biên dịch, nó đã vứt bỏ – và không ai có thể lấy lại.

Những gì còn lại: tên form, lớp và mô-đun · tên điều khiển · trình xử lý sự kiện · thành viên public của lớp · thuộc tính giao diện · lời gọi vào VB runtime (635 hàm) · Win32 API (15.680 chữ ký) · cấu trúc của mã · các chuỗi.

Những gì không có trong tệp: chú thích · tên biến cục bộ · tên tham số · hằng số có tên, bị thay bằng giá trị của chúng · tên thủ tục trong mô-đun .bas · thụt lề gốc.

Một ví dụ có thể kiểm chứng

Đoạn trích dưới đây lấy từ SETUP1.EXE, trình hướng dẫn cài đặt đi kèm Visual Basic 6 – mà Microsoft phân phối mã nguồn. Vì vậy, bất kỳ ai sở hữu VB6 đều có thể làm lại phép so sánh này.

Mã nguồn gốc, COMMON.BAS:

Sub AddDirSep(strPathName As String)
    If Right(Trim(strPathName), Len(gstrSEP_URLDIR)) <> gstrSEP_URLDIR And _
       Right(Trim(strPathName), Len(gstrSEP_DIR)) <> gstrSEP_DIR Then
        strPathName = RTrim$(strPathName) & gstrSEP_DIR
    End If
End Sub

Do VBReFormer kết xuất:

Public Sub proc_42C506(ByRef arg_8 As String)
    If ((Right(Trim(arg_8), Len("/")) <> "/") And (Right(Trim(arg_8), Len("\")) <> "\")) <> 0 Then
        arg_8 = (RTrim$(arg_8) & "\")
    End If
End Sub

Logic giống hệt nhau, từng dòng một. Right, Trim, Len và RTrim$ được đặt tên; cách truyền ByRef được suy luận đúng. Những gì bị mất là tên của thủ tục và của tham số, và các hằng số có tên xuất hiện dưới dạng giá trị của chúng – trình biên dịch đã thay thế chúng, không phải VBReFormer.

Đọc các dấu đánh dấu

VBReFormer không bao giờ đoán: một giá trị không thể xác lập thì được đánh dấu thay vì bịa ra.

dấu đánh dấu ý nghĩa nên làm gì
proc_42C506 một thủ tục được chỉ định bằng địa chỉ đổi tên nó – tên sẽ lan truyền
var_18, arg_8 một biến cục bộ hoặc một tham số đọc cách nó được dùng, rồi đổi tên
? giá trị chưa xác lập xem chế độ xem Assembly tại cùng vị trí

Một tệp chứa ? sẽ bị VB6 IDE từ chối. Dấu đánh dấu ở đó để bạn quyết định, không phải để được biên dịch lại nguyên trạng. Một giá trị hợp lý nhưng sai là điều tồi tệ nhất mà một trình dịch ngược có thể tạo ra.

7. Các đồ thị

Hai đồ thị, và chúng không kể cùng một câu chuyện.

  • Calls (Lời gọi) – ai gọi gì: kiến trúc của chương trình. Các bộ lọc Callers (Nơi gọi), Callees (Nơi được gọi) hoặc Both (Cả hai), và một tùy chọn để ẩn các nút cô lập.
  • Flow (Luồng) – việc thực thi đi đến đâu: các khối, điểm vào, đầu vòng lặp, cạnh ngược của vòng lặp, và các khối được đánh dấu UNREACHABLE (không thể đến được).

Năm cách đọc một khối

Chọn một khối trong đồ thị, rồi chọn những gì bạn muốn xem bên trong nó: Shape (Hình dạng), IR, VB6, Assembly hoặc P-code. Cùng một mảnh chương trình, năm cấp độ đọc.

Sự trung thực trong kết xuất. Studio nêu rõ bao nhiêu khối được neo vào các dòng liệt kê, và bao nhiêu khối không có địa chỉ được chứng minh – các lệnh của chúng khi đó rơi vào lát cắt liền trước. Vì vậy bạn biết phần nào của việc cắt lát là chắc chắn.

Các đồ thị yêu cầu giấy phép: ai gọi gì và việc thực thi đi đến đâu chính là kiến trúc của chương trình. Disassembly và cấu trúc vẫn mở mà không cần giấy phép.

8. Bản xem trước và giấy phép

Không có giấy phép, chế độ xem Source không bị từ chối với bạn: nó được hiển thị bị che một phần. Bạn thấy cấu trúc, các tên đã được khôi phục và chất lượng thực sự của việc tái tạo – trên chính tệp nhị phân của bạn – trước khi trả bất cứ khoản nào.

Đó là có chủ đích: một khách truy cập không thấy gì thì không thể đánh giá. Và nếu một gói đăng ký hết hạn, bạn thấy những gì bạn sẽ lấy lại được thay vì một cánh cửa đóng.

Mỗi lần một máy trạm

Một giấy phép VBReFormer mở một máy trạm tại một thời điểm – và một trình duyệt được tính là một máy trạm. Nếu giấy phép của bạn đang hoạt động ở nơi khác, studio đề nghị chuyển nó về đây từ tài khoản của bạn, hoặc thêm một chỗ (seat). Đó là một sự từ chối mềm: bạn đã thanh toán, không thiếu gì cả.

9. Tải xuống mã nguồn của bạn

Ngăn bàn giao tạo ra một tệp lưu trữ .zip chứa tệp .vbp và các tệp của nó – .bas, .cls, .frm – được ghi bằng ANSI, đúng như IDE mong đợi. Ngăn này nêu rõ số lượng tệp và kích thước trước khi bạn tải xuống.

Đọc các ghi chú trước khi mở dự án

Studio hiển thị những gì không thể tái tạo được, kèm một lý do cho mỗi mục. Một số thông tin – tham chiếu bên ngoài, tùy chọn biên dịch, chế độ khởi động – không nằm trong bất kỳ cấu trúc nào của tệp nhị phân: chúng không bị xóa, chúng chưa bao giờ ở đó. Vì vậy chúng được báo cáo thay vì bịa ra.

Trong IDE, nếu thiếu một tham chiếu, hãy thêm nó qua Project ▸ References (Dự án ▸ Tham chiếu). Các dấu ? nếu có là để bạn xử lý bằng tay.

Sau đó, ngăn này đề nghị phân tích một tệp nhị phân khác: phiên bắt đầu lại, và tệp trước đó bị xóa.

10. Online hay Desktop?

Cả hai phiên bản dùng chung một engine và tạo ra cùng một mã. Chúng không phục vụ cùng một mục đích.

Online Desktop
Cài đặt không MSI, Windows 10+
Hệ thống tất cả Windows 10 và 11
Ngôn ngữ giao diện 11 3
Cây, ký hiệu, tìm kiếm, đổi tên ✔ ✔
Bảy chế độ xem ✔ ✔
Đồ thị lời gọi và luồng ✔ ✔
Xuất dự án ✔ (zip) ✔ (thư mục)
Tài nguyên: kiểm kê và nội dung ✔ ✔
Tài nguyên: trích xuất ra tệp ✘ ✔
Chế độ xem hex có chú giải ✘ ✔
Trình thiết kế được vẽ, xuất hình ảnh ✘ (chỉ phần văn bản) ✔
Vá nhị phân ✘ ✔
Tham chiếu chéo ✘ ✔
Trình duyệt đối tượng, trình duyệt Win32 API ✘ ✔
Dấu trang, tùy chọn kết xuất ✘ ✔
Công việc tồn tại sau phiên ✘ ✔
Tính phí tín dụng (credit) gói đăng ký

Tóm lại – Online để mở một tệp nhị phân, hiểu nó làm gì và rời đi cùng mã nguồn. Desktop để làm việc trên một tệp nhị phân trong thời gian dài: byte, tài nguyên, tham chiếu chéo, bản vá, và công việc không biến mất khi bạn đóng tab.

11. Câu hỏi thường gặp

Tệp nhị phân của tôi có được giữ lại không? Không. Nó được phân tích, rồi bị xóa cùng với phiên của bạn. Xem chương 3.

Tệp của tôi lớn hơn 64 MB. Đó là giới hạn của studio, được nêu rõ trước khi bạn thả tệp. Với một tệp nhị phân lớn hơn, phiên bản Desktop không có ràng buộc tải lên như vậy.

Tài nguyên của tệp nhị phân ở đâu? Trong tab Resources ở bên trái – không cần giấy phép. Bạn thấy mọi mục với loại và kích thước của nó, và nội dung của nó khi bạn mở ra: hình ảnh được vẽ, văn bản được hiển thị, và mọi thứ khác được hiển thị dưới dạng byte thay vì bị ẩn. Trích xuất ra tệp là tính năng riêng của phiên bản Desktop, cũng như chế độ xem hex.

Tại sao mã dừng lại giữa một thủ tục? Đó là bản xem trước: không có giấy phép, phiên bản miễn phí hiển thị cấu trúc, các tên và toàn bộ disassembly, nhưng phần thân được tái tạo yêu cầu giấy phép.

Tôi đã đóng tab và mất tất cả. Công việc không tồn tại sau phiên. Hãy tải xuống tệp lưu trữ trước khi rời đi; bản thân tệp nhị phân vẫn còn trên máy của bạn.

Mã được xuất có biên dịch lại nguyên trạng không? Thường là có: trên một bộ thử nghiệm gồm 149 dự án, 121 dự án biên dịch lại mà không cần chỉnh sửa. Số còn lại cần thêm một tham chiếu bị thiếu hoặc xử lý một vài dấu đánh dấu.

Tệp thực thi của tôi được đóng gói (packed). Nó phải được giải nén trước, nếu không các cấu trúc VB6 không hiện ra trong tệp.

Điều này có hợp pháp không? Điều đó phụ thuộc vào quyền tài phán của bạn và quyền của bạn đối với tệp nhị phân – đó chính là nội dung của tuyên bố lúc thả tệp. Mục đích sử dụng dự kiến là khôi phục mã của chính bạn, hoặc mã mà bạn nắm giữ quyền hoặc được phép phân tích.