Decompiler-VB.Net
ID
Masuk
VBReFormer Gen2 Mesin ditulis ulang dari nol, P-code lengkap, dan studio online dalam beta publik. Baca pengumumannya →
Dokumentasi
VBReFormer Desktop

Panduan VBReFormer Desktop

Panduan pengguna VBReFormer Desktop: instalasi, aktivasi lisensi, tujuh tampilan, analisis file biner, ekspor proyek VB6 yang dapat dibuka di IDE.

Diperbarui pada 20/09/202614 bab

Aplikasi yang diinstal di komputer Windows Anda. Aplikasi ini membuka file executable Visual Basic 5 dan 6 Anda, merekonstruksi kode sumbernya, dan mengembalikan kepada Anda sebuah proyek yang dapat dibuka kembali oleh IDE VB6 – lengkap dengan seluruh perangkat kerjanya: byte, sumber daya, desainer, graf, referensi silang, dan patch biner.

Catatan tentang terjemahan. Antarmuka aplikasi desktop tersedia dalam bahasa Inggris, Prancis, dan Spanyol; tidak ada versi bahasa Indonesia. Dalam panduan ini, nama menu dan tampilan dikutip dalam bahasa Inggris sebagaimana tampil di aplikasi, dan padanan bahasa Indonesianya diberikan dalam tanda kurung pada kemunculan pertama.

1. Instalasi

VBReFormer Desktop didistribusikan sebagai installer MSI, satu untuk setiap bahasa antarmuka. Paketnya mandiri (self-contained): semua yang dibutuhkannya sudah tertanam di dalamnya; tidak ada framework yang perlu diinstal terlebih dahulu.

persyaratan
Sistem Windows 10 versi 1607 atau yang lebih baru, atau Windows 11
Arsitektur x64
Framework tidak ada – paketnya mandiri
Koneksi diperlukan untuk dekompilasi dan validasi lisensi
Bahasa antarmuka Inggris, Prancis, Spanyol

Windows XP, Vista, 7, dan 8 tidak didukung. Aplikasi ini bertumpu pada platform yang memerlukan setidaknya Windows 10. Jika komputer Anda lebih lama dari itu, VBReFormer Online berjalan di peramban apa pun, di sistem apa pun – itulah jalur yang direkomendasikan dalam kasus tersebut.

Di mana mesin bekerja

Aplikasinya berjalan secara lokal; rekonstruksi kodenya, bagaimanapun, berjalan di server kami. Itulah arti nama edisinya – Desktop + Cloud. Semua yang dibaca dari file – format, byte, disassembly (pembongkaran kode), sumber daya – dihitung di komputer Anda; semua yang direkonstruksi melewati layanan.

Kotak dialog Help ▸ About (Bantuan ▸ Tentang) memberi tahu Anda kapan saja versi mesin yang terhubung, versi kontrak, dan daftar capabilities served (kemampuan yang disediakan) – berguna ketika suatu fitur tidak muncul: jika fitur itu tidak ada dalam daftar tersebut, bukan antarmuka yang menolaknya.

2. Aktifkan lisensi Anda

Tanpa lisensi, aplikasi tetap terbuka dan bekerja: Anda dapat menjelajahi file biner, membaca disassembly secara utuh, byte, sumber daya, dan desainer. Yang dibuka oleh lisensi adalah rekonstruksi kode VB6 dan ekspor proyek.

Satu kursi pada satu waktu

Satu lisensi VBReFormer membuka satu stasiun kerja pada satu waktu. Jika Anda sudah menggunakannya di tempat lain, aplikasi menyatakannya dengan jelas dan menawarkan dua jalan keluar: memindahkan lisensi ke komputer ini dari akun Anda, atau menambah satu kursi.

Ini adalah penolakan yang lunak: Anda sudah membayar, tidak ada yang kurang. Pesannya dinyatakan seperti itu, bukan dengan mengembalikan kesalahan teknis.

