일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 라인 영상통화 사기
- 영상통화 협박
- 카톡 영상 협박
- 사이버범죄구제업체
- 동영상유포협박
- 라바웨이브
- 카톡 영상 유출
- 영상유출
- 영통사기
- 영상사기
- 몸캠피씽
- 엑셀#직장인칼퇴#칼퇴#직장인엑셀#VBA 배열#배열변수
- 영통협박
- 몸캠피싱
- 팀카시아
- 영상통화 사기
- 영상통화 유출
- 영통 협박
- 사이버범죄구제
- 카카오톡 사기
- 메신저톡 사기
- 라인 동영상 유포
- 라인 영상통화 협박
- 영상통화사기
- 사이버 범죄 구제 업체
- 카톡 영상 사기
- 동영상 사기
- 랜덤채팅 사기
- 카카오톡 협박
- 영상 사기
- Today
- Total
Lost Information!
엑셀 VBA 기본 - 엑셀VBA 프로젝트의 비밀번호 풀기 - 1편 본문
모두가 칼퇴하는 그날까지~
지난 글에서는
엑셀 시트가 잠겼을 때
엑셀 VBA 사용하지 않고
푸는 방법을 알려드렸습니다.
만일 저번 내용을 모르시거나
기억이 나질 않으신다면
밑에 글을 참고해주세요.
엑셀 VBA 기본 - 잠긴 엑셀시트를 풀어보자 - 2편
모두가 칼퇴하는 그날까지~ 지난 글에서는 엑셀 시트가 잠겼을 때 엑셀 VBA으로 푸는 방법을 알려드렸습니다. 만일 저번 내용을 모르시거나 기억이 나질 않으신다면 밑에 글을 참고해주세요. r
red-s.tistory.com
이번 글에서는
엑셀 워크시트 외에
VBA에 비밀번호가
걸려있을 때 푸는 방법을
알려드리도록 하겠습니다.
사실 VBA에 비밀번호를
설정하는 방법도 모르실 수도
있기 때문에 이 방법도
알려드리도록 하겠습니다.
그럼 ALT +F11을 눌러주세요.
먼저 이렇게 VBA를 적었다고
가정하고 나서
VBA 도구 탭에 VBAProject 속성을
클릭해주세요.
보호 탭을 누르고
읽기 전용으로 프로젝트 잠금을
체크하고 나서 암호를
설정해주시면 됩니다.
저장 후에 종료하고 다시 실행하면
이렇게 ALT + F11을 눌러
VBA를 확인하려고 해도
암호를 입력하라는 창이
나오게 됩니다.
물론 남이 VBA를 설정하는 것이
싫어서 설정해놓았을 수도 있지만
자신이 까먹게 되는 경우
이를 풀어야만 할 텐데요.
다소 길게 적어야만 하는 만큼
밑에 복사하시라고 남겨놓겠습니다.
Option Explicit
Private Const PAGE_EXECUTE_READWRITE = &H40
Private Declare PtrSafe Sub MoveMemory Lib "kernel32" Alias "RtlMoveMemory" _
(Destination As LongPtr, Source As LongPtr, ByVal Length As LongPtr)
Private Declare PtrSafe Function VirtualProtect Lib "kernel32" (lpAddress As LongPtr, _
ByVal dwSize As LongPtr, ByVal flNewProtect As LongPtr, lpflOldProtect As LongPtr) As LongPtr
Private Declare PtrSafe Function GetModuleHandleA Lib "kernel32" (ByVal lpModuleName As String) As LongPtr
Private Declare PtrSafe Function GetProcAddress Lib "kernel32" (ByVal hModule As LongPtr, _
ByVal lpProcName As String) As LongPtr
Private Declare PtrSafe Function DialogBoxParam Lib "user32" Alias "DialogBoxParamA" (ByVal hInstance As LongPtr, _
ByVal pTemplateName As LongPtr, ByVal hWndParent As LongPtr, _
ByVal lpDialogFunc As LongPtr, ByVal dwInitParam As LongPtr) As Integer
Dim HookBytes(0 To 11) As Byte
Dim OriginBytes(0 To 11) As Byte
Dim pFunc As LongPtr
Dim Flag As Boolean
Private Function GetPtr(ByVal Value As LongPtr) As LongPtr
GetPtr = Value
End Function
Public Sub RecoverBytes()
If Flag Then MoveMemory ByVal pFunc, ByVal VarPtr(OriginBytes(0)), 12
End Sub
Public Function Hook() As Boolean
Dim TmpBytes(0 To 11) As Byte
Dim p As LongPtr, osi As Byte
Dim OriginProtect As LongPtr
Hook = False
#If Win 64 Then
osi = 1
#Else
osi = 0
#End If
pFunc = GetProcAddress(GetModuleHandleA("user32.dll"), "DialogBoxParamA")
If VirtualProtect(ByVal pFunc, 12, PAGE_EXECUTE_READWRITE, OriginProtect) <> 0 Then
MoveMemory ByVal VarPtr(TmpBytes(0)), ByVal pFunc, osi + 1
If TmpBytes(osi) <> &HB8 Then
MoveMemory ByVal VarPtr(OriginBytes(0)), ByVal pFunc, 12
p = GetPtr(AddressOf MyDialogBoxParam)
If osi Then HookBytes(0) = &H48
HookBytes(osi) = &HB8
osi = osi + 1
MoveMemory ByVal VarPtr(HookBytes(osi)), ByVal VarPtr(p), 4 * osi
HookBytes(osi + 4 * osi) = &HFF
HookBytes(osi + 4 * osi + 1) = &HE0
MoveMemory ByVal pFunc, ByVal VarPtr(HookBytes(0)), 12
Flag = True
Hook = True
End If
End If
End Function
Private Function MyDialogBoxParam(ByVal hInstance As LongPtr, _
ByVal pTemplateName As LongPtr, ByVal hWndParent As LongPtr, _
ByVal lpDialogFunc As LongPtr, ByVal dwInitParam As LongPtr) As Integer
If pTemplateName = 4070 Then
MyDialogBoxParam = 1
Else
RecoverBytes
MyDialogBoxParam = DialogBoxParam(hInstance, pTemplateName, _
hWndParent, lpDialogFunc, dwInitParam)
Hook
End If
End Function
모조리 복사해서 붙여 넣어주세요.
또한 모듈을 하나 더 추가해서
Sub unprotected()
If Hook Then
MsgBox "VBA 암호가 정상적으로 해제되었습니다."
End If
End Sub
까지 추가해주세요.
그러고 나서 암호해제 버튼까지
만든 후에 VBA를 연결시켜준 뒤에
실행하게 되면 잠겨있던
엑셀 VBA에 풀리게 될 것입니다.
이에 대한 설명은 다음 글에
알려드리도록 하겠습니다.
그럼 여기까지 궁금하신 점은
댓글에 남겨주시고
공감과 구독도 부탁드립니다.