それだとエラー出たら(パスワード違っていたら)終わっちゃいますよ やるんならOpenメソッドの下に If err.Number = 0 Then '開いたときにエラーが出なかったら↓の処理 Debug.Print "Password:= " & i Exit Sub ’このForのループの後に処理を入れたかったらExit Forで End If Err.Clear '次のエラーが発生する前にいったんクリアする みたいな感じで、開いたらイミディエイトウィンドウにパスワードを記録して終了するって感じ
Dim cells as Integer と打って実行すると、欠陥を持ったxlsmファイルに生まれ変わります。 (コマンド「cells」をユーザ変数に定義してしまったからーです) Dim Count as Integer もやりがち。(1,2,3と数えるためのユーザー変数として使おうとして墓穴を掘る)
少しかじったからこれは分かる さいしょの Dim i As long これはlong型(整数値を格納するもの) のiと言う変数を作る。 次の For i=1 To 9999 ------ Next i はFor ○○ ~Next のところまでをiに1を足しながら9999迄行くことを示している。iがもし9999まで行ったらこのループを抜けることにしている その中身のWorkbooks.open(~) は動画の通りそのworkbookを開くこと。 実際には 最初のworkbooksは範囲を指定していて、そこに対してOpen(開く動作)を指定している。引数にpassword,ファイルのパス名 C:¥◇おふざけ¥機密情報.xlsm を指定しているから、これを改良するなら 最初に Dim file As string file = inputbox("どのファイルを開きますか?") 的なことをいれた方がいい気がする。 (総当たりでは) (このままこのVBE のコードが使えるとは限らないよ) 追記 Workbooks.open(file,,, i) とする
VBAを学ぶ前にも見たことがあって、その時は全然意味わかんかったんだけど今は意味がわかることに感動している。
これ見ると、パスワードに英数字どっちも入れろとか大文字入れろとかの重要性がわかる。
数字4桁程度のパスワードなら、いざという時にこうやって簡単にこじ開けられるから、ある意味便利だよ。
ブルートフォースでなんとかなるかな。
一回あたりの処理が大したことなかったらcudaで20分ぐらいで開くかもね
簡単...?
ランダムでパスワードを作成して閉じるプログラム。こんなプログラムを組む人に脱帽です。
シンプルなコードですが、驚異の破壊力ですね!
半年前はSUMすらわかってなかった私ですが、
このチャンネルを見てから電卓を使わずに家計簿をつけられるようになりました
後半のコードもパスワード解読だから、
地味にやばいな…。つまり…、
前半…悪用厳禁
後半…悪用厳禁
この動画全体…悪用厳禁!
強いて挙げるなら、開くのに成功した時のパスワードをどこかに保存しておくといいかも?
面白かったです❗️
vba初心者なので、感心しました!
最適解じゃないかな、少なくともVBA上では。
アプリの仕組み上excelで実行させる他ないのでVBA一択になるだろうし、VBAに便利なメソッドが用意されてそうには無いし。ブルートフォースが一番。
accessからの外部接続とかならもうちょいあれこれ出来るかも?
報復にエクセル資料にコレとボタンを追加しておけば大惨事になるに違いない
ボタンの名前「保存する」
なるほど。これがVBAにおける一種のブルートフォース攻撃なんですね。わかりました😅
これにアルファベット,記号を加えるとえらい組み合わせ&コードの長さになりますよね❓
部長の”凄み”が分かる動画。
実際この人パソコン素人じゃ無いだろ・・
意味が解った途端くっそ恐ろしいと感じた…
for to next使わなくてもon error gotoで良いのでは?
昔ちょっとだけ齧った程度の知識じゃ理解できませんでした…でもやっぱりVBAって面白い
vbaわかんないけど多分
コード自体は
このファイルに※正確には対象指定
パスワードとして
1~9999のどれかを設定し
ファイルを閉じる
(確認メッセージ出さない設定付き)
って内容で
それを実行したからファイルにパスワードかかっちゃったので
それを
1~9999総当りでパスワード入力
ってやったってことだと思います
VBAはよくわからないけど、他の言語使ってるとなんとなく挙動わかるね
こんなに簡単にパスワードが解読されてしまうのも
最初のパスワード設定が1~9999と簡単だったから。
もし日本語や記号とかもパスワードに使える文字に入ってきたら
もっと大変だったかも。
ɠѠ䃠瀷
とかだったら、大変でしたね...
とりあえずパスワードがなんだったのか分かるようにメッセージ出すくらいしておけば良さそう笑
部長ほんとすき
なんかアレですね、ドラマでよく見るハッキングみたいw
乱数は1つだけだし、
パスワードは数字だけだから楽よね。
授業でExcelのマクロを習ってる?んだけど、その担当の先生が「聞くより、自分で調べろ」って毎回怒ってくる。授業って何ですか?教えて下さい……
あー……
先生の言うこと、分かる気はする……
結局、プログラムを書くようになると、ある程度「自分でググって情報をかき集めて、頭の中で再構築して正解に近づく能力」も大事になってくるから、その力を身につけろって意味かな?
@@pickupline28
先生「どうやって調べたらいいと思う?」
→生徒回答
→「それで調べてみなさい」or「こういう検索のしかたの方がよいだろう」
ってな流れなら生徒に考えさせることもできるし授業としても有意義なものになるかな?
独学でC++とか学んできた人だから先生の気持ちも少しはわかるけど
だけどやはり学校だから調べ方教えるなりDocsの見方教えるなりしないといけない気がもする。金払ってるんだから聞かないと無駄じゃない?
パスワードが「0000」の可能性……
Openメソッドの一段下に
If Err.Number 0Then
Exit Sub
End If
Err.Number = 0
と入れたら途中で開いた後に余計なことしないから少しだけ終わるの早くなるかな?
それだとエラー出たら(パスワード違っていたら)終わっちゃいますよ
やるんならOpenメソッドの下に
If err.Number = 0 Then '開いたときにエラーが出なかったら↓の処理
Debug.Print "Password:= " & i
Exit Sub ’このForのループの後に処理を入れたかったらExit Forで
End If
Err.Clear '次のエラーが発生する前にいったんクリアする
みたいな感じで、開いたらイミディエイトウィンドウにパスワードを記録して終了するって感じ
開いたら止めたいなら例えば下記の様にすれば良い。
for i = 1 to 9999
err.clear
workbooks.open filename:=fn,password:=i
if err.number = 0 then exit for
next
尼○市職員「こ、これだー!」
機密情報(22KB)
22KB(ポケモンランクマッチシーズン24のポケモンシングル対応使用率ランキング)
つまり機密情報=ポケモンのランキング.....はっ!もしや部長の会社はニンテ
これ、つまり数字のパスワードって簡単に解読されてしまうってことか。
だから最近は数字、アルファベット、アルファベットでも1文字は大文字など組み合わせないと登録できなくなってるんやな。
For Each wb In Application.Workbooksでそれを実行したら一種のテロですねw
アルファベット込みパスワードファイルを開封するVBAもお願いしたいです
開けるスクリプトを渡さず閉じてしまおう
と言うことはパスワードがかかってる、エクセルファイルがあり、特定の者以外パスを知っていなくても、解除可能ってことか。
1から順にではなく、ランダムでパスワード入力出来たら速いんですかね?
可能だろうけど同じ数をPassとして試しちゃう可能性がある(てか多分そうなる)から早くはならないとおもう。
Excelのパスワードってバイナリエディタで編集すると簡単に変更できるんじゃなかったっけ…?
0000ってパスワードを設定したエクセルのハッシュ値で置き換えると、置き換えられたエクセルのパスワードも0000になるみたいな…
なる。office全般それ。正直何とかして欲しい。
勉強になったけど、ところでなんでそんなこと知ってるんや?そんな有名な話なんか?
すっ凄すぎる‼️😱もはやExcelを超越してWindowsを動かすプログラムになってしまった😓
もはや、意味を理解することまでしか追従出来ない😑
xlsxの拡張子をzipとかに変えて、中のファイルをごにょごにょすればどんなパスワードを書かれてても消せますね。
え…VBAってこんなにクセつよいん…?
昔、パスワードを無理やり上書きする方法があったなぁ……
xlsmでも有効か分からないけどw
なるほど、パワハラ上司への嫌がらせはこうするのか
4桁で良かったね。
一日あれば余裕。
3:13
理不尽すぎぃ!
エラーじゃなかったらメッセージボックスで表示したら良さそう
部長、絶対部下を試してるよな?
シーター駐車場代⇒が鵜「」コミュニケーション「」「54」green=sター
シーター
意味がわかると怖いというか、意味不明過ぎて(明らかな悪意でコードが書かれていて)怖い。
これ4桁数字とわかってたらあっさり総当たりされそうだけどわからん状態(英数記号入れて長さ上げて何回かループ入れることで生成とか)でやられたり総当たり対策やられたらまあ・・・きちいなぁ
確か4桁の数字の中にアルファベット1文字加えられただけで10倍以上時間かかるとかって聞いた事あるな…
@@Kyadellack
数字は0〜9の10パターンしかないんで10×10×10×10=10,000通りで済みますが
アルファベットを加えると10+26=36パターンになりますからね…どの桁がアルファベットかも分からないので
36×36×36×36=1,679,616通り
もしUnicodeの一覧からランダムってなったらやばい。𐎰や≩とかから選ばれるんでしょ?
@@吸血鬼ヴァート それは入力が困難なのでパスワードとして実用的かどうかが問題になりますね
困難というか面倒
まぁあえていうならこの状態でロック解除できても、パスワードわからないんじゃないかな?
新しいシートのA1にiを記入しておくといいんじゃないかな
再保存する時にpw削除
あ〜、cmd にも凶悪なコマンドあるなぁ。cドライブを即時消去するやつ。
Pythonの時の直感?みたいなので一つ分かれば大体分かる(読めるだけ)
4桁のパスワード総当たりでも10分かかるのか……!?
ブルートフォース攻撃ですね...
まあ、これが通用するのは限界がありますけどね。
4桁パスワードなら最悪10,000回,平均5,000回程度の試行で開けられますし。
なぜ4桁パスワードで最悪1000回の試行なんですか?
@@deanna6164 素で間違えた。10,000通りですね。
因みにですが、この事象になってもExcelファイルを構成するxml内に書かれているパスワードのコード消すと普通に使えますよ。
読み取りパスワードでは使えない気が
それはシート保護のパスワード
もっと早くできるかちょっと挑戦してみたけど、所詮俺も素人。
ダメだった。Application.ScreenUpdating = False(画面更新の停止)とApplication.Cursor = xlWait(マウスポインタの固定)
くらいしか思いつかなかった。
そして全然早くならなかったwww
その辺りは画面更新等が発生しないと影響が無いですね。
一番簡単な短縮方法はファイルを開けても処理が継続されるので、開けたら処理を終了するようにすることではないでしょうか?
コンピュータ触ったらいかん人種やな
VBAでできること
Dim cells as Integer と打って実行すると、欠陥を持ったxlsmファイルに生まれ変わります。
(コマンド「cells」をユーザ変数に定義してしまったからーです)
Dim Count as Integer もやりがち。(1,2,3と数えるためのユーザー変数として使おうとして墓穴を掘る)
PADで力押しを想像してたけど違ったw
プログラマー「ん?え?あ?んーえー総当たり攻撃で無理矢理パスワード解除するか。」
ド素人「ああああああああああ!もうこれはファイルを消してやり直すしかない…」
玄人「…総当たり攻撃っての知ってるけどやり方わかんない。困った☆」
わちょんのゆっくりIT(偏見)「よし。動画ネタにするか。処理はまた今度。」
ワイ「明日本気出すからさぼります。」
サボり魔(ネタ)「1年後に本気出すので今年はさぼります。」
ちなみに総当たり攻撃は別名ブルートフォース攻撃とも言います。
終了時に自動実行するようにしておくと。
python使えば一瞬で終わる
ua-cam.com/video/FDNz2nVhcfc/v-deo.html
xlsまでは、Windows95でも動くようにダンプに近い形式になっていましたが、xlsxやxlsmになってからは、xml方式をzpi圧縮しているだけのファイルになっていますね。
VC++は触れたことあるけどVBAは触れたことないなぁ
これさ、アルファベット含んでたら詰みよね?
わかりやすく数字にしているだけで0~9、A~Zの総当たりにすれば大丈夫ですよ。
膨大な時間がかかりますけどね
エクセルのパスワードって無意味なんだね
無意味は言いすぎかと
物置の南京錠程度の意味はあるかと。
zip変換して、PASSWORD解除すればいいんじゃね?
マクロ無効で開く
와따시와 간고쿠데쓰
え・・・今回、目の前でコードを書いた状態で数字の4桁ランダムとか「さいよわ」なパスワードだからいけますけど、パスワードかかってるんだったら
どんなコードが書かれてるかすらわかんないのでは?
普通にパスワードは文字列や下手したら特殊記号含めて、最低8文字とかがデフォじゃないですかね。
そもそも、こんな「ほぼなんの意味も使いみちもない」コード書く機会があるかな🙄
大文字小文字特殊記号も含めて総当たりするだけですが…
こういうのってファイルのパスワードを忘れた時にやるから、もうちょっと工夫した方が早くはなりそうですね(自分がよく使う言葉で辞書攻撃するとか)
@@ペリカンハイウェイ 今回4桁で10分だったので、1桁増える(5桁)だけでその10倍(100分)かかることになります
8桁ともなると、、、
まあ「入れそうなキーワード」が決まってるなら直接手で試したほうが早そうですね
4桁数字はキャッシュカードやマイナンバーカードにも使われているから危ないね。
少しかじったからこれは分かる
さいしょの
Dim i As long
これはlong型(整数値を格納するもの)
のiと言う変数を作る。
次の
For i=1 To 9999
------
Next i
はFor ○○
~Next のところまでをiに1を足しながら9999迄行くことを示している。iがもし9999まで行ったらこのループを抜けることにしている
その中身のWorkbooks.open(~)
は動画の通りそのworkbookを開くこと。
実際には
最初のworkbooksは範囲を指定していて、そこに対してOpen(開く動作)を指定している。引数にpassword,ファイルのパス名
C:¥◇おふざけ¥機密情報.xlsm
を指定しているから、これを改良するなら
最初に
Dim file As string
file = inputbox("どのファイルを開きますか?")
的なことをいれた方がいい気がする。
(総当たりでは)
(このままこのVBE のコードが使えるとは限らないよ)
追記
Workbooks.open(file,,, i)
とする
そうだよな、普通にVBA組んでパスワード解除しようと思ったらそりゃエラー出るよなw