Peramban yang terbuka di VBReFormer Online juga dihitung sebagai satu kursi: studio web dan aplikasi desktop memakai lisensi yang sama.

3. Jendela

  1. Buka file biner. File ▸ Open a VB6 binary (File ▸ Buka file biner VB6, Ctrl+O). Format yang diterima adalah .exe, .dll, .ocx, dan .scr. Bilah status menampilkan analisis yang sedang berjalan, lalu nama file dan bentuk kompilasinya – kode native atau P-code.
  2. Telusuri panel PROJECT (Proyek). Di sebelah kiri, file biner disajikan sebagaimana VB6 melihatnya: form, kelas, modul, beserta prosedur-prosedurnya. Pohonnya terisi sesuai permintaan – memperluas sebuah node berarti meminta anak-anaknya; tidak ada yang dihitung di muka, sehingga pembukaan tetap cepat bahkan pada file executable yang besar.
  3. Pilih sebuah prosedur. Tampilan-tampilan node tersebut muncul di sebelah kanan. Jika tidak ada tampilan yang disediakan untuk sebuah node, alasannya ditulis di layar, bukan panel kosong.

Panel bawah

tab kegunaannya
Output (Keluaran) log operasi. Log ini mempertahankan bahasa yang dipakai saat setiap baris ditulis, bahkan jika Anda mengganti bahasa antarmuka – log adalah catatan, bukan tampilan.
Diagnostics (Diagnostik) apa yang ditolak mesin untuk dilakukan, dan mengapa. Refleks yang harus Anda miliki begitu suatu hasil mengejutkan Anda.
Analyser (Penganalisis) referensi silang: pemanggil suatu prosedur, kemunculan suatu simbol. Hasilnya dapat diklik.

Visibilitas anggota

Setiap anggota pohon membawa visibilitasnya sebagaimana dideklarasikan file biner – (Public), (Private), (Friend). Ini adalah kata kunci VB6: tidak diterjemahkan. Anggota yang visibilitasnya tidak dapat dibaca tidak membawa tanda apa pun: kami tidak menulis apa yang tidak kami ketahui.

4. Tujuh tampilan

Tampilan-tampilan ini disusun dalam tiga keluarga, dan pemisahan itu memberi tahu Anda dari mana asal apa yang Anda baca. Inilah hal paling berguna untuk dipahami.

Keluarga “Code” – direkonstruksi melalui analisis

tampilan apa yang ditampilkan kapan melihatnya
Visual Basic 6 kode sumber yang direkonstruksi dan terstruktur secara default – inilah yang Anda cari
IR representasi perantara untuk melihat apa yang dipahami mesin
Disassembly (Pembongkaran kode) instruksi mesin x86 untuk melihat apa yang dieksekusi prosesor
P-code opcode mesin virtual VB6 hanya untuk file biner P-code

Menuruni daftar ini berarti bergerak menuju mesin. Jika ragu tentang suatu baris: Visual Basic 6 menyatakan maksudnya, Disassembly menyatakan faktanya.

Keluarga “Project files” – dibaca, bukan disimpulkan

Designer (.frm) (Desainer), Project (.vbp) (Proyek), dan Structure (Struktur). Tidak ada di sini yang melewati rekonstruksi kode: semuanya dibaca dari tabel-tabel di dalam file biner, dan apa yang tidak dapat dibaca ditulis dengan kata-kata yang jelas, bukan diisi sembarangan. Inilah keluarga yang paling andal dari produk ini, dan satu-satunya yang tidak bergantung pada inferensi apa pun.

Keluarga “Resources”

Lihat bab 9.

5. Apa yang disimpan kompilasi, dan apa yang dibuangnya

Bab ini menjelaskan mengapa sebagian kode Anda kembali hampir utuh dan sebagian lainnya dengan nama teknis. Aturannya sederhana:

Apa yang dibutuhkan Visual Basic pada waktu eksekusi, ditulisnya ke dalam file: VBReFormer menemukannya kembali. Apa yang tidak lagi dibutuhkannya setelah kompilasi, dibuangnya – dan tidak seorang pun dapat memulihkannya.

