Посібник VBReFormer Desktop
Посібник користувача VBReFormer Desktop: встановлення, активація ліцензії, сім подань, аналіз бінарника, експорт проєкту VB6, який знову відкривається в IDE.
Оновлено 20.09.202614 розділів
Застосунок, встановлений на вашому комп'ютері з Windows. Він відкриває ваші виконувані файли Visual Basic 5 і 6, відновлює їхній вихідний код і повертає вам проєкт, який IDE VB6 знову відкриває — з повним набором інструментів: байти, ресурси, конструктор, графи, перехресні посилання та бінарні патчі.
Примітка щодо перекладу. Інтерфейс настільного застосунку існує англійською, французькою та іспанською. У цьому посібнику меню та подання названо англійською, так, як вони відображаються в застосунку.
1. Встановлення
VBReFormer Desktop постачається як інсталятор MSI, по одному на кожну мову інтерфейсу. Пакет самодостатній: він містить усе потрібне, жодного фреймворку встановлювати заздалегідь не треба.
| вимога | |
|---|---|
| Система | Windows 10 версії 1607 або новіша, або Windows 11 |
| Архітектура | x64 |
| Фреймворк | жодного — пакет самодостатній |
| З'єднання | потрібне для декомпіляції та перевірки ліцензії |
| Мови інтерфейсу | англійська, французька, іспанська |
Windows XP, Vista, 7 і 8 не підтримуються. Застосунок спирається на платформу, яка вимагає щонайменше Windows 10. Якщо ваш комп'ютер старіший, VBReFormer Online працює в будь-якому браузері, на будь-якій системі — у цьому випадку це рекомендований шлях.
Де працює рушій
Застосунок локальний; відновлення коду натомість виконується на наших серверах. Саме це означає назва редакції — Desktop + Cloud. Усе, що читається з файлу (формат, байти, дизасемблювання, ресурси), обчислюється на вашому комп'ютері; усе, що відновлюється, проходить через сервіс.
Вікно Help ▸ About у будь-який момент показує версію під'єднаного рушія, версію контракту та перелік наданих можливостей (Capabilities served) — корисно, коли якась функція не з'являється: якщо її немає в цьому переліку, то не інтерфейс її відмовляє.
2. Активація ліцензії
Без ліцензії застосунок відкривається і працює: ви можете досліджувати бінарник, читати дизасемблювання повністю, байти, ресурси та конструктор. Ліцензія відкриває відновлення коду VB6 та експорт проєкту.
Одне робоче місце за раз
Ліцензія VBReFormer відкриває одне робоче місце за раз. Якщо ви вже використовуєте її деінде, застосунок чітко про це каже і пропонує два виходи: перенести ліцензію на цей комп'ютер із вашого облікового запису або додати робоче місце.
Це м'яка відмова: ви заплатили, вам нічого не бракує. Повідомлення каже саме так, замість повертати технічну помилку.
Браузер, відкритий на VBReFormer Online, теж рахується як робоче місце: вебстудія та настільний застосунок споживають ту саму ліцензію.
3. Вікно
- Відкрийте бінарник. File ▸ Open a VB6 binary (
Ctrl+O). Приймаються формати.exe,.dll,.ocxі.scr. Рядок стану показує перебіг аналізу, потім назву файлу та форму його компіляції — нативний код чи P-code. - Перегляньте панель PROJECT. Ліворуч бінарник показано так, як його бачив VB6: форми, класи, модулі та їхні процедури. Дерево заповнюється на вимогу — розгортання вузла запитує його дочірні елементи; нічого не обчислюється заздалегідь, тож відкриття лишається швидким навіть для великого виконуваного файлу.
- Виберіть процедуру. Подання цього вузла з'являються праворуч. Якщо для вузла не надано жодного подання, причина написана на екрані замість порожньої панелі.
Нижні панелі
| вкладка | для чого вона |
|---|---|
| Output | журнал операцій. Він зберігає мову, якою написано кожен рядок, навіть якщо ви зміните мову інтерфейсу — журнал є записом, а не відображенням. |
| Diagnostics | те, що рушій відмовився робити, і чому. Рефлекс, який варто мати, щойно результат дивує. |
| Analyser | перехресні посилання: хто викликає процедуру, входження символу. Результат клікабельний. |
Видимість членів
Кожен член дерева має видимість такою, як її оголошує бінарник — (Public), (Private),
(Friend). Це ключові слова VB6: вони не перекладаються. Член, видимість якого не вдалося
прочитати, не має жодної позначки: ми не пишемо того, чого не знаємо.
4. Сім подань
Вони впорядковані у три родини, і цей поділ каже вам, звідки походить те, що ви читаєте. Це найкорисніше, що варто зрозуміти.
Родина «Code» — відновлена аналізом
| подання | що показує | коли дивитися |
|---|---|---|
| Visual Basic 6 | відновлений, структурований вихідний код | типово — це те, що ви шукаєте |
| IR | проміжне подання | щоб побачити, що рушій зрозумів |
| Disassembly | машинні інструкції x86 | щоб побачити, що процесор виконує |
| P-code | опкоди віртуальної машини VB6 | лише бінарники P-code |
Рухатися вниз цим списком — значить підійматися до машини. Якщо є сумнів щодо рядка: Visual Basic 6 каже про намір, Disassembly — про факт.
Родина «Project files» — прочитана, а не виведена
Designer (.frm), Project (.vbp) і Structure. Ніщо тут не проходить через відновлення коду: усе було прочитано з таблиць бінарника, а те, чого не вдалося прочитати, написано словами, а не заповнено. Це найнадійніша родина продукту, і та, що не залежить від жодного висновку.
Родина «Ресурси»
Див. розділ 9.
5. Що компіляція зберігає, а що викидає
Цей розділ пояснює, чому деякі частини вашого коду повертаються майже недоторканими, а інші — з технічними назвами. Правило просте:
Те, що Visual Basic потребує під час виконання, він записав у файл: VBReFormer це знаходить. Те, що йому більше не було потрібно після компіляції, він викинув — і ніхто не може це відновити.
Що виживає: назви форм, класів і модулів · назви елементів керування · обробники подій · публічні члени класів · усі властивості інтерфейсу · виклики runtime VB (635 функцій) · API Win32 (15 680 сигнатур) · структура коду · рядки.
Чого немає у файлі: коментарі · назви локальних змінних · назви параметрів · іменовані
константи, замінені їхнім значенням · назви процедур у модулях .bas · початкові відступи ·
Option Explicit та Enum.
Практичний наслідок. Ваші форми повертаються дуже читабельними. Ваші модулі
.basповертаються правильними, але з технічними назвами (proc_42C506). Для цього існує функція Rename (F2), і вона поширює нову назву на всі місця виклику в проєкті — див. розділ 7.
Два приклади, які можна перевірити
Наведені уривки взято з SETUP1.EXE, майстра встановлення, що постачається з Visual Basic 6. Microsoft розповсюджує його вихідний код у тій самій теці — тож ви можете повторити порівняння самі.
Процедура модуля .bas
Оригінальний код, 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
Результат 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
Ідентична логіка, рядок за рядком. Right, Trim, Len, RTrim$ названі; передавання
ByRef правильно виведено. Натомість назву процедури та назву параметра втрачено, а константи
з'являються як їхнє значення — їх замінив компілятор, а не VBReFormer.
Обробник події
Оригінальний код, BEGIN.FRM:
Private Sub cmdExit_Click()
ExitSetup Me, gintRET_EXIT
End Sub
Результат VBReFormer:
Private Sub cmdExit_Click()
Set var_18 = Me
basSetup1.proc_41CE2D var_18, var_1C
End Sub
Назва форми, кнопки та обробника недоторкані; Me розпізнано; викликаний модуль названо, що
каже вам, куди йти. Лише викликана процедура, яка живе в .bas, зберігає свою адресну назву.
Маркери
VBReFormer ніколи не вгадує. Значення, яке не вдається встановити, позначається, а не вигадується — правдоподібне й хибне значення є найгіршим результатом, який може видати декомпілятор.
| маркер | значення | що робити |
|---|---|---|
proc_42C506 |
процедура, позначена своєю адресою | перейменувати (F2) |
var_18, arg_8 |
локальна змінна або параметр | прочитати її використання, потім перейменувати |
vtbl_3C |
нерозв'язаний виклик через віртуальну таблицю | Object Browser часто каже, про яку бібліотеку йдеться |
? |
невстановлене значення | переглянути подання Disassembly в тому самому місці |
Файл, що містить
?, буде відхилено IDE VB6. Маркер існує, щоб ви вирішили, а не щоб його перекомпілювали як є.
6. Інструменти аналізу
Саме тут настільна редакція відрізняється найбільше: вона пропонує повний верстат, тоді як вебстудія зосереджена на читанні, декомпіляції та експорті.
| інструмент | скорочення | що дає |
|---|---|---|
| Analyse references | Shift+F12 |
хто викликає процедуру, входження символу — клікабельний результат, і покриття виміряне: те, чого аналіз не бачить, пораховано, а не замовчано |
| Symbol list | Ctrl+Shift+S |
повний перелік, з фільтрами за видом і областю — він відрізняє прочитані назви від синтезованих |
| Call graph | Ctrl+Shift+A |
хто що викликає, у трьох масштабах, з фільтрами «хто викликає» / «кого викликано» |
| Control-flow graph | Ctrl+Shift+G |
форма процедури: блоки, цикли, зворотні ребра, недосяжні блоки |
| Object Browser | Ctrl+Shift+B |
«де це визначено?», коли відповідь поза бінарником |
| API Browser | Ctrl+Shift+P |
прототипи, псевдоніми та нотатки оголошень Win32 |
| Cited libraries | Ctrl+K |
від чого залежить бінарник |
| Find VB programs | Ctrl+L |
знайти виконувані файли VB у теці |
| Find | Ctrl+Shift+F |
пошук тексту в наданих поданнях |
| Закладки | Ctrl+F2 |
позначати місця, повертатися до них (F8 / Shift+F8) |
| Навігація назад / вперед | Alt+← Alt+→ |
як у браузері |
Чому покриття виміряне. Нативний граф викликів бачить прямі виклики; він не бачить викликів через віртуальні таблиці та вказівники на функції. Замість подавати частковий перелік як повний, VBReFormer показує те, що він пропускає, пораховано. Так ви знаєте, наскільки довіряти результату.
7. Перейменування
Це центральний жест роботи з бінарником: декомпілятор повертає вам логіку, ви повертаєте йому назви.
F2 на символі або з переліку символів.
Вікно показує три речі, які декомпілятори зазвичай приховують:
- походження поточної назви — дана вами, виведена декомпілятором або відновлена;
- пропозиції декомпілятора, кожна зі своїм пріоритетом і джерелом, з якого вона походить;
- початкову назву, до якої завжди можна повернутися.
Перейменування глобальне. Перейменуйте процедуру один раз, і місця виклику в інших модулях підуть за нею — включно з тими, які ви ще не відкривали.
Відхилене перейменування завжди відхиляється з причиною. Два часті випадки: рушій не оголошує можливості перейменування для цього документа, або поточне подання містить лише лексичні фрагменти — достатньо, щоб розфарбувати текст, недостатньо, щоб позначити сутність. В обох випадках повідомлення про це каже, замість нічого не робити.
8. Байти та бінарні патчі
Navigate ▸ Show bytes (Ctrl+Shift+H) відкриває анотоване шістнадцяткове подання: воно показує
не лише байти, а й каже, що представляє кожна ділянка. Go to address (Ctrl+G) веде туди
безпосередньо.
Зміна виконуваного файлу
«Сирий» режим дозволяє записувати байти та створювати змінений виконуваний файл. Він обмежений чотирма відмовами, і кожна щось захищає:
| відмова | чому |
|---|---|
| Аналізований файл ніколи не є місцем призначення | рушій ніколи не відкриває його для запису; інтерфейс не скасовує цю гарантію |
| Перезапис наявного файлу підтверджується | «це не можна скасувати» |
| Підпис Authenticode буде видалено | вашу згоду запитують заздалегідь; ви зможете підписати знову власним сертифікатом |
| Відхилений патч не записує нічого | жодного наполовину записаного файлу |
Вебстудія не пропонує бінарних патчів і шістнадцяткового подання: це дві функції, властиві настільній редакції.
9. Ресурси та конструктор
Ресурси бінарника
Піктограми, курсори, растрові зображення, таблиці рядків, відомості про версію: усе, що містив би
файл .res. Кожен запис показує свій тип, розмір і те, що з ним можна зробити, а видобування
можливе запис за записом або повністю.
Ресурс, який продукт не вміє намалювати, залишається в переліку й показується як байти: він ніколи не приховується. А якщо записи каталогу не вдалося простежити, про це каже попередження — тоді ви знаєте, що перелік коротший за те, що містить бінарник.
Конструктор форм
Поверхня форми малюється так, як її показав би VB6, за властивостями, прочитаними з бінарника, у
правильному порядку малювання. Зображення форми можна експортувати (Ctrl+I).
Властивості лише для читання: VBReFormer уміє читати поверхню форми, але ще не вміє записувати її назад у скомпільований виконуваний файл. Див. розділ 13.
10. Експорт проєкту
- Спершу перевірте панель Diagnostics. Вона каже, чого не вдалося зробити. Прочитати її до експорту — значить не шукати згодом, чому бракує якогось елемента.
- File ▸ Export the VB6 project. Виберіть порожню теку призначення.
- Прочитайте нотатки експорту. VBReFormer записує те, чого не зміг відновити, і чому. Деякі відомості — зовнішні посилання, параметри компіляції, режим запуску — не містяться в жодній структурі бінарника: їх не стерто, їх там ніколи не було. Про них повідомляється, а не вигадується.
- Відкрийте
.vbpу Visual Basic 6. Заголовки, яких вимагає IDE (VERSION,Attribute VB_Name), записано. Якщо бракує посилання, додайте його через Project ▸ References.
Дві відмови запису, які вас захищають. Файли VB6 записуються в ANSI 1252. VBReFormer відмовляється записувати, якщо цей набір символів недоступний на машині — запис в іншому мовчки створив би хибний файл — або якщо якийсь символ вашого коду в ньому не існує; тоді він каже, який саме, і його кодову точку.
11. Параметри
| параметр | що робить |
|---|---|
| Indentation width | стосується лише відновленого коду: дизасемблювання, IR, P-code, блок конструктора та .vbp цей редактор не форматує. |
| Code page (designer) | кодова сторінка, якою читаються підписи та тексти конструктора. Бінарник VB6 ніде не оголошує своєї — виміряно на 236 бінарниках. Якщо підписи форми показуються неузгодженими символами, змінювати треба саме цей параметр. |
Group under With…End With |
типово вимкнено. Вивід повністю кваліфікований (Frame1.Caption), бо компілятор розчиняє блоки With, а відбудовувати їх було б припущенням. Увімкніть, якщо віддаєте перевагу читабельності над буквальністю. |
| Syntax colouring | одна роль — один колір; ролі надходять від рушія, який каже, чим є кожен фрагмент. Позначення #RRGGBB; недійсна палітра не застосовується наполовину. |
| Interface language | англійська, французька, іспанська — зміна миттєва. |
Параметри відображення передаються з кожним запитом на показ; вони ніколи не зберігаються як стан сеансу. Отже, зміна відступу нічого не переаналізовує.
12. Скорочення
| скорочення | дія |
|---|---|
Ctrl+O |
Відкрити бінарник VB6 |
F2 |
Перейменувати символ під курсором |
Shift+F12 |
Проаналізувати посилання |
Ctrl+Shift+F |
Шукати в проєкті |
Ctrl+G |
Перейти до адреси |
Ctrl+Shift+H |
Показати байти |
Ctrl+Shift+S |
Перелік символів |
Ctrl+Shift+B |
Object Browser |
Ctrl+Shift+P |
API Browser |
Ctrl+Shift+G |
Граф потоку керування |
Ctrl+Shift+A |
Граф викликів |
Ctrl+K |
Згадані бібліотеки |
Ctrl+L |
Програми VB у теці |
Ctrl+F2 |
Поставити або зняти закладку |
F8 / Shift+F8 |
Наступна / попередня закладка |
Ctrl+Shift+F2 |
Перелік закладок |
Alt+← / Alt+→ |
Навігація назад / вперед |
Ctrl+I |
Експортувати зображення форми |
13. Відомі обмеження
Зміна інтерфейсу скомпільованого виконуваного файлу
VBReFormer читає поверхню форми та всі її властивості — він ще не вміє записувати їх назад у виконуваний файл. Заміна вбудованого ресурсу та додавання прихованої властивості без перекомпіляції недоступні. Бінарні патчі — запис байтів за адресою — доступні (розділ 8).
Ресурси .ctx елементів UserControl
Під час експорту не записується жоден файл .ctx. Якщо ваш проєкт містить UserControl зі
збереженими ресурсами, цю частину доведеться відтворити.
Windows до версії 10
Використовуйте VBReFormer Online: достатньо браузера, хоч би яка була система.
Що не долає жоден декомпілятор
Коментарі, назви локальних змінних, іменовані константи: їх немає у файлі. Див. розділ 5.
14. Часті запитання
Функція меню не реагує. Чому? Відкрийте Help ▸ About і подивіться на перелік наданих можливостей. Якщо функції там немає, то відмовляє не інтерфейс: рушій не надає її для цього документа. Повідомлення застосунку, до речі, кажуть про це прямо.
Чи перекомпілюється експортований код як є? Часто: на стенді зі 149 проєктів 121 перекомпілюється без правок. Решта потребують додати посилання або обробити кілька маркерів.
Підписи моєї форми нечитабельні. Це кодова сторінка. Бінарник VB6 ніде не оголошує сторінку своїх текстів конструктора — задайте її в Параметрах (розділ 11).
Чому мої форми читабельніші за модулі? Бо VB6 зберігає назви елементів керування та подій, щоб працювати, тоді як процедури модулів він зводить до простих адрес. Див. розділ 5.
Мій виконуваний файл стиснено (packer). Це проблема? Так: його треба спершу розпакувати, інакше структури VB6 не видно у файлі.
Чи можна декомпілювати .ocx або ActiveX .dll?
Так, і перелік публічних членів там загалом багатший, оскільки COM вимагає їх називати.
Чи надсилається мій бінарник кудись? Читання формату, байти, дизасемблювання та ресурси обробляються на вашому комп'ютері. Відновлення коду виконується на наших серверах — у цьому сенс редакції Desktop + Cloud.
Чи це законно? Це залежить від вашої юрисдикції та ваших прав на бінарник. Передбачене використання — відновлення вашого власного коду або коду, на який ви маєте права чи дозвіл.
Див. також
Посібник VBReFormer OnlineСпробувати без покупки