메뉴 닫기

[VB6] Reversing P-Code

비주얼 베이직 6.0은 위 그림과 같이 크게, 2가지 컴파일 옵션을 지원하는데, 일반적으로는 기계어로 컴파일하나, 프로그래머가 설정을 변경한 경우, P-코드로 컴파일 됩니다.

P-코드란 Pseudo Code(의사코드)의 약어로서, CPU가 직접 이해할수 없는 중간언어 입니다.

비주얼 베이직 3/4버전은 P-Code밖에 지원하지 않았지만, 5/6버전은 기계어를 지원하고, 기계어 코드로 컴파일하는것이 기본 옵션입니다.

일반적으로 P-Code로 컴파일된 프로그램의 경우 올리디버거나, x32dbg 같은 기존의 리버싱툴로 분석하는것이 불가능합니다.

따라서 P-Code로 작성된 프로그램을 분석할때는, 별도의 프로그램을 사용해야 합니다.

아래 표는 VB6의 P-Code를 분석할수 있는 프로그램을 성격에 따라 구분해둔 표입니다.

프로그램 명 구분
ExDec 디스어셈블러
P32Dasm 디컴파일러
WKTVBDE 디스어셈블러/디버거
SemiVBDecompiler 디컴파일러
VB Decompiler Pro 디스어셈블러/디컴파일러

위 도구 중  WKTVBDE는 거의 유일하게 VB6 P-Code를 디버깅할 수 있습니다.

Download : WKTVBDE_4.3.rar

WKTVBDE의 사용법은 그리 어렵지 않습니다.

 

우선, 디버깅은 원하는 프로그램이 있는 폴더에 MSVBVM60.DLL과 VB6KO.DLL을 넣어줍니다.

그런다음, 32비트의 경우 %windir%\system32 에, 64비트의 경우 %windir%\syswow64에 WKTVBDE.DLL과 bdasmdll.dll를 넣어주고,

P-Code Loader4.3.exe를 실행하고, 디버깅을 원하는 프로그램을 열어줍니다.

 

 

자 이제, Action -> Run을 누릅니다!

메세지 박스가 2개 나올텐데, 둘다 Ok를 눌러줍니다,(5초안에 누르세요!)

 

이벤트가 발생하면(Form_Load 는 제외.) 해당 이벤트에 bp가 걸리면서 디버깅이 가능합니다.
 
기능이 간단한것 밖에 없지만, String Refs. 와 Analize BranchX가 좀 특별하네요.
전자는 스트링 레퍼런스를 보여주는 역할을 하고, 후자는 조건(분기)문을 찾아주는 역할을 합니다.(크랙할때 편하겠네요..ㅋㅋ)
 

WKTVBDE로 프로그램을 분석하면, 한정된 부분만 보여 주기때문에 전체적인 프로그램 로직을 살펴보는것이 어렵습니다.

따라서, 전체적인 로직을 살펴보거나 원하는 이벤트를 찾을떄에는, 디컴파일러를 사용하는것이 편리합니다.

 
 

1 Comment

댓글 남기기

이메일은 공개되지 않습니다.