Yang bertahan: nama form, kelas, dan modul · nama kontrol · event handler · anggota public kelas · setiap properti antarmuka · pemanggilan ke runtime VB (635 fungsi) · API Win32 (15.680 signature) · struktur kode · string.

Yang tidak ada dalam file: komentar · nama variabel lokal · nama parameter · konstanta bernama, yang diganti dengan nilainya · nama prosedur dalam modul .bas · indentasi asli · Option Explicit dan Enum.

Konsekuensi praktisnya. Form Anda kembali dengan sangat terbaca. Modul .bas Anda kembali dengan benar, tetapi dengan nama teknis (proc_42C506). Fungsi Rename (Ganti nama, F2) ada untuk itu, dan ia menyebarkan nama baru ke setiap titik pemanggilan dalam proyek – lihat bab 7.

Dua contoh yang dapat diverifikasi

Kutipan di bawah ini berasal dari SETUP1.EXE, wizard instalasi yang disertakan bersama Visual Basic 6. Microsoft mendistribusikan kode sumbernya di folder yang sama – sehingga Anda dapat mengulangi perbandingan ini sendiri.

Prosedur modul .bas

Kode sumber asli, 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

Hasil VBReFormer:

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

Logika yang identik, baris demi baris. Right, Trim, Len, RTrim$ bernama; pelewatan ByRef disimpulkan dengan benar. Sebaliknya, nama prosedur dan nama parameternya hilang, dan konstanta muncul sebagai nilainya – kompilerlah yang menggantinya, bukan VBReFormer.

Sebuah event handler

Kode sumber asli, BEGIN.FRM:

Private Sub cmdExit_Click()
    ExitSetup Me, gintRET_EXIT
End Sub

Hasil VBReFormer:

Private Sub cmdExit_Click()
    Set var_18 = Me
    basSetup1.proc_41CE2D var_18, var_1C
End Sub

Nama form, nama tombol, dan nama handler-nya utuh; Me dikenali; modul yang dipanggil bernama, yang memberi tahu Anda ke mana harus pergi. Hanya prosedur yang dipanggil, yang berada di dalam .bas, yang tetap memakai nama alamatnya.

Penanda

VBReFormer tidak pernah menebak. Nilai yang tidak dapat dipastikan ditandai, bukan dikarang – nilai yang tampak masuk akal tetapi salah adalah hasil terburuk yang dapat dihasilkan sebuah dekompiler.

penanda arti yang harus dilakukan
proc_42C506 prosedur yang ditunjuk dengan alamatnya ganti namanya (F2)
var_18, arg_8 variabel lokal atau parameter baca penggunaannya, lalu ganti namanya
vtbl_3C panggilan tabel virtual yang belum terselesaikan Object Browser sering kali memberi tahu pustaka mana itu
? nilai tidak dapat dipastikan lihat tampilan Disassembly di tempat yang sama

File yang berisi ? akan ditolak oleh IDE VB6. Penanda itu ada agar Anda yang memutuskan, bukan untuk dikompilasi ulang apa adanya.

6. Alat analisis

Di sinilah edisi desktop paling berbeda: ia menawarkan meja kerja yang lengkap, sementara studio web berkonsentrasi pada membaca, mendekompilasi, dan mengekspor.

