Decompiler-VB.Net
KR
로그인
VBReFormer Gen2 처음부터 다시 작성한 엔진, 완전한 P-code 지원, 그리고 공개 베타 중인 온라인 스튜디오. 발표 내용 읽기 →
문서
VBReFormer Online

VBReFormer Online 매뉴얼

VBReFormer Online 사용자 매뉴얼: 브라우저에 VB6 실행 파일을 놓고, 재구성된 코드를 탐색하고, IDE에서 다시 열 수 있는 프로젝트를 다운로드.

2026. 9. 20. 업데이트11개 장

브라우저 속의 스튜디오입니다. Visual Basic 5 또는 6 실행 파일을 끌어다 놓고, 재구성된 코드를 탐색한 뒤, VB6 IDE가 다시 여는 아카이브를 가지고 떠납니다. 설치할 것 없이 어떤 시스템에서든 작동합니다. macOS, Linux, 그리고 데스크톱 애플리케이션에는 너무 오래된 Windows 버전까지 포함해서입니다.

번역에 관한 안내. 온라인 스튜디오의 인터페이스는 한국어로 제공되지 않습니다. 이 매뉴얼에서는 탭, 뷰, 버튼의 이름을 스튜디오에 표시되는 영어 그대로 인용하고, 처음 나올 때 괄호 안에 한국어 번역을 덧붙입니다.

1. 스튜디오 열기

시작하기 위해 설치할 것도, 설정할 것도, 만들어야 할 계정도 없습니다. 최신 브라우저에서 스튜디오 주소를 열면 그것으로 끝입니다.

  • 어떤 시스템에서든 — 스튜디오는 브라우저에만 의존합니다. Mac, Linux 컴퓨터, 또는 10보다 오래된 Windows에서 VBReFormer를 사용하는 유일한 방법입니다.
  • 11개 언어 — 웹 스튜디오는 11개 언어로 제공되며, 데스크톱 애플리케이션의 거의 네 배입니다. 선택기는 머리글에 있습니다.
  • 밝은 테마 또는 어두운 테마 — 스튜디오는 시스템 설정을 따르며, 직접 지정할 수도 있습니다.

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

2. 바이너리 끌어다 놓기

  1. 선언에 체크합니다. 스튜디오는 사용자가 그 프로그램의 소유자이거나 그 코드를 분석할 권리가 있음을 선언하도록 요구합니다. 이는 이용 조건이지 형식적인 절차가 아닙니다.
  2. 파일을 끌어다 놓습니다. 드롭 영역으로 끌어오거나 파일을 찾아 선택합니다. 허용되는 형식: .exe, .dll, .ocx. 최대 크기: 64 MB. 이 제한은 업로드 실패 후에 알게 되는 것이 아니라 화면에 표시되어 있습니다.
  3. 분석이 진행되도록 둡니다. 스튜디오는 각 단계를 진행에 따라 카운터와 함께 이름으로 표시합니다: Receiving the file(파일 수신 중) → Analysing the binary(바이너리 분석 중) → Decompiling(디컴파일 중) → Inventorying symbols(심볼 목록화 중) → Call graph(호출 그래프) → Control flow(제어 흐름).

소요 시간은 바이너리의 크기와 성격에 따라 다릅니다. 참고로 9.35 MB 실행 파일은 열기부터 프로젝트 기록까지 약 12초가 걸립니다.

분석이 끝나면 스튜디오는 어떤 종류의 바이너리를 발견했는지도 알려 줍니다: 네이티브 코드, P-code, 또는 종류 미확정.

3. 파일은 어떻게 되는가

파일은 분석된 뒤 세션과 함께 삭제됩니다. 아무것도 보관되지 않습니다.

이 문구는 드롭 페이지에 적혀 있으며, 서비스가 실제로 그렇게 동작합니다. 바이너리는 작업 세션 동안만 처리되고 세션과 함께 사라집니다. 보관되지도, 색인되지도, 재사용되지도 않습니다.

이것이 또한 뜻하는 것. 작업 역시 세션이 끝나면 남지 않습니다. 탭을 닫거나 세션이 만료되면 바이너리를 다시 끌어다 놓아야 합니다. 떠나기 전에 아카이브를 다운로드하세요. 서비스가 다시 시작될 때도 진행 중인 세션이 끊깁니다. 원본 파일은 사용자의 컴퓨터에 있으므로 위험하지 않지만, 진행 중이던 탐색은 잃게 됩니다.

