1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

[Excel VBA] マクロでシートの保護(パスワード付き)をすることについて

Last updated at Posted at 2024-08-28

最初から本題

エクセルのシートってパスワードで保護できるじゃないですか。

マクロでその設定をする時、
Sheets(1).Protect Password:="test@pass"
みたいに平文で入力するのってリスキーですよね、という話。

VBEにてマクロが見えないようにプロジェクトにパスワードは設定できるので、
マクロからパスワードが漏洩することは防げますけど…(以下、警鐘に続く)

警鐘

エクセルのファイルって実はzipファイルみたいなものなんですよね。
だから保存されたファイルの拡張子を書き換えて解凍すると中身が見えるんです。

testFile.xlsm → testFile.zip → testFile (フォルダ)

解凍されたフォルダの中には色々ファイルがあって、
だいたい以下の様になってます(一部省略)

testFile
├_rels
├docProps
└xl
 ├_rels
 ├ctrlProps
 ≈
 ├vbaProject.bin
 └workbook.xml

問題になるのは太字の"vbaProject.bin"です。

こいつをメモ帳やサクラエディタ等で開くと、
ガリガリ文字化けしてますが、所々マクロが見えてしまうんですよね
image.png

その中にはtest@passというさっき設定したパスワードも…

ファイルによっては.Protect Password:=の一部が読める状態で表示されることもあり
その後ろにパスワードがあると推測できるものもあります。

今回はパスワードがフルで見えてしまってますが、一部しか見えない場合もあります。
しかし一部でも見えてしまうことは攻撃者へヒントを与えるのと同義です。

防ぎたい!

これってなんとかしたいですよね。(私だけ?)

私は以下みたいに分散して、
コードの中でも散りばめるぐらいしか思い浮かびませんでした。

    p1 = "te"
    p2 = "st"
    ch = Chr(64)
    p3 = "pa"
    p4 = "ss"

    Sheets(1).Protect Password:=p1 & p2 & ch & p3 & p4

こんな小細工じゃなくて、根本的に解決できるって情報大歓迎です!

以上!

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?