alat pintasan apa yang diberikannya
Analyse references (Analisis referensi) Shift+F12 pemanggil suatu prosedur, kemunculan suatu simbol – hasil yang dapat diklik, dan cakupannya dinyatakan dalam angka: apa yang tidak dilihat analisis dihitung, bukan didiamkan
Symbol list (Daftar simbol) Ctrl+Shift+S inventaris lengkap, dapat difilter menurut jenis dan lingkup – membedakan nama yang dibaca dari nama yang disintesis
Call graph (Graf panggilan) Ctrl+Shift+A siapa memanggil apa, dalam tiga skala, dengan filter pemanggil / yang dipanggil
Control-flow graph (Graf alur kontrol) Ctrl+Shift+G bentuk sebuah prosedur: blok, loop, sisi balik, blok yang tidak terjangkau
Object Browser (Peramban objek) Ctrl+Shift+B “di mana ini didefinisikan?” ketika jawabannya ada di luar file biner
API Browser (Peramban API) Ctrl+Shift+P prototipe, alias, dan catatan deklarasi Win32
Cited libraries (Pustaka yang dirujuk) Ctrl+K apa saja yang menjadi dependensi file biner
Find VB programs (Cari program VB) Ctrl+L menemukan file executable VB dalam sebuah folder
Find (Cari) Ctrl+Shift+F pencarian teks di seluruh tampilan yang disediakan
Bookmarks (Bookmark) Ctrl+F2 tandai tempat, kembali ke sana (F8 / Shift+F8)
Back / forward navigation (Navigasi mundur / maju) Alt+← Alt+→ seperti pada peramban

Mengapa cakupannya dinyatakan dalam angka. Graf panggilan native melihat panggilan langsung; ia tidak melihat panggilan melalui tabel virtual maupun pointer fungsi. Alih-alih menyajikan daftar parsial seolah-olah lengkap, VBReFormer menampilkan apa yang dilewatkannya, dengan hitungan. Dengan demikian Anda tahu sejauh mana hasilnya dapat dipercaya.

7. Ganti nama

Inilah tindakan utama saat bekerja pada file biner: dekompiler mengembalikan logikanya kepada Anda, Anda mengembalikan nama-namanya. F2 pada sebuah simbol, atau dari daftar simbol.

Kotak dialognya menampilkan tiga hal yang biasanya disembunyikan dekompiler:

  • asal nama saat ini – diberikan oleh Anda, disimpulkan oleh dekompiler, atau direkonstruksi;
  • usulan dekompiler, masing-masing dengan prioritas dan sumber asalnya;
  • nama asli, yang selalu dapat Anda kembalikan.

Penggantian nama bersifat global. Ganti nama sebuah prosedur sekali, dan titik-titik pemanggilan di modul lain ikut berubah – termasuk yang belum Anda buka.

Penggantian nama yang ditolak selalu ditolak beserta alasannya. Dua kasus yang sering terjadi: mesin tidak mengumumkan kemampuan ganti nama pada dokumen ini, atau tampilan saat ini hanya membawa fragmen leksikal – cukup untuk mewarnai teks, tidak cukup untuk menunjuk suatu entitas. Dalam kedua kasus tersebut pesannya menyatakan hal itu, bukan diam tanpa melakukan apa pun.

8. Byte dan patch biner

Navigate ▸ Show bytes (Navigasi ▸ Tampilkan byte, Ctrl+Shift+H) membuka tampilan heksadesimal beranotasi: tampilan ini tidak hanya menunjukkan byte, tetapi juga menyatakan apa yang diwakili setiap area. Go to address (Lompat ke alamat, Ctrl+G) membawa Anda langsung ke sana.

Memodifikasi file executable

Mode “raw” (mentah) memungkinkan Anda menulis byte dan menghasilkan file executable yang dimodifikasi. Mode ini dibingkai oleh empat penolakan, dan masing-masing melindungi sesuatu:

penolakan mengapa
File yang dianalisis tidak pernah menjadi tujuan mesin tidak pernah membukanya untuk ditulis; antarmuka tidak membatalkan jaminan itu
Menimpa file yang sudah ada harus dikonfirmasi “ini tidak dapat dibatalkan”
Tanda tangan Authenticode akan dihapus persetujuan Anda diminta terlebih dahulu; Anda dapat menandatangani ulang dengan sertifikat Anda sendiri
Patch yang ditolak tidak menulis apa pun tidak ada file yang setengah tertulis

Studio web tidak menawarkan patch biner maupun tampilan heksadesimal: keduanya adalah fungsi khusus edisi desktop.

9. Sumber daya dan desainer