바이너리의 기밀성이 계약상의 문제라면, Desktop 에디션은 파일을 읽는 것에 해당하는 모든 작업(형식, 바이트, 디스어셈블리, 리소스)을 로컬에서 처리하고, 재구성에 해당하는 것만 서비스로 보낸다는 점을 참고하세요.

4. 바이너리로 들어가는 네 가지 길

왼쪽 패널은 네 가지 진입점을 제공하며, 각각 서로 다른 네 가지 질문에 답합니다.

탭 답하는 질문
Project(프로젝트) “이 프로그램은 어떻게 구성되어 있는가?” — VB6가 보았던 그대로의 폼, 클래스, 모듈과 그 프로시저의 트리.
Symbols(심볼) “이것은 어디에 정의되어 있는가?” — 모든 심볼의 종류와 컨테이너를 담은 전체 목록. 바이너리에서 읽어 낸 이름과 합성해야 했던 이름을 구별하므로, 무엇을 신뢰할 수 있는지 곧바로 알 수 있습니다.
Search(검색) “이 텍스트는 어디에 나타나는가?” — 재구성된 코드뿐 아니라 디자이너 섹션에서도.
Resources(리소스) “코드 외에 무엇이 들어 있는가?” — 아이콘, 커서, 비트맵, 문자열 테이블, 버전 정보를 종류, 크기, 내용과 함께. 라이선스 없이 제공됩니다. 리소스는 읽는 것이지 재구성하는 것이 아니기 때문입니다.

트리에서 모든 멤버는 바이너리가 선언한 가시성을 갖습니다. Public, Private, Friend입니다. 가시성을 읽을 수 없었던 멤버에는 아무 표시도 붙지 않습니다. 모르는 것은 적지 않기 때문입니다.

이름 바꾸기

웹 스튜디오에서는 심볼의 이름을 바꿀 수 있으며, 이름 바꾸기는 전역적입니다. 다른 모듈의 호출 지점도 따라옵니다. 바이너리 작업의 중심이 되는 동작입니다. 디컴파일러는 논리를 돌려주고, 사용자는 이름을 돌려줍니다.

5. 뷰

일곱 가지 뷰가 있으며, 스튜디오 자체가 각 뷰 아래에 무엇을 보여 주는지와 라이선스가 필요한지를 명시합니다.

뷰 표시 내용 라이선스
Source(소스) 재구성된 VB6 코드 라이선스 없이 미리 보기
IR 디컴파일러가 제어 흐름을 다시 구성하기 전에 보는 것 라이선스 없이 미리 보기
Assembly(어셈블리) 심볼이 해석된 x86 기계어 코드 전체 제공
P-code VB6 가상 머신의 opcode 전체 제공
Designer(디자이너) 폼의 디자이너 섹션 전체 제공
Project 재구성된 .vbp 전체 제공
Structure(구조) 읽어 낸 그대로의 형식 구조 전체 제공

경계선. 파일에서 읽어 내는 것은 무료이고, 재구성되는 것은 판매됩니다. 디스어셈블리, 구조, 디자이너 섹션, .vbp는 사용자의 실행 파일에 존재하는 테이블에서 가져옵니다. VB6 소스는 어디에도 존재하지 않습니다. 다시 만들어야 하며, 그 작업이 곧 제품입니다.

코드 아래에서 스튜디오는 현재 프로시저에 대해 디컴파일러가 보고하는 것, 즉 진단(수행할 수 없었던 것과 그 이유)도 보여 줍니다. 결과가 놀랍게 느껴질 때마다 가장 먼저 확인해야 할 곳입니다.

6. 컴파일이 남기는 것과 버리는 것

이 장에서는 폼은 매우 읽기 쉽게 나오는데 .bas 모듈은 기술적인 이름으로 나오는 이유를 설명합니다. 규칙은 단순합니다.

Visual Basic이 실행 시에 필요로 하는 것은 파일에 기록되어 있으며, VBReFormer는 그것을 다시 찾아냅니다. 컴파일 후 더 이상 필요 없어진 것은 버려졌으며, 누구도 되살릴 수 없습니다.

남는 것: 폼, 클래스, 모듈의 이름 · 컨트롤의 이름 · 이벤트 핸들러 · 클래스의 public 멤버 · 인터페이스 속성 · VB 런타임 호출(635개 함수) · Win32 API(15,680개 시그니처) · 코드의 구조 · 문자열.

