본문 바로가기

Analysis

17. MS Office VBA 프로젝트 암호 깨부수기(+xlSheetVeryHidden 깨부수기)

악성코드를 분석하다보면, MS Office를 이용하는 악성코드들은 매크로를 통해 퍼지는 경우가 대부분이다. 문제는, 악성코드 본파일에 이용되는 정보를 담고있는 시트 파일을 xlSheetVeryHidden 옵션으로 숨겨버리는 경우가 있다. xlSheetHidden 옵션과는 다르게 xlSheetVeryHidden 옵션은 코드 수정을 통한 실행 이외에는 시트가 보여지지 않는다. 

 

또, 매크로를 실행시키는 VBA 프로젝트에 암호를 걸어서 보지 못하게 만드는 악성코드들도 있다.

 

이 글에서는 xlSheetVeryHidden 옵션을 걸고, 해제하는 것(사실 이건 코드만 조금 바꿔주면 되서 굉장히 쉽다.)과 VBA 프로젝트에 암호가 걸려있을 경우 암호를 어떻게 깨부수는지에 대해 정리한다.

 

일단 Sheet1, Sheet2, Sheet3 가 있는 엑셀파일에서 Sheet1에만 어느정도 내용을 채워주고 이 Sheet1을 xlSheetVeryHidden 옵션으로 숨겨보도록 하자.

 

Sheet1

숨기는건 그다지 어렵지 않다. 한줄의 코드로 완성된다.

Worksheets("시트명").Visible = xlSheetVeryHidden 한줄이면 해당 시트는 감쪽같이 사라진다.

xlSheetVeryHidden 코드

실제로 실행시키고 나니 아래처럼 Sheet1 시트가 사라졌다. 일반적으로 숨김 옵션에서 보기를 눌러 볼 수도 없다. 코드를 수정해 실행시켜야만하다.

사라진 Sheet1

푸는법도 당연히 간단하다.(물론 VBA 프로젝트에 암호가 걸려있는 상태라면 좀 다르지만..) 옵션을 xlSheetVeryHidden 에서 True로 바꿔주기만 하면 된다. 이 코드를 실행시키면 Sheet1이 다시 보이게된다.

옵션이 변경된 코드

 

이제, VBA 프로젝트에 암호가 걸려있으면 어떻게 깨부수는지에 대해 알아본다.

먼저, 아래 사진처럼 VBA 프로젝트에 암호가 걸린 MS Office 파일 하나를 준비한다.

암호가 걸린 VBA 프로젝트

암호는 당연히 모르기 때문에 입력해서 풀 수가 없다. HEX Editor 하나를 준비해 파일을 던져본다.

XVI 에디터

던진 다음에 스트링 값에서 DPB 라는 값을 검색해준다. 이 DPB 값으로 인해 암호가 걸리기 때문에 여기에 조그마한 교란을 주면 된다.

찾은 DPB 값

DPB 라는 값을 DPX 처럼 한 부분만 바꿔준다. 그러면 MS Office 자체에서는 암호가 걸려있다는 것에 교란이 없기 때문에 오류가 일어나서 암호없이 프로젝트에 접근할 수 있게 된다.

DPX로 수정

수정하고나서 열어보면 잘못된 키를 가지고 있다고 경고창이 뜬다. 그냥 "예"를 누르고 로드를 계속한다.

오류창

그러면 들어가면서도 또 오류가 발생했다고 나온다. 이것도 5~6번 정도 뜨는데 확인을 눌러서 다 무시해준다.

오류창

그렇게 진입하게 되면 마치 암호가 걸려있지 않은 것처럼 매크로 파일들이 등장하게된다. 근데 여기서 끝이 아니다, 지금은 오류가 발생하면서 프로젝트에 접근할 수 있는 상태이지 제대로 코드를 동작시키거나 할 수는 없다. 임의로 프로젝트를 수정해줘야 실제로 코드를 동작시키는 등의 행위를 할 수 있다.

정상적으로 보이게되는 프로젝트

프로젝트 속성으로 들어가서 읽기 전용으로 잠금 부분을 체크 해제해 수정할 수 있게 해주고 암호 부분에서도 자신이 생각하는 설정으로 암호를 설정해준다.

프로젝트 속성 수정

이 루틴을 따라오면 아래 사진과 같이 프로젝트 암호를 깨부수고 프로젝트 안의 매크로를 실제로 확인하고 코드를 하나하나 동작시켜볼 수도 있다.

정상적으로 보이는 프로젝트

반응형