Sumber daya file biner

Ikon, kursor, bitmap, tabel string, informasi versi: semua yang akan dibawa sebuah file .res. Setiap entri menampilkan jenisnya, ukurannya, dan apa yang dapat dilakukan dengannya, dan ekstraksi dapat dilakukan entri demi entri atau sekaligus.

Sumber daya yang tidak diketahui produk cara menggambarnya tetap terdaftar dan ditampilkan sebagai byte: tidak pernah disembunyikan. Dan jika entri-entri direktori tidak dapat diikuti, sebuah peringatan menyatakannya – dengan demikian Anda tahu daftarnya lebih pendek daripada yang dibawa file biner.

Desainer form

Permukaan form digambar sebagaimana VB6 akan menampilkannya, dari properti yang dibaca dalam file biner, dengan urutan penggambaran yang benar. Gambar form dapat diekspor (Ctrl+I).

Properti bersifat hanya-baca: VBReFormer tahu cara membaca permukaan sebuah form, tetapi belum tahu cara menulisnya kembali ke dalam file executable yang telah dikompilasi. Lihat bab 13.

10. Ekspor proyek

  1. Periksa panel Diagnostics terlebih dahulu. Panel ini menyatakan apa yang tidak dapat dilakukan. Membacanya sebelum ekspor menghindarkan Anda dari mencari-cari nanti mengapa suatu elemen hilang.
  2. File ▸ Export the VB6 project (File ▸ Ekspor proyek VB6). Pilih folder tujuan yang kosong.
  3. Baca catatan ekspor. VBReFormer menulis apa yang tidak dapat dipulihkannya, dan mengapa. Beberapa informasi – referensi eksternal, opsi kompilasi, mode startup – tidak ada dalam struktur mana pun di file biner: bukan terhapus, melainkan memang tidak pernah ada di sana. Informasi itu ditandai, bukan dikarang.
  4. Buka .vbp di Visual Basic 6. Header yang diperlukan IDE (VERSION, Attribute VB_Name) sudah ditulis. Jika ada referensi yang hilang, tambahkan melalui Project ▸ References (Proyek ▸ Referensi).

Dua penolakan penulisan yang melindungi Anda. File VB6 ditulis dalam ANSI 1252. VBReFormer menolak menulis jika set karakter tersebut tidak tersedia di komputer – menulis dengan set karakter lain akan menghasilkan file yang salah secara diam-diam – atau jika ada karakter dalam kode Anda yang tidak ada di dalamnya; dalam kasus itu ia memberi tahu Anda karakter mana dan titik kodenya (code point).

11. Opsi

pengaturan fungsinya
Indentation width (Lebar indentasi) hanya berlaku untuk kode yang direkonstruksi: disassembly, IR, P-code, blok desainer, dan .vbp tidak diformat oleh editor ini.
Code page (designer) (Halaman kode, desainer) halaman kode yang dipakai untuk membaca caption dan teks desainer. File biner VB6 tidak mendeklarasikan halaman kodenya di mana pun – diukur pada 236 file biner. Jika label sebuah form tampil sebagai karakter yang tidak konsisten, inilah pengaturan yang perlu diubah.
Group under With…End With (Kelompokkan di bawah With…End With) nonaktif secara default. Keluarannya berkualifikasi penuh (Frame1.Caption), karena kompiler menguraikan blok With dan membangunnya kembali hanya akan menjadi tebakan. Aktifkan jika Anda lebih mengutamakan keterbacaan daripada keharfiahan.
Syntax colouring (Pewarnaan sintaks) satu peran, satu warna – perannya berasal dari mesin, yang menyatakan apa setiap fragmen itu. Notasi #RRGGBB; palet yang tidak valid tidak diterapkan setengah-setengah.
Interface language (Bahasa antarmuka) Inggris, Prancis, Spanyol – perubahannya langsung berlaku.

Pengaturan render dikirim bersama setiap permintaan tampilan; pengaturan ini tidak pernah disimpan sebagai status sesi. Karena itu, mengubah indentasi tidak menganalisis ulang apa pun.