파일에 없는 것: 주석 · 지역 변수의 이름 · 매개변수의 이름 · 값으로 대체된 명명된 상수 · .bas 모듈의 프로시저 이름 · 원래의 들여쓰기.

검증할 수 있는 예

아래 발췌는 Visual Basic 6에 함께 제공되는 설치 마법사 SETUP1.EXE에서 가져온 것으로, Microsoft가 그 소스 코드를 배포합니다. 따라서 VB6를 보유한 사람이라면 누구나 이 비교를 다시 해 볼 수 있습니다.

원본 소스, 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가 아닙니다.

마커 읽기

VBReFormer는 절대 추측하지 않습니다. 확정할 수 없는 값은 지어내는 대신 표시됩니다.

마커 의미 대처
proc_42C506 주소로 지정된 프로시저 이름을 바꿉니다. 이름은 전파됩니다
var_18, arg_8 지역 변수 또는 매개변수 어떻게 쓰이는지 읽은 뒤 이름을 바꿉니다
? 확정되지 않은 값 같은 위치를 Assembly 뷰에서 확인합니다

?가 포함된 파일은 VB6 IDE에서 거부됩니다. 마커는 사용자가 판단하도록 있는 것이지, 그대로 다시 컴파일하라고 있는 것이 아닙니다. 그럴듯하지만 틀린 값은 디컴파일러가 만들어 낼 수 있는 최악의 결과입니다.

7. 그래프

두 가지 그래프가 있으며, 둘은 같은 이야기를 하지 않습니다.

  • Calls(호출) — 무엇이 무엇을 호출하는지: 프로그램의 아키텍처. Callers(호출자), Callees(피호출자), Both(둘 다) 필터와 고립된 노드를 숨기는 옵션이 있습니다.
  • Flow(흐름) — 실행이 어디로 가는지: 블록, 진입점, 루프 헤더, 루프 역방향 에지, 그리고 UNREACHABLE(도달 불가능)로 표시된 블록.

블록을 읽는 다섯 가지 방법

그래프에서 블록을 선택한 다음, 그 안에서 무엇을 볼지 선택합니다: Shape(형태), IR, VB6, Assembly 또는 P-code. 같은 프로그램 조각을 다섯 가지 수준으로 읽습니다.

렌더링의 정직함. 스튜디오는 몇 개의 블록이 리스팅 줄에 고정되어 있는지, 몇 개가 증명된 주소가 없는지를 명시합니다. 후자의 명령은 앞선 슬라이스에 포함됩니다. 그러면 슬라이싱의 어느 부분이 확실한지 알 수 있습니다.

그래프에는 라이선스가 필요합니다. 무엇이 무엇을 호출하고 실행이 어디로 가는지가 곧 프로그램의 아키텍처이기 때문입니다. 디스어셈블리와 구조는 라이선스 없이도 열려 있습니다.

8. 미리 보기와 라이선스

라이선스가 없어도 Source 뷰가 거부되지는 않습니다. 부분적으로 가려진 채로 표시됩니다. 아무것도 결제하기 전에, 자신의 바이너리에서 구조, 복구된 이름, 그리고 재구성의 실제 품질을 볼 수 있습니다.

이는 의도된 것입니다. 아무것도 보지 못하는 방문자는 판단할 수 없습니다. 그리고 구독이 만료되더라도 닫힌 문 대신 무엇을 되찾게 될지를 보게 됩니다.

한 번에 한 워크스테이션

VBReFormer 라이선스는 한 번에 한 워크스테이션에서 사용할 수 있으며, 브라우저 하나가 워크스테이션 하나로 계산됩니다. 라이선스가 다른 곳에서 사용 중이라면 스튜디오는 계정에서 이곳으로 이전하거나 시트를 추가할 것을 제안합니다. 이것은 부드러운 거부입니다. 사용자는 이미 결제했고, 부족한 것은 없습니다.

9. 소스 다운로드

전달 패널은 .vbp와 그 파일들(.bas, .cls, .frm)을 담은 .zip 아카이브를 만들며, 파일은 IDE가 기대하는 대로 ANSI로 기록됩니다. 패널은 다운로드 전에 파일 수와 크기를 표시합니다.

프로젝트를 열기 전에 노트를 읽으세요

