Podręcznik VBReFormer Desktop
Podręcznik użytkownika VBReFormer Desktop: instalacja, aktywacja licencji, siedem widoków, analiza binarium, eksport projektu VB6 do ponownego wczytania w IDE.
Zaktualizowano 20.09.202614 rozdziałów
Aplikacja instalowana na komputerze z Windows. Otwiera pliki wykonywalne Visual Basic 5 i 6, odtwarza ich kod źródłowy i zwraca projekt, który IDE VB6 ponownie otwiera — z pełnym warsztatem: bajty, zasoby, projektant, grafy, odwołania krzyżowe i łatki binarne.
Uwaga o tłumaczeniu. Interfejs aplikacji desktopowej istnieje po angielsku, francusku i hiszpańsku. Ten podręcznik podaje nazwy menu i widoków po angielsku, tak jak pojawiają się w aplikacji.
1. Instalacja
VBReFormer Desktop jest dostarczany jako instalator MSI, jeden na każdy język interfejsu. Pakiet jest samodzielny: zawiera wszystko, czego potrzebuje, nie trzeba wcześniej instalować żadnego frameworka.
| wymaganie | |
|---|---|
| System | Windows 10 w wersji 1607 lub nowszej, albo Windows 11 |
| Architektura | x64 |
| Framework | brak — pakiet jest samodzielny |
| Połączenie | wymagane do dekompilacji i weryfikacji licencji |
| Języki interfejsu | angielski, francuski, hiszpański |
Windows XP, Vista, 7 i 8 nie są obsługiwane. Aplikacja opiera się na platformie wymagającej co najmniej Windows 10. Jeśli komputer jest starszy, VBReFormer Online działa w dowolnej przeglądarce, na dowolnym systemie — w takim przypadku to zalecana droga.
Gdzie pracuje silnik
Aplikacja jest lokalna; odtwarzanie kodu natomiast działa na naszych serwerach. To właśnie oznacza nazwa edycji — Desktop + Cloud. Wszystko, co jest odczytywane z pliku (format, bajty, deasemblacja, zasoby), jest obliczane na Twoim komputerze; wszystko, co jest odtwarzane, przechodzi przez usługę.
Okno Help ▸ About w każdej chwili podaje wersję podłączonego silnika, wersję kontraktu oraz listę udostępnianych możliwości (Capabilities served) — przydatne, gdy jakaś funkcja się nie pojawia: jeśli nie ma jej na tej liście, to nie interfejs jej odmawia.
2. Aktywacja licencji
Bez licencji aplikacja otwiera się i pracuje: możesz badać binarium, czytać całą deasemblację, bajty, zasoby i projektanta. Licencja otwiera odtwarzanie kodu VB6 i eksport projektu.
Jedno stanowisko naraz
Licencja VBReFormer otwiera jedno stanowisko pracy naraz. Jeśli używasz jej już gdzie indziej, aplikacja mówi to wprost i proponuje dwa wyjścia: przeniesienie licencji na ten komputer z Twojego konta albo dodanie stanowiska.
To łagodna odmowa: zapłaciłeś, niczego Ci nie brakuje. Komunikat mówi to w ten sposób zamiast zwracać błąd techniczny.
Przeglądarka otwarta na VBReFormer Online również liczy się jako stanowisko: studio internetowe i aplikacja desktopowa zużywają tę samą licencję.
3. Okno
- Otwórz binarium. File ▸ Open a VB6 binary (
Ctrl+O). Akceptowane formaty to.exe,.dll,.ocxi.scr. Pasek stanu pokazuje trwającą analizę, a potem nazwę pliku i jego formę kompilacji — kod natywny lub P-code. - Przejrzyj panel PROJECT. Po lewej binarium jest przedstawione tak, jak widział je VB6: formularze, klasy, moduły i ich procedury. Drzewo wypełnia się na żądanie — rozwinięcie węzła pobiera jego dzieci; nic nie jest liczone z góry, dzięki czemu otwieranie pozostaje szybkie nawet przy dużym pliku wykonywalnym.
- Wybierz procedurę. Widoki tego węzła pojawiają się po prawej. Jeśli dla węzła nie jest udostępniony żaden widok, powód jest wypisany na ekranie zamiast pustego panelu.
Dolne panele
| karta | do czego służy |
|---|---|
| Output | dziennik operacji. Zachowuje język, w którym zapisano każdą linię, nawet po zmianie języka interfejsu — dziennik jest zapisem, nie wyświetlaczem. |
| Diagnostics | to, czego silnik odmówił zrobić, i dlaczego. Odruch, jaki warto mieć, gdy tylko wynik zaskakuje. |
| Analyser | odwołania krzyżowe: wywołujący daną procedurę, wystąpienia symbolu. Wynik jest klikalny. |
Widoczność składowych
Każda składowa drzewa nosi swoją widoczność tak, jak deklaruje ją binarium — (Public), (Private),
(Friend). To słowa kluczowe VB6: nie są tłumaczone. Składowa, której widoczności nie udało się
odczytać, nie ma żadnego oznaczenia: nie piszemy tego, czego nie wiemy.
4. Siedem widoków
Są podzielone na trzy rodziny, a ten podział mówi, skąd pochodzi to, co czytasz. To najważniejsza rzecz do zrozumienia.
Rodzina „Code” — odtworzona przez analizę
| widok | co pokazuje | kiedy do niego zaglądać |
|---|---|---|
| Visual Basic 6 | odtworzone, ustrukturyzowane źródło | domyślnie — tego szukasz |
| IR | reprezentacja pośrednia | aby zobaczyć, co silnik zrozumiał |
| Disassembly | instrukcje maszynowe x86 | aby zobaczyć, co procesor wykonuje |
| P-code | opkody maszyny wirtualnej VB6 | tylko binaria P-code |
Schodzenie w dół tej listy to zbliżanie się do maszyny. W razie wątpliwości co do linii: Visual Basic 6 mówi o zamiarze, Disassembly o fakcie.
Rodzina „Project files” — odczytana, nie wywnioskowana
Designer (.frm), Project (.vbp) i Structure. Nic tutaj nie przechodzi przez odtwarzanie kodu: wszystko zostało odczytane z tabel binarium, a to, czego nie dało się odczytać, jest napisane wprost zamiast uzupełnione. To najbardziej wiarygodna rodzina produktu i jedyna, która nie zależy od żadnego wnioskowania.
Rodzina „Zasoby”
Zob. rozdział 9.
5. Co kompilacja zachowuje, a co wyrzuca
Ten rozdział wyjaśnia, dlaczego niektóre części Twojego kodu wracają niemal nietknięte, a inne z nazwami technicznymi. Reguła jest prosta:
To, czego Visual Basic potrzebuje w czasie wykonania, zapisał w pliku: VBReFormer to odnajduje. To, czego nie potrzebował już po kompilacji, wyrzucił — i nikt nie może tego odzyskać.
Co przetrwa: nazwy formularzy, klas i modułów · nazwy kontrolek · procedury obsługi zdarzeń · publiczne składowe klas · wszystkie właściwości interfejsu · wywołania runtime VB (635 funkcji) · API Win32 (15 680 sygnatur) · struktura kodu · łańcuchy znaków.
Czego nie ma w pliku: komentarze · nazwy zmiennych lokalnych · nazwy parametrów · stałe nazwane,
zastąpione swoją wartością · nazwy procedur w modułach .bas · pierwotne wcięcia · Option Explicit
i Enum.
Praktyczna konsekwencja. Twoje formularze wracają bardzo czytelne. Twoje moduły
.baswracają poprawne, ale z nazwami technicznymi (proc_42C506). Funkcja Rename (F2) istnieje właśnie po to i propaguje nową nazwę do wszystkich miejsc wywołania w projekcie — zob. rozdział 7.
Dwa sprawdzalne przykłady
Poniższe fragmenty pochodzą z SETUP1.EXE, kreatora instalacji dostarczanego z Visual Basic 6. Microsoft rozpowszechnia jego kod źródłowy w tym samym folderze — możesz więc sam powtórzyć porównanie.
Procedura modułu .bas
Oryginalne źródło, 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
Wynik 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
Identyczna logika, linia po linii. Right, Trim, Len, RTrim$ mają nazwy; przekazanie
ByRef jest poprawnie wywnioskowane. Natomiast nazwa procedury i nazwa parametru są utracone, a stałe
pojawiają się jako swoja wartość — zastąpił je kompilator, nie VBReFormer.
Procedura obsługi zdarzenia
Oryginalne źródło, BEGIN.FRM:
Private Sub cmdExit_Click()
ExitSetup Me, gintRET_EXIT
End Sub
Wynik VBReFormer:
Private Sub cmdExit_Click()
Set var_18 = Me
basSetup1.proc_41CE2D var_18, var_1C
End Sub
Nazwa formularza, przycisku i procedury obsługi są nietknięte; Me jest rozpoznane; wywoływany
moduł ma nazwę, co mówi, dokąd iść. Tylko wywoływana procedura, która żyje w .bas, zachowuje
nazwę adresową.
Znaczniki
VBReFormer nigdy nie zgaduje. Wartość, której nie da się ustalić, jest oznaczana zamiast wymyślana — wartość prawdopodobna i fałszywa to najgorszy wynik, jaki dekompilator może wyprodukować.
| znacznik | znaczenie | co zrobić |
|---|---|---|
proc_42C506 |
procedura oznaczona swoim adresem | zmienić jej nazwę (F2) |
var_18, arg_8 |
zmienna lokalna lub parametr | odczytać jej użycie, potem zmienić nazwę |
vtbl_3C |
nierozwiązane wywołanie przez tablicę wirtualną | Object Browser często mówi, o którą bibliotekę chodzi |
? |
wartość nieustalona | zajrzeć do widoku Disassembly w tym samym miejscu |
Plik zawierający
?zostanie odrzucony przez IDE VB6. Znacznik jest po to, abyś zdecydował, a nie po to, by kompilować go ponownie bez zmian.
6. Narzędzia analizy
Tutaj edycja desktopowa wyróżnia się najbardziej: oferuje pełny warsztat, podczas gdy studio internetowe skupia się na czytaniu, dekompilacji i eksporcie.
| narzędzie | skrót | co daje |
|---|---|---|
| Analyse references | Shift+F12 |
wywołujący daną procedurę, wystąpienia symbolu — klikalny wynik, a pokrycie jest policzone: to, czego analiza nie widzi, jest zliczone, nie przemilczane |
| Symbol list | Ctrl+Shift+S |
pełny spis, filtrowany według rodzaju i zakresu — odróżnia nazwy odczytane od zsyntetyzowanych |
| Call graph | Ctrl+Shift+A |
kto wywołuje co, w trzech skalach, z filtrami wywołujący / wywoływani |
| Control-flow graph | Ctrl+Shift+G |
kształt procedury: bloki, pętle, krawędzie wsteczne, bloki nieosiągalne |
| Object Browser | Ctrl+Shift+B |
„gdzie to jest zdefiniowane?”, gdy odpowiedź leży poza binarium |
| API Browser | Ctrl+Shift+P |
prototypy, aliasy i notatki deklaracji Win32 |
| Cited libraries | Ctrl+K |
od czego zależy binarium |
| Find VB programs | Ctrl+L |
odnalezienie plików wykonywalnych VB w folderze |
| Find | Ctrl+Shift+F |
wyszukiwanie tekstu w udostępnionych widokach |
| Zakładki | Ctrl+F2 |
oznaczanie miejsc, powrót do nich (F8 / Shift+F8) |
| Nawigacja wstecz / dalej | Alt+← Alt+→ |
jak w przeglądarce |
Dlaczego pokrycie jest policzone. Natywny graf wywołań widzi wywołania bezpośrednie; nie widzi wywołań przez tablicę wirtualną ani wskaźników do funkcji. Zamiast przedstawiać częściową listę jako pełną, VBReFormer pokazuje to, co pomija, zliczone. Wiesz więc, do jakiego stopnia ufać wynikowi.
7. Zmiana nazwy
To centralny gest pracy nad binarium: dekompilator oddaje Ci logikę, Ty oddajesz mu nazwy. F2 na
symbolu albo z listy symboli.
Okno pokazuje trzy rzeczy, które dekompilatory zwykle ukrywają:
- pochodzenie bieżącej nazwy — nadana przez Ciebie, wywnioskowana przez dekompilator albo odtworzona;
- propozycje dekompilatora, każda ze swoim priorytetem i źródłem, z którego pochodzi;
- pierwotną nazwę, do której zawsze można wrócić.
Zmiana nazwy jest globalna. Zmień nazwę procedury raz, a miejsca wywołania w innych modułach podążą za nią — także w tych, których jeszcze nie otworzyłeś.
Odrzucona zmiana nazwy jest zawsze odrzucona z podaniem powodu. Dwa częste przypadki: silnik nie zgłasza możliwości zmiany nazwy dla tego dokumentu albo bieżący widok zawiera tylko fragmenty leksykalne — wystarczające, by pokolorować tekst, ale nie by wskazać encję. W obu przypadkach komunikat to mówi, zamiast nic nie robić.
8. Bajty i łatki binarne
Navigate ▸ Show bytes (Ctrl+Shift+H) otwiera adnotowany widok szesnastkowy: nie pokazuje
tylko bajtów, lecz mówi, co reprezentuje każdy obszar. Go to address (Ctrl+G) prowadzi tam
bezpośrednio.
Modyfikacja pliku wykonywalnego
Tryb „surowy” pozwala zapisywać bajty i tworzyć zmodyfikowany plik wykonywalny. Jest obwarowany czterema odmowami, a każda z nich czegoś chroni:
| odmowa | dlaczego |
|---|---|
| Analizowany plik nigdy nie jest miejscem docelowym | silnik nigdy nie otwiera go do zapisu; interfejs nie unieważnia tej gwarancji |
| Nadpisanie istniejącego pliku wymaga potwierdzenia | „tego nie da się cofnąć” |
| Podpis Authenticode zostanie usunięty | wcześniej prosimy o zgodę; możesz podpisać ponownie własnym certyfikatem |
| Odrzucona łatka nie zapisuje niczego | żadnego pliku zapisanego do połowy |
Studio internetowe nie oferuje łatek binarnych ani widoku szesnastkowego: to dwie funkcje właściwe edycji desktopowej.
9. Zasoby i projektant
Zasoby binarium
Ikony, kursory, bitmapy, tablice łańcuchów, informacje o wersji: wszystko, co zawierałby plik .res.
Każdy wpis pokazuje swój typ, rozmiar i to, co można z nim zrobić, a wyodrębnianie jest możliwe wpis
po wpisie lub w całości.
Zasób, którego produkt nie potrafi narysować, pozostaje na liście i jest wyświetlany jako bajty: nigdy nie jest ukrywany. A jeśli nie udało się prześledzić wpisów katalogu, mówi o tym ostrzeżenie — wiesz wtedy, że lista jest krótsza niż to, co zawiera binarium.
Projektant formularzy
Powierzchnia formularza jest rysowana tak, jak wyświetliłby ją VB6, na podstawie właściwości
odczytanych z binarium, we właściwej kolejności rysowania. Obraz formularza można wyeksportować
(Ctrl+I).
Właściwości są tylko do odczytu: VBReFormer potrafi odczytać powierzchnię formularza, nie potrafi jeszcze zapisać jej z powrotem do skompilowanego pliku. Zob. rozdział 13.
10. Eksport projektu
- Najpierw sprawdź panel Diagnostics. Mówi, czego nie udało się zrobić. Przeczytanie go przed eksportem oszczędza późniejszego szukania, dlaczego brakuje jakiegoś elementu.
- File ▸ Export the VB6 project. Wybierz pusty folder docelowy.
- Przeczytaj notatki eksportu. VBReFormer zapisuje, czego nie udało się odzyskać, i dlaczego. Niektóre informacje — odwołania zewnętrzne, opcje kompilacji, tryb uruchomienia — nie znajdują się w żadnej strukturze binarium: nie zostały usunięte, nigdy ich tam nie było. Są sygnalizowane zamiast wymyślane.
- Otwórz
.vbpw Visual Basic 6. Nagłówki wymagane przez IDE (VERSION,Attribute VB_Name) są zapisane. Jeśli brakuje odwołania, dodaj je przez Projekt ▸ Odwołania.
Dwie odmowy zapisu, które Cię chronią. Pliki VB6 są zapisywane w ANSI 1252. VBReFormer odmawia zapisu, jeśli ten zestaw znaków jest niedostępny na komputerze — zapis w innym dałby po cichu błędny plik — albo jeśli jakiś znak Twojego kodu w nim nie istnieje; wtedy mówi, który i podaje jego punkt kodowy.
11. Opcje
| ustawienie | co robi |
|---|---|
| Indentation width | dotyczy tylko odtworzonego kodu: deasemblacja, IR, P-code, blok projektanta i .vbp nie są formatowane przez ten edytor. |
| Code page (designer) | strona kodowa, w której odczytywane są podpisy i teksty projektanta. Binarium VB6 nigdzie nie deklaruje swojej — zmierzone na 236 binariach. Jeśli etykiety formularza wyświetlają się jako niespójne znaki, to właśnie to ustawienie trzeba zmienić. |
Group under With…End With |
domyślnie wyłączone. Wyjście jest w pełni kwalifikowane (Frame1.Caption), ponieważ kompilator rozwiązuje bloki With, a ich odbudowa byłaby domysłem. Włącz, jeśli wolisz czytelność od dosłowności. |
| Syntax colouring | jedna rola, jeden kolor — role pochodzą z silnika, który mówi, czym jest każdy fragment. Notacja #RRGGBB; nieprawidłowa paleta nie jest stosowana połowicznie. |
| Interface language | angielski, francuski, hiszpański — zmiana jest natychmiastowa. |
Ustawienia renderowania podróżują z każdym żądaniem wyświetlenia; nigdy nie są zapisywane jako stan sesji. Zmiana wcięcia niczego więc nie analizuje ponownie.
12. Skróty
| skrót | działanie |
|---|---|
Ctrl+O |
Otwórz binarium VB6 |
F2 |
Zmień nazwę symbolu pod kursorem |
Shift+F12 |
Analizuj odwołania |
Ctrl+Shift+F |
Szukaj w projekcie |
Ctrl+G |
Idź do adresu |
Ctrl+Shift+H |
Pokaż bajty |
Ctrl+Shift+S |
Lista symboli |
Ctrl+Shift+B |
Object Browser |
Ctrl+Shift+P |
API Browser |
Ctrl+Shift+G |
Graf przepływu sterowania |
Ctrl+Shift+A |
Graf wywołań |
Ctrl+K |
Cytowane biblioteki |
Ctrl+L |
Programy VB w folderze |
Ctrl+F2 |
Ustaw lub usuń zakładkę |
F8 / Shift+F8 |
Następna / poprzednia zakładka |
Ctrl+Shift+F2 |
Lista zakładek |
Alt+← / Alt+→ |
Nawigacja wstecz / dalej |
Ctrl+I |
Eksportuj obraz formularza |
13. Znane ograniczenia
Modyfikacja interfejsu skompilowanego pliku wykonywalnego
VBReFormer odczytuje powierzchnię formularza i wszystkie jego właściwości — nie potrafi jeszcze zapisać ich z powrotem do pliku wykonywalnego. Zastąpienie osadzonego zasobu i dodanie ukrytej właściwości bez rekompilacji nie są dostępne. Łatki binarne — zapis bajtów pod adresem — są dostępne (rozdział 8).
Zasoby .ctx kontrolek UserControl
Przy eksporcie nie jest zapisywany żaden plik .ctx. Jeśli Twój projekt zawiera UserControl z
utrwalonymi zasobami, tę część trzeba odtworzyć.
Windows starszy niż 10
Użyj VBReFormer Online: wystarczy przeglądarka, niezależnie od systemu.
Czego żaden dekompilator nie pokona
Komentarze, nazwy zmiennych lokalnych, stałe nazwane: nie ma ich w pliku. Zob. rozdział 5.
14. Najczęstsze pytania
Funkcja menu nie reaguje. Dlaczego? Otwórz Help ▸ About i spójrz na listę udostępnianych możliwości. Jeśli funkcji na niej nie ma, to nie interfejs odmawia: silnik nie udostępnia jej dla tego dokumentu. Komunikaty aplikacji zresztą mówią to wprost.
Czy wyeksportowany kod kompiluje się ponownie bez zmian? Często: na stanowisku testowym ze 149 projektami 121 kompiluje się ponownie bez poprawek. Pozostałe wymagają dodania odwołania albo obsłużenia kilku znaczników.
Etykiety mojego formularza są nieczytelne. To strona kodowa. Binarium VB6 nigdzie nie deklaruje strony kodowej tekstów projektanta — ustaw ją w Opcjach (rozdział 11).
Dlaczego moje formularze są czytelniejsze niż moduły? Ponieważ VB6 zachowuje nazwy kontrolek i zdarzeń, by działać, natomiast procedury modułów rozwiązuje do zwykłych adresów. Zob. rozdział 5.
Mój plik wykonywalny jest spakowany (packer). Czy to problem? Tak: trzeba go najpierw rozpakować, inaczej struktury VB6 nie są widoczne w pliku.
Czy można zdekompilować .ocx lub .dll ActiveX?
Tak, a spis publicznych składowych jest tam zwykle bogatszy, ponieważ COM wymaga ich nazwania.
Czy moje binarium jest gdzieś wysyłane? Odczyt formatu, bajty, deasemblacja i zasoby są przetwarzane na Twoim komputerze. Odtwarzanie kodu działa na naszych serwerach — to sens edycji Desktop + Cloud.
Czy to legalne? Zależy od Twojej jurysdykcji i Twoich praw do binarium. Przewidziane zastosowanie to odzyskanie własnego kodu albo kodu, do którego masz prawa lub upoważnienie.
Zobacz też
Podręcznik VBReFormer OnlineWypróbuj bez kupowania