12. Pintasan

pintasan tindakan
Ctrl+O Buka file biner VB6
F2 Ganti nama simbol di bawah kursor
Shift+F12 Analisis referensi
Ctrl+Shift+F Cari dalam proyek
Ctrl+G Lompat ke alamat
Ctrl+Shift+H Tampilkan byte
Ctrl+Shift+S Daftar simbol
Ctrl+Shift+B Object Browser
Ctrl+Shift+P API Browser
Ctrl+Shift+G Graf alur kontrol
Ctrl+Shift+A Graf panggilan
Ctrl+K Pustaka yang dirujuk
Ctrl+L Program VB dalam sebuah folder
Ctrl+F2 Aktifkan/nonaktifkan bookmark
F8 / Shift+F8 Bookmark berikutnya / sebelumnya
Ctrl+Shift+F2 Daftar bookmark
Alt+← / Alt+→ Navigasi mundur / maju
Ctrl+I Simpan gambar form

13. Batasan yang diketahui

Memodifikasi antarmuka file executable yang telah dikompilasi

VBReFormer membaca permukaan sebuah form dan semua propertinya – ia belum tahu cara menulisnya kembali ke dalam file executable. Mengganti sumber daya yang tertanam dan menambahkan properti tersembunyi tanpa kompilasi ulang belum tersedia. Patch biner – menulis byte pada suatu alamat – tersedia (bab 8).

Sumber daya .ctx UserControl

Tidak ada file .ctx yang ditulis saat ekspor. Jika proyek Anda berisi UserControl dengan sumber daya yang dipersistenkan, bagian itu harus dibangun kembali.

Windows sebelum 10

Gunakan VBReFormer Online: peramban saja sudah cukup, apa pun sistemnya.

Apa yang tidak dapat dilewati dekompiler mana pun

Komentar, nama variabel lokal, konstanta bernama: semuanya tidak ada dalam file. Lihat bab 5.

14. Pertanyaan yang sering diajukan

Sebuah fungsi menu tidak merespons. Mengapa? Buka Help ▸ About dan lihat daftar capabilities served. Jika fungsi itu tidak ada di sana, bukan antarmuka yang menolak: mesin tidak menyediakannya untuk dokumen ini. Pesan-pesan aplikasi juga menyatakannya secara eksplisit.

Apakah kode yang diekspor dapat dikompilasi ulang apa adanya? Sering kali: pada kumpulan uji 149 proyek, 121 di antaranya dikompilasi ulang tanpa perubahan. Sisanya memerlukan penambahan referensi atau penanganan beberapa penanda.

Label form saya tidak terbaca. Itu soal halaman kode. File biner VB6 tidak mendeklarasikan di mana pun halaman kode teks desainernya – atur di Opsi (bab 11).

Mengapa form saya lebih terbaca daripada modul saya? Karena VB6 menyimpan nama kontrol dan event agar dapat bekerja, sedangkan prosedur modul diselesaikannya menjadi alamat polos. Lihat bab 5.

File executable saya dikemas (packed). Apakah itu masalah? Ya: kemasannya harus dibongkar (unpack) terlebih dahulu, jika tidak, struktur VB6 tidak terlihat dalam file.

Dapatkah .ocx atau .dll ActiveX didekompilasi? Ya, dan inventaris anggota public-nya umumnya lebih kaya di sana, karena COM mengharuskan anggota tersebut diberi nama.

Apakah file biner saya dikirim ke suatu tempat? Pembacaan format, byte, disassembly, dan sumber daya diproses di komputer Anda. Rekonstruksi kode berjalan di server kami – itulah arti edisi Desktop + Cloud.

Apakah ini legal? Itu bergantung pada yurisdiksi Anda dan pada hak Anda atas file biner tersebut. Penggunaan yang dimaksudkan adalah memulihkan kode Anda sendiri, atau kode yang haknya atau izinnya Anda miliki.