스튜디오는 재구성할 수 없었던 것을 항목마다 이유와 함께 보여 줍니다. 외부 참조, 컴파일 옵션, 시작 모드 같은 일부 정보는 바이너리의 어떤 구조에도 없습니다. 지워진 것이 아니라 애초에 거기 없었던 것입니다. 그래서 지어내는 대신 보고됩니다.

IDE에서 참조가 빠져 있으면 Project ▸ References(프로젝트 ▸ 참조)에서 추가하세요. ? 마커가 있다면 직접 처리해야 합니다.

그런 다음 패널은 다른 바이너리를 분석할 것을 제안합니다. 세션이 새로 시작되고 이전 파일은 삭제됩니다.

10. Online인가 Desktop인가?

두 에디션은 같은 엔진을 공유하며 같은 코드를 만들어 냅니다. 다만 같은 목적을 위한 것은 아닙니다.

Online Desktop
설치 없음 MSI, Windows 10+
시스템 모두 Windows 10 및 11
인터페이스 언어 11 3
트리, 심볼, 검색, 이름 바꾸기 ✔ ✔
7가지 뷰 ✔ ✔
호출 및 흐름 그래프 ✔ ✔
프로젝트 내보내기 ✔ (zip) ✔ (폴더)
리소스: 목록과 내용 ✔ ✔
리소스: 파일로 추출 ✘ ✔
주석이 달린 16진 뷰 ✘ ✔
그려진 디자이너, 이미지 내보내기 ✘ (텍스트 섹션만) ✔
바이너리 패치 ✘ ✔
상호 참조 ✘ ✔
개체 브라우저, Win32 API 브라우저 ✘ ✔
북마크, 렌더링 옵션 ✘ ✔
작업이 세션 후에도 유지됨 ✘ ✔
과금 크레딧 구독

요약 — Online은 바이너리를 열고, 무엇을 하는지 이해하고, 소스를 가지고 떠나기 위한 것입니다. Desktop은 바이너리를 오랫동안 다루기 위한 것입니다: 바이트, 리소스, 상호 참조, 패치, 그리고 탭을 닫아도 사라지지 않는 작업.

11. 자주 묻는 질문

제 바이너리가 보관되나요? 아니요. 분석된 뒤 세션과 함께 삭제됩니다. 3장을 참조하세요.

제 파일이 64 MB보다 큽니다. 그것이 스튜디오의 제한이며, 파일을 끌어다 놓기 전에 명시되어 있습니다. 더 큰 바이너리라면 Desktop 에디션에는 그런 업로드 제약이 없습니다.

바이너리의 리소스는 어디에 있나요? 왼쪽의 Resources 탭에 있으며, 라이선스가 필요 없습니다. 모든 항목을 종류와 크기와 함께 볼 수 있고, 열면 그 내용도 볼 수 있습니다. 이미지는 그려지고, 텍스트는 표시되며, 그 밖의 것은 감춰지는 대신 바이트로 표시됩니다. 파일로 추출은 16진 뷰와 마찬가지로 Desktop 에디션 고유의 기능입니다.

왜 코드가 프로시저 중간에서 끊기나요? 그것이 미리 보기입니다. 라이선스가 없으면 무료 에디션은 구조, 이름, 전체 디스어셈블리를 보여 주지만, 재구성된 본문에는 라이선스가 필요합니다.

탭을 닫았더니 모든 것을 잃었습니다. 작업은 세션이 끝나면 남지 않습니다. 떠나기 전에 아카이브를 다운로드하세요. 바이너리 자체는 여전히 사용자의 컴퓨터에 있습니다.

내보낸 코드는 그대로 다시 컴파일되나요? 대개 그렇습니다. 149개 프로젝트의 테스트 벤치에서 121개가 수정 없이 다시 컴파일됩니다. 나머지는 빠진 참조를 추가하거나 몇몇 마커를 처리해야 합니다.

실행 파일이 패킹되어 있습니다. 먼저 언패킹해야 합니다. 그렇지 않으면 파일 안에서 VB6 구조가 보이지 않습니다.

합법인가요? 사용자의 관할 법역과 바이너리에 대한 권리에 따라 다릅니다. 끌어다 놓을 때의 선언이 바로 그것에 관한 것입니다. 의도된 용도는 자신의 코드, 또는 권리를 보유하거나 분석 허가를 받은 코드를 복구하는 것입니다.