暗号化ZIP自動解凍マクロについてNo.08130
na311 さん 21/05/08 00:54
 
お世話になります。

マクロライブラリにある「パスワード付きZipの簡単解凍V1.3(PasswordZipExtract.m
ac)」に
パスワードの解凍パターンを追加したのですが
パスワードを解凍するとファイルが消えてしまいました。

色々試してみたのですが対処法が分からなくご教示いただけないでしょうか。

---以下パスワード用のメールにある文字列です(***の所がパスワードです---

【暗号化パスワード】 [password information]
**********

----------------------------------------------

下記が自分で追加してみたマクロの文字列です。

$pattern[1] = "^.* 【暗号化パスワード】[password information] *([^ \x81\x40-
\xFC\xFF]+?) ";

お手数ですが確認いただけると助かります。


追加ですみませんが下記はマクロの文字列を追加してみても
「パスワードが見つかりませんでした」と出てしまい
記述内容を教えていただけないでしょうか。

---以下パスワード用のメールにある文字列です(***の所がパスワードです---

パスワード (10桁)
**********

----------------------------------------------

[ ]
RE:08130 暗号化ZIP自動解凍マクロについNo.08131
秀まるお2 さん 21/05/10 08:46
 
 最新版のPasswordZipExtract.macでは解凍パスワードを取得する用の正規表現パ
ターンの書き方がちょっと違ってます。以下のようにすれば一応大丈夫かと思います。

            $pattern[0] = " 【パスワード】 *[::]? *([^ \x81\x40-\xFC\xFF]
+?) ";
            $pattern[1] = " 解凍パスワード *[::]? *([^ \x81\x40-\xFC\xFF]
+?) ";
            $pattern[2] = " Password *: *([^ \x81\x40-\xFC\xFF]+?) ";
            $pattern[3] = " \\[パスワード/Password\\] *([^ \x81\x40-\xFC\xF
F]+?) ";
            $pattern[4] = " 【暗号化パスワード\\(password\\)】 *([^ \x81\x40
-\xFC\xFF]+?) ";
            $pattern[5] = " パスワードは「([^ \x81\x40-\xFC\xFF]+?)」";
            $pattern[6] = " 解凍パスワード +([^ \x81\x40-\xFC\xFF]+?) ";
            $pattern[7] = " パスワード *[::] *([^ \x81\x40-\xFC\xFF]+?) ";
            $pattern[8] = " 添付ファイルパスワード *[::]? *([^ \x81\x40-\xF
C\xFF]+?) ";
            $pattern[9] = " \\[(?:パスワード|Password)\\] *([^ \x81\x40-\xFC
\xFF]+?) ";
            $pattern[10] = " パスワード *\\(Password\\) *[::]? *([^ \x81\x4
0-\xFC\xFF]+?) ";
            $pattern[11] = " \\[password information\\] *([^ \x81\x40-\xFC\x
FF]+?) ";
            $pattern[12] = " パスワード[  ]*([0-9]+桁) *[::]? *([^ \x81\
x40-\xFC\xFF]+?) ";
            $pattern[13] = " パスワード[  ]*\\([0-9]+桁\\) *[::]? *([^ \x8
1\x40-\xFC\xFF]+?) ";

 もしかして1つ前のバージョンだと書き方が違うので、最新版を元に直してほしい
です。

 最新版:
 https://hide.maruo.co.jp/lib/tkmacro/passwordzipextract13.html

[ ]
RE:08131 暗号化ZIP自動解凍マクロについNo.08133
na311 さん 21/05/10 13:54
 
早速のご対応ありがとうございます。

> もしかして1つ前のバージョンだと書き方が違うので、最新版を元に直してほし
>いです。

→1つ前のバージョンを使用しておりました。
 最新版ですが「ここの内容はunzip.exeまたは7-Zip.exeの実行結果です。解凍に成
功したら破棄してください。」とウィンドウが出ますが
 個人的に出ないほうがいいのですが、マクロのどの部分を削除すれば
 出なくなりますでしょうか。


[ ]
RE:08133 暗号化ZIP自動解凍マクロについNo.08135
秀まるお2 さん 21/05/10 14:05
 
 マクロの最後のopenbyshell文の次に「quit;」を入れればいいかと思います。

Label_OpenFolder: ;
    openbyshell $outfolder;
    quit;

 みたいな具合です。

 解凍に失敗した場合に限って結果ウィンドウ表示するように直そうかなぁと思いま
す。

[ ]
RE:08135 暗号化ZIP自動解凍マクロについNo.08139
秀まるお2 さん 21/05/10 15:34
 
 7zipまたはunzip.exeからエラーが返った場合だけ結果表示するようにして、今ラ
イブラリにアップロードしました。

    https://hide.maruo.co.jp/lib/tkmacro/passwordzipextract14.html

[ ]
RE:08139 暗号化ZIP自動解凍マクロについNo.08143
na311 さん 21/05/10 19:16
 
早速ありがとうございます。

理想の動きになり、尚且、いままで「パスワードが見つからなかった」ものも
対応が出来るようになりました。

効率がかなり良くなり助かります。

[ ]
RE:08143 暗号化ZIP自動解凍マクロについNo.08145
na311 さん 21/05/11 12:07
 
マクロを使用していると
たまに解凍先のPasswordZIP Tempのフォルダの中に
解凍したファイルとは別に、空のフォルダも出てきてしまうのですが対策方法があり
ますでしょうか。

空のフォルダは下記のような名前です。

「2021-05-11_1101」

お手数ですがご確認お願いします。

[ ]
RE:08145 暗号化ZIP自動解凍マクロについNo.08146
秀まるお2 さん 21/05/11 14:53
 
 調べてみたら、フォルダの削除がなされてませんでした。解凍で発生したフォルダ
がずっと残ってしまうようです。

 「cmd.exe /c del /f /s /q *.*」

 みたいなコマンドラインでゴミを削除するようにしてたんですが、フォルダは削除
されないようです。

 以前のバージョンではPasswordZipExtractってフォルダ自体をrmdirコマンドで削
除するようにしてたんですが、それだとopenbyshellで開いたエクスプローラが勝手
に閉じてしまうことがある問題もあって、ちょっと良くないです。

 何かいいやり方を考えます。少々お待ちください。

[ ]
RE:08146 暗号化ZIP自動解凍マクロについNo.08148
秀まるお2 さん 21/05/11 16:53
 
 ライブラリにアップロードしようと思いますが、とりあえずここの会議室にマクロ
内容全部書きます。

 PasswordZipTempフォルダ配下のサブフォルダを全部削除するのにFileSystemObjec
tを使うしか方法が無さそうで、かなり面倒なやり方になってしまいました。もっと
簡単に出来たらいいんですが。

----------------------------------------------------------------------------
-----
//暗号化Zipの自動解凍 PasswordZipExtract.mac
// 2019.02.12
// 2019.03.07 Version 1.1 パスワードの形式追加。
// 2019.03.12 Version 1.2 パスワードの形式さらに追加。
// 2021.04.26 Version 1.3
//            7-Zipの代わりにunzip.exeでも解凍できるようにした。
//            パスワードの形式にもっといろいろ追加。&、複数候補あった場合は
メニュー表示するようにした。
// 2021.05.10 Version 1.4 さらに形式追加。11〜12
//            unzip.exeまたは7zip.exeの終了コードを見て、成功してる場合は結
果表示しないようにした。
// 2021.05.11 Version 1.5 PasswordZipTempフォルダにサブフォルダのゴミが残る
バグ修正。
//
// by 秀まるお
// hidesoft.8:04704| 暗号化zip自動解凍マクロ
//
//
//説明:
// このマクロはパスワード付きzipの添付ファイルを簡単に解凍する用のマクロです。
// パスワード付きzipの添付ファイル入りメールは、そのメールとは別便でパスワード
// を通知してきます。このマクロはその別便メールの中からパスワードを取り出して、
// 自動で解凍します。
//
// マクロを実行する前に、zip添付ファイル付きのメールとパスワード通知メールの
// 2通を選択して実行する必要があります。

//解凍したファイルは「ドキュメント」フォルダ配下のPasswordZipTempフォルダに
// 作成されます。古いファイルが残ってる場合はマクロ実行のタイミングで削除され
// てから解凍されます。
//
// unzip.exeのダウンロード場所:   http://gnuwin32.sourceforge.net/packages/unzip.htm
// 7-Zipのダウンロード場所:       https://sevenzip.osdn.jp/

    loaddll "tkinfo.dll";

    // 秀丸メールの検索パック復元予約
    #n = dllfunc("AutoRestoreFindPack");

    // 秀丸エディタの検索条件復元予約
    setcompatiblemode 0x00020000;

    #n = dllfunc("SetJapaneseCodePageMode", 1);

    #n = dllfunc("SelectedMailCount");
    if( #n != 2 ) {
        message "このマクロは暗号化zip付きメールと、その解凍用パスワード通知
メールの2通を選択した状態で実行してください。";
        endmacro;
    }
    //対象のzipとパスワードを取り出す。
    $zipfile = "";
    $password = "";
    #n = dllfunc("LockSelection");
    while(1) {
        #n = dllfunc("EnumSelection", 1);
        if( #n == 0 ) {
            break;
        }
        #foundzip = 0;
        if( $zipfile == "" ) {
            #count = dllfunc("CountCurrentHeader", "X-Attach");
            if( #count != 0 ) {
                #i = 0;
                while( #i < #count ) {
                    $attach = dllfuncstr("CurrentHeader2", "X-Attach", #i);
                    $ext = dllfuncstr("ToLower", rightstr( $attach, 4 ) );
                    if( $ext == ".zip" ) {
                        $zipfile = dllfuncstr("HomeDir") + dllfuncstr("Curre
ntAccount") + "\\" + $attach;
                        #foundzip = 1;
                        break;
                    }
                    #i = #i + 1;
                }
            }
        }
        if( $password == "" && #foundzip == 0 ) {
            $text = gettext( 0, 0, 999, linecount );        //メール本文全部
            loaddll "HmJre.dll";
            $text = dllfuncstr("ReplaceRegularNoCaseSense", "[\\r\\n]+", $te
xt, 0, " ", 2);
                        //改行を空白に変換しておく。
            $text = dllfuncstr("ReplaceRegularNoCaseSense", " +", $text, 0,
 " ", 2);
                        //全角空白を半角空白に変換しておく。
            $text = $text + " ";        //末端に空白を付けておく。
           

            $pattern[0] = " 【パスワード】 *[::]? *([^ \x81\x40-\xFC\xFF]
+?) ";
            $pattern[1] = " 解凍パスワード *[::]? *([^ \x81\x40-\xFC\xFF]
+?) ";
            $pattern[2] = " Password *: *([^ \x81\x40-\xFC\xFF]+?) ";
            $pattern[3] = " \\[パスワード/Password\\] *([^ \x81\x40-\xFC\xF
F]+?) ";
            $pattern[4] = " 【暗号化パスワード\\(password\\)】 *([^ \x81\x40
-\xFC\xFF]+?) ";
            $pattern[5] = " パスワードは「([^ \x81\x40-\xFC\xFF]+?)」";
            $pattern[6] = " 解凍パスワード +([^ \x81\x40-\xFC\xFF]+?) ";
            $pattern[7] = " パスワード *[::] *([^ \x81\x40-\xFC\xFF]+?) ";
            $pattern[8] = " 添付ファイルパスワード *[::]? *([^ \x81\x40-\xF
C\xFF]+?) ";
            $pattern[9] = " \\[(?:パスワード|Password)\\] *([^ \x81\x40-\xFC
\xFF]+?) ";
            $pattern[10] = " パスワード *\\(Password\\) *[::]? *([^ \x81\x4
0-\xFC\xFF]+?) ";
            $pattern[11] = " \\[password information\\] *([^ \x81\x40-\xFC\x
FF]+?) ";
            $pattern[12] = " パスワード[  ]*([0-9]+桁) *[::]? *([^ \x81\
x40-\xFC\xFF]+?) ";
            $pattern[13] = " パスワード[  ]*\\([0-9]+桁\\) *[::]? *([^ \x8
1\x40-\xFC\xFF]+?) ";

            #iPattern = 0;
            #cPassword = 0;
            while(1) {
                $pattern = $pattern[#iPattern];
                if( $pattern == "" ) {
                    break;
                }

                //2021.04.28 新しい方式
                #x = 0;
                while(1) {
                    #x = dllfunc("FindRegularNoCaseSense", $pattern, $text,
#x );
                    if( #x >= 0 ) {
                        $hit = midstr( $text, #x, dllfunc("GetLastMatchLengt
h") );
                        #tag1 = dllfunc("GetLastMatchTagPosition", 1);
                        #tag1len = dllfunc("GetLastMatchTagLength", 1);
                        $pass = midstr( $text, #tag1, #tag1len );
                        //message $hit + "\n" + $pass;
                        if( strlen($pass) >= 4 ) {      //4文字以上でないと
ダメ。
                            //同じパスワードがあれば追加しない。
                            #iFindPass = 0;
                            while( #iFindPass < #cPassword ) {
                                if( $password[#iFindPass+1] == $pass ) {
                                    //スキップ
                                    goto Label_SkipAddPass;
                                }
                                #iFindPass = #iFindPass + 1;
                            }
                            $password[#cPassword+1] = $pass;        //注意:
+1した所にセットする。
                            $whole[#cPassword+1] = $hit + "\t" + $pass;    
    //注意: +1した所にセットする。
                            #cPassword = #cPassword + 1;
Label_SkipAddPass:
                        }
                        #x = #x + 1;
                    } else {
                        break;
                    }
                }
                #iPattern = #iPattern + 1;
            }
            loaddll "tkinfo.dll";       //元に戻す。
        }
    }
    #n = dllfunc("UnlockSelection", 1);
    if( $zipfile == "" ) {
        message "zip形式ファイルが見つかりませんでした。";
        endmacro;
    }
    if( #cPassword == 0 ) {
        message "パスワードが見つかりませんでした。";
        endmacro;
    }
    if( #cPassword > 1 ) {
        $whole[0] = "パスワードの候補が複数見つかりました。どれを使うか選択
してください。";
        menuarray $whole, #cPassword + 1;
        if( result <= 1 ) {
            endmacro;
        }
        $password = $password[result-1];        //result == 1の時に$password
[1]を選択する。
    } else {
        $password = $password[1];
    }
    if( strstr( $password, "\"" ) >= 0 ) {
        message "パスワードの中にダブルクォーテーションの文字が含まれてます。
このマクロではダブルクォーテーション入りのパスワードで解凍することは出来ませ
ん。手作業で解凍お願いします。";
        endmacro;
    }

    //2021.04.26 unzip.exeがあればそっちを使う。
    //           http://gnuwin32.sourceforge.net/packages/unzip.htm
    //
    $unzip = "C:\\Program Files\\GnuWin32\\bin\\unzip.exe";
    if( ! existfile( $unzip ) ) {
        $unzip = "C:\\Program Files (x86)\\GnuWin32\\bin\\unzip.exe";
        if( ! existfile( $unzip ) ) {
            $unzip = "";
        }
    }

    if( $unzip == "" ) {
        $7zip = "C:\\Program files\\7-Zip\\7z.exe";
        if( ! existfile( $7zip ) ) {
            $7zip = "C:\\Program files (x86)\\7-Zip\\7z.exe";
            if( ! existfile( $7zip ) ) {
                message "7-Zipのプログラム用ファイルが見つかりません。7-Zip
をインストールしてください。\n\n" +
                        "7-Zipは、C:\\Program files\\7-Zip またはC:\\Program
 files (x86)\\7-Zip にインストールされてる必要があります。";
                endmacro;
            }
        }
    }

    openreg "CURRENTUSER","Software\\Microsoft\\Windows\\CurrentVersion\\Exp
lorer\\Shell Folders";
    $outfolder = getregstr("Personal");
    closereg;
    $outfolder = $outfolder + "\\PasswordZipTemp";

    #fsobj = createobject("Scripting.FileSystemObject");
    #folderobj = callmethod_returnobj(#fsobj, "GetFolder", $outfolder + "\\");
    if( #folderobj != 0 ) {
        #subfolderobj = getpropobj(#folderobj, "SubFolders");
        if( #subfolderobj != 0 ) {
            #onefolder = getcollection(#subfolderobj, 2);
            while(1) {
                #onefolder = getcollection(#subfolderobj);
                if( #onefolder == 0 ) {
                    break;
                }
                $subfolder = member(#onefolder, "Name");
                $path = $outfolder + "\\" + $subfolder;
                //テストmessage $path;
                runsync2 "cmd.exe /c rmdir /s /q \"" + $path + "\"";
            }
        }
    }

    #n = dllfunc("Bypass_CreateDirectory", $outfolder);

    if( existfile( $outfolder + "\\*.*" ) ) {
        runsync2 "cmd.exe /c del /f /s /q \"" + $outfolder + "\\*.*\"";    
  //古いファイルのゴミを削除
    }
    #n = dllfunc("Bypass_CreateDirectory", $outfolder);
    if( $unzip != "" ) {
        $command = "\"" + $unzip + "\"" + " -P\"" + $password + "\"" + " -d\
"" + $outfolder + "\" \"" + $zipfile + "\"";
    } else {
        $command = "\"" + $7zip + "\" x -p\"" + $password + "\"" + " -o\"" +
 $outfolder + "\" \"" + $zipfile + "\"";
    }
    #homehidemaru = hidemaruhandle(0);
    #n = dllfunc("NewMail");
    #n = dllfunc("SwitchHeaderView", 0);        //ヘッダ表示なし
    gofiletop;
    beginsel;
    gofileend;
    insert $command + "\n\n";
    gofileend;
    runex $command
            , 1     //同期
            , 0     //標準入力なし
            , ""
            , 5     //標準出力をカーソル位置へ挿入
            , ""
            , 5     //標準エラー出力もカーソル位置へ挿入
            , ""
            , 0     //作業フォルダ指定なし
            , ""
            , 1     //表示あり
            , 0     //描画あり
            , 0     //ANSIで受け取り
            , 0     //拡張フラグ指定なし
            ;
    if( !result ) {
        message "unzip.exeまたは7zipの実行に失敗しました。プログラムからの出
力内容を確認してください。";
        endmacro;
    }
    #exitcode = getresultex(9);
    gofileend;
    clearupdated;
    if( #exitcode == 0 || #exitcode == 1 ) {
        //終了コード 参照:
        // 7zip ...      https://sevenzip.osdn.jp/chm/cmdline/exit_codes.htm
        // unzip.exe ... https://community.progress.com/s/article/What-does-Error-Code-mean-on-a-un-Zip-Advanced-Script-1307565966255
        openbyshell $outfolder;
        quit;
    }
    message "unzip.exeまたは7zipからエラーが返っていると思われます。出力結果
を確認してください。";

[ ]
RE:08148 暗号化ZIP自動解凍マクロについNo.08149
na311 さん 21/05/11 19:44
 
お忙しい中、ご対応くださりありがとうございます。

何度か試してみましたが空のフォルダが出てこなくなりました。

大変助かりました。

[ ]
RE:08148 パターン解析についてNo.08150
tera_km さん 21/05/12 08:59
 
おはようございます。

便乗ですみません。
パターン解析でうまく行かないケースがありますので、ご確認の程お願いいたします。
前回の轍を踏まないように素直に依頼することとしました。

----
元から日本語と英語の2種類([パスワード]と[Password])でパスワードくれいてい
るのですが、そのためか解析がうまく行かないとどっちのパスワードを使うかと選択
画面が出てくれました。
ですが、候補に表示されるどちらも中途半端な状態です
解析するしないで各行末行頭に半角スペースがあったりなかったり、1文字分だった
り2文字分だったりとその都度ちがいがあるようですが、それが理由ではないような
気がします。

------解析しないパターン--------
[パスワード] ←ここに空白文字あり
UHQtTn5^7CN2uQ^8
  xxxxxxxx@gmail.com

[Password]  ←ここに空白文字あり
UHQtTn5^7CN2uQ^8
  xxxxxxxx@gmail.com


候補を選んでくださいで表示された2行
pスワード] UHQtTn5^7CN2uQ^8 ho   Tn5^7CN2uQ^8 h
word] UHQtTn5^7CN2uQ^8  hoge    5^7CN2uQ^8 hog

---------解析するパターン---------
[パスワード]←こちらはなし
T^TCN8NSPa+TjsHa
 xxxxxxxx@gmail.com

[Password]←こちらはなし
T^TCN8NSPa+TjsHa
 xxxxxxxx@gmail.com
--------------------------------

分かり難くて済みませんが伝わるでしょうか。ご検討をお願いします


---以下の内容はコミュニテックス会議室システムにより付加されました。
本文中のメールアドレスは伏せ字に変換されました。伏せ字にしたくない場合
はメールアドレスを""で囲んで書き込んでください。

[ ]
RE:08150 パターン解析についてNo.08151
tera_km さん 21/05/12 09:04
 
>候補を選んでくださいで表示された2行
>pスワード] UHQtTn5^7CN2uQ^8 ho   Tn5^7CN2uQ^8 h
>word] UHQtTn5^7CN2uQ^8  hoge    5^7CN2uQ^8 hog

アドレスの伏せ字hogehogeがXXXXXXXXに置き換わってくれています
のでこうなりますかね

>pスワード] UHQtTn5^7CN2uQ^8 xx   Tn5^7CN2uQ^8 x
>word] UHQtTn5^7CN2uQ^8  xxxx    5^7CN2uQ^8 xxx

[ ]
RE:08151 パターン解析についてNo.08152
秀まるお2 さん 21/05/12 10:07
 
 そのパターンでテストしてみたんですけども、僕の所だとうまくパスワードを取り
出してくれてるような気がします。

            $pattern[9] = " \\[(?:パスワード|Password)\\] *([^ \x81\x40-\xFC
\xFF]+?) ";

 ってパターンにヒットするはずになります。

 候補の表示のされ方も、果たしてどうしたらそんな風に出てしまうのかよく分から
ずです。???

 ここの会議室に書き込んでるせいかもしれないので、もし良かったらパスワード通
知メールだけ"maruo@mitene.or.jp"の方に転送してもらえないでしょうか。転送とい
うか、メール本文をコピペして伏せ字化した上で普通に送っていただければ大丈夫だ
と思います。


 一応、僕の所でテストしたパスワード通知メールの内容と結果(unzip.exeを起動
してるコマンドライン)を画像でアップロードしました。

    https://dotup.org/uploda/dotup.org2470899.png

[ ]
RE:08152 パターン解析についてNo.08154
秀まるお2 さん 21/05/12 11:50
 
 メール本文送っていただいてテストしてみたんですが、やっぱり再現しないようで
す。

 マクロが古いバージョンだったりしませんでしょうか。08148番発言にある内容を
コピペするか、または

    https://hide.maruo.co.jp/lib/tkmacro/passwordzipextract15.html

 が最新なんですが。

[ ]
RE:08154 パターン解析についてNo.08156
tera_km さん 21/05/12 13:17
 
> が最新なんですが。

元々のスレッドのコピペでやったのですが、改めてdownしても一緒でした。
ちょっと保留にしていただいてください、後程落ち着いてから一から検証してみます。

[ ]
RE:08156 パターン解析についてNo.08157
秀まるお2 さん 21/05/12 14:19
 
 なんとなくおかしくなる原因が分かったような気がします。検索でうまくヒットし
てるけども、検索でヒットした位置というか、パスワードの位置を取得するのが失敗
してるようです。たぶんユニコード文字が関係して問題が起きてるような気がします。

 HmJre.dllのSetUnicodeIndexAutoConvertを呼び出すようにすれば直るような気が
します。

 テストして何か分かったらまた書き込みさせていただきます。

[ ]
RE:08157 パターン解析についてNo.08158
秀まるお2 さん 21/05/12 14:25
 
 パスワード通知のメールの文字コードをユニコードにしてメール本文の先頭にユニ
コード文字を入れたら簡単に再現できました。大変失礼しました。


 75行目付近にある

            loaddll "HmJre.dll";

 の直後に


            #n = dllfunc("SetUnicodeIndexAutoConvert", 1);  //V1.6 バグ修正

 の1行を入れれば直るようです。すみませんがこれで確認お願いします。

 自分で作っておきながら自分でこの辺の配慮を忘れてしまってました。

[ ]
RE:08158 パターン解析についてNo.08162
tera_km さん 21/05/13 07:07
 
おはようございます。お世話になります。

> の1行を入れれば直るようです。すみませんがこれで確認お願いします。

うまくできました。ありがとうございました。

※昨夜ここの書き込み見ないで既に解決していたとは知らずに自分なりの検証した
メール送ってしまいました。

[ ]
RE:08162 パターン解析についてNo.08163
秀まるお2 さん 21/05/13 08:46
 
 お手間かけさせてしまってすみません。

 ライブラリの方も更新させていただきます。

[ ]
RE:08163 パターン解析についてNo.08185
tera_km さん 21/05/17 19:53
 
こんばんは、お世話になります。

今度は解析失敗のケースが出てきました。
以下のパターンについて確認をお願い致します。
一連の確認してもらった送信者から送られてきているメールですので
基本的なパターンは同じはずです。
もしやと思い過去メールを確認したら同様に解析できないケースがありましたので2
種類ここに貼りますが、元は別メールです。
とりあえず解析できるかのご確認のみお願い致します。


[パスワード]
8Nr!Rc84%cjTAsBW


[パスワード]
J8v+%fL&fCMjAF^8

[ ]
RE:08185 パターン解析についてNo.08188
tera_km さん 21/05/18 07:25
 
おはようございます。

また中途半端な情報で終わっていました。再度状況を説明します。

[パスワード]
J8v+%fL&fCMjAF^8

これを解析するとエラーが返ってきて
D:\hogehoge\Documents\PasswordZipTempのフォルダは空です。

エラーの文言は
「unzipまたは7zipからエラーが返っていると思われます。出力結果を確認してくだ
さい」
です。

それで、エディタ画面のメッセージは以下の内容なので、パスワードは取得できてい
るようですね?

"C:\Program Files (x86)\GnuWin32\bin\unzip.exe" -P"J8v+%fL&fCMjAF^8" -d"D:\h
ogehoge\Documents\PasswordZipTemp" "D:\TuruKameData\*******@gmail.com\受信添
付2105\210517_07\encrypted_files_20210517_000336.zip"

Archive:  D:/TuruKameData/********@gmail.com/受信添付2105/210517_07/encrypte
d_files_20210517_000336.zip
   skipping: ほげほげ.xls  incorrect password

はて?パスワード取得しても解凍できないケースがあるのでしょうかなのですが・・・

[ ]
RE:08188 パターン解析についてNo.08189
秀まるお2 さん 21/05/18 09:11
 
 毎度お手数かけてすみません。テストしてみたら、どうもパスワードの中に「&」
や「^」があるとダメみたいな感じです。

 コマンドラインの中で、「&」や「^」は特別な意味があるようで、それのせいかな
ぁと思います。というか、コマンドラインでそれらの文字を指定するには

    ^&
    ^^

 のようにしないとダメみたいな話がありました。

 今ちょっと試行錯誤してみたら、runexを使わずにopenbyshellを使ったら、一応う
まく解凍するようでした。

 runexの文(runexから最後の「;」までの範囲)をコメントアウトして、代わりに

    openbyshell $command;

 を入れるだけです。ただ、これだと解凍に失敗した時の、解凍ソフトからの出力が
見られないです。

 とりあえずの回避策は上記としていただいた上で、マクロの改良の方はなんとかト
ライしてみます。

[ ]
RE:08189 パターン解析についてNo.08190
秀まるお2 さん 21/05/18 09:28
 
 すみません。僕のマクロのrunexの呼び出し方のミスでした。

 runexの場合は%を%%に変換しないといけないと、ヘルプに書いててありました。

 マクロ内容以下のように修正お願いします。

----------------------------------------------------------------------------
-----------
//暗号化Zipの自動解凍 PasswordZipExtract.mac
// 2019.02.12
// 2019.03.07 Version 1.1 パスワードの形式追加。
// 2019.03.12 Version 1.2 パスワードの形式さらに追加。
// 2021.04.26 Version 1.3
//            7-Zipの代わりにunzip.exeでも解凍できるようにした。
//            パスワードの形式にもっといろいろ追加。&、複数候補あった場合は
メニュー表示するようにした。
// 2021.05.10 Version 1.4 さらに形式追加。11〜12
//            unzip.exeまたは7zip.exeの終了コードを見て、成功してる場合は結
果表示しないようにした。
// 2021.05.11 Version 1.5 PasswordZipTempフォルダにサブフォルダのゴミが残る
バグ修正。
// 2021.05.13 Version 1.6 メール本文にユニコード文字(Shift-JIS範囲外の文
字)があるとパスワードがおかしくなるバグ修正。
// 2021.05.18 Versio 1.7  パスワードの中に「%」があると失敗するバグ修正。
//
// by 秀まるお
// hidesoft.8:04704| 暗号化zip自動解凍マクロ
//
//
//説明:
// このマクロはパスワード付きzipの添付ファイルを簡単に解凍する用のマクロです。
// パスワード付きzipの添付ファイル入りメールは、そのメールとは別便でパスワード
// を通知してきます。このマクロはその別便メールの中からパスワードを取り出して、
// 自動で解凍します。
//
// マクロを実行する前に、zip添付ファイル付きのメールとパスワード通知メールの
// 2通を選択して実行する必要があります。

//解凍したファイルは「ドキュメント」フォルダ配下のPasswordZipTempフォルダに
// 作成されます。古いファイルが残ってる場合はマクロ実行のタイミングで削除され
// てから解凍されます。
//
// unzip.exeのダウンロード場所:   http://gnuwin32.sourceforge.net/packages/unzip.htm
// 7-Zipのダウンロード場所:       https://sevenzip.osdn.jp/

    loaddll "tkinfo.dll";

    // 秀丸メールの検索パック復元予約
    #n = dllfunc("AutoRestoreFindPack");

    // 秀丸エディタの検索条件復元予約
    setcompatiblemode 0x00020000;

    #n = dllfunc("SetJapaneseCodePageMode", 1);

    #n = dllfunc("SelectedMailCount");
    if( #n != 2 ) {
        message "このマクロは暗号化zip付きメールと、その解凍用パスワード通知
メールの2通を選択した状態で実行してください。";
        endmacro;
    }
    //対象のzipとパスワードを取り出す。
    $zipfile = "";
    $password = "";
    #n = dllfunc("LockSelection");
    while(1) {
        #n = dllfunc("EnumSelection", 1);
        if( #n == 0 ) {
            break;
        }
        #foundzip = 0;
        if( $zipfile == "" ) {
            #count = dllfunc("CountCurrentHeader", "X-Attach");
            if( #count != 0 ) {
                #i = 0;
                while( #i < #count ) {
                    $attach = dllfuncstr("CurrentHeader2", "X-Attach", #i);
                    $ext = dllfuncstr("ToLower", rightstr( $attach, 4 ) );
                    if( $ext == ".zip" ) {
                        $zipfile = dllfuncstr("HomeDir") + dllfuncstr("Curre
ntAccount") + "\\" + $attach;
                        #foundzip = 1;
                        break;
                    }
                    #i = #i + 1;
                }
            }
        }
        if( $password == "" && #foundzip == 0 ) {
            $text = gettext( 0, 0, 999, linecount );        //メール本文全部
            loaddll "HmJre.dll";
            #n = dllfunc("SetUnicodeIndexAutoConvert", 1);      //V1.6 バグ修正
            $text = dllfuncstr("ReplaceRegularNoCaseSense", "[\\r\\n]+", $te
xt, 0, " ", 2);
                        //改行を空白に変換しておく。
            $text = dllfuncstr("ReplaceRegularNoCaseSense", " +", $text, 0,
 " ", 2);
                        //全角空白を半角空白に変換しておく。
            $text = $text + " ";        //末端に空白を付けておく。

            $pattern[0] = " 【パスワード】 *[::]? *([^ \x81\x40-\xFC\xFF]
+?) ";
            $pattern[1] = " 解凍パスワード *[::]? *([^ \x81\x40-\xFC\xFF]
+?) ";
            $pattern[2] = " Password *: *([^ \x81\x40-\xFC\xFF]+?) ";
            $pattern[3] = " \\[パスワード/Password\\] *([^ \x81\x40-\xFC\xF
F]+?) ";
            $pattern[4] = " 【暗号化パスワード\\(password\\)】 *([^ \x81\x40
-\xFC\xFF]+?) ";
            $pattern[5] = " パスワードは「([^ \x81\x40-\xFC\xFF]+?)」";
            $pattern[6] = " 解凍パスワード +([^ \x81\x40-\xFC\xFF]+?) ";
            $pattern[7] = " パスワード *[::] *([^ \x81\x40-\xFC\xFF]+?) ";
            $pattern[8] = " 添付ファイルパスワード *[::]? *([^ \x81\x40-\xF
C\xFF]+?) ";
            $pattern[9] = " \\[(?:パスワード|Password)\\] *([^ \x81\x40-\xFC
\xFF]+?) ";
            $pattern[10] = " パスワード *\\(Password\\) *[::]? *([^ \x81\x4
0-\xFC\xFF]+?) ";
            $pattern[11] = " \\[password information\\] *([^ \x81\x40-\xFC\x
FF]+?) ";
            $pattern[12] = " パスワード[  ]*([0-9]+桁) *[::]? *([^ \x81\
x40-\xFC\xFF]+?) ";
            $pattern[13] = " パスワード[  ]*\\([0-9]+桁\\) *[::]? *([^ \x8
1\x40-\xFC\xFF]+?) ";

            #iPattern = 0;
            #cPassword = 0;
            while(1) {
                $pattern = $pattern[#iPattern];
                if( $pattern == "" ) {
                    break;
                }

                //2021.04.28 新しい方式
                #x = 0;
                while(1) {
                    #x = dllfunc("FindRegularNoCaseSense", $pattern, $text,
#x );
                    if( #x >= 0 ) {
                        $hit = midstr( $text, #x, dllfunc("GetLastMatchLengt
h") );
                        #tag1 = dllfunc("GetLastMatchTagPosition", 1);
                        #tag1len = dllfunc("GetLastMatchTagLength", 1);
                        $pass = midstr( $text, #tag1, #tag1len );
                        //message $hit + "\n" + $pass;
                        if( strlen($pass) >= 4 ) {      //4文字以上でないと
ダメ。
                            //同じパスワードがあれば追加しない。
                            #iFindPass = 0;
                            while( #iFindPass < #cPassword ) {
                                if( $password[#iFindPass+1] == $pass ) {
                                    //スキップ
                                    goto Label_SkipAddPass;
                                }
                                #iFindPass = #iFindPass + 1;
                            }
                            $password[#cPassword+1] = $pass;        //注意:
+1した所にセットする。
                            $whole[#cPassword+1] = $hit + "\t" + $pass;    
    //注意: +1した所にセットする。
                            #cPassword = #cPassword + 1;
Label_SkipAddPass:
                        }
                        #x = #x + 1;
                    } else {
                        break;
                    }
                }
                #iPattern = #iPattern + 1;
            }
            loaddll "tkinfo.dll";       //元に戻す。
        }
    }
    #n = dllfunc("UnlockSelection", 1);
    if( $zipfile == "" ) {
        message "zip形式ファイルが見つかりませんでした。";
        endmacro;
    }
    if( #cPassword == 0 ) {
        message "パスワードが見つかりませんでした。";
        endmacro;
    }
    if( #cPassword > 1 ) {
        $whole[0] = "パスワードの候補が複数見つかりました。どれを使うか選択
してください。";
        menuarray $whole, #cPassword + 1;
        if( result <= 1 ) {
            endmacro;
        }
        $password = $password[result-1];        //result == 1の時に$password
[1]を選択する。
    } else {
        $password = $password[1];
    }
    if( strstr( $password, "\"" ) >= 0 ) {
        message "パスワードの中にダブルクォーテーションの文字が含まれてます。
このマクロではダブルクォーテーション入りのパスワードで解凍することは出来ませ
ん。手作業で解凍お願いします。";
        endmacro;
    }

    //2021.04.26 unzip.exeがあればそっちを使う。
    //           http://gnuwin32.sourceforge.net/packages/unzip.htm
    //
    $unzip = "C:\\Program Files\\GnuWin32\\bin\\unzip.exe";
    if( ! existfile( $unzip ) ) {
        $unzip = "C:\\Program Files (x86)\\GnuWin32\\bin\\unzip.exe";
        if( ! existfile( $unzip ) ) {
            $unzip = "";
        }
    }

    if( $unzip == "" ) {
        $7zip = "C:\\Program files\\7-Zip\\7z.exe";
        if( ! existfile( $7zip ) ) {
            $7zip = "C:\\Program files (x86)\\7-Zip\\7z.exe";
            if( ! existfile( $7zip ) ) {
                message "7-Zipのプログラム用ファイルが見つかりません。7-Zip
をインストールしてください。\n\n" +
                        "7-Zipは、C:\\Program files\\7-Zip またはC:\\Program
 files (x86)\\7-Zip にインストールされてる必要があります。";
                endmacro;
            }
        }
    }

    openreg "CURRENTUSER","Software\\Microsoft\\Windows\\CurrentVersion\\Exp
lorer\\Shell Folders";
    $outfolder = getregstr("Personal");
    closereg;
    $outfolder = $outfolder + "\\PasswordZipTemp";

    #fsobj = createobject("Scripting.FileSystemObject");
    #folderobj = callmethod_returnobj(#fsobj, "GetFolder", $outfolder + "\\");
    if( #folderobj != 0 ) {
        #subfolderobj = getpropobj(#folderobj, "SubFolders");
        if( #subfolderobj != 0 ) {
            #onefolder = getcollection(#subfolderobj, 2);
            while(1) {
                #onefolder = getcollection(#subfolderobj);
                if( #onefolder == 0 ) {
                    break;
                }
                $subfolder = member(#onefolder, "Name");
                $path = $outfolder + "\\" + $subfolder;
                //テストmessage $path;
                runsync2 "cmd.exe /c rmdir /s /q \"" + $path + "\"";
            }
        }
    }

    #n = dllfunc("Bypass_CreateDirectory", $outfolder);

    if( existfile( $outfolder + "\\*.*" ) ) {
        runsync2 "cmd.exe /c del /f /s /q \"" + $outfolder + "\\*.*\"";    
  //古いファイルのゴミを削除
    }
    #n = dllfunc("Bypass_CreateDirectory", $outfolder);

    //2021.05.18 パスワードの中の「%」を「%%」に変換しないといけない。
    //
    #i = 0;
    while(1) {
        $one = midstr($password, #i, 1);
        if( $one == "" ) {
            break;
        }
        if( $one == "%" ) {
            $password = leftstr($password, #i) + "%" + midstr($password, #i);
            #i = #i + 2;
        } else {
            #i = #i + 1;
        }
    }

    if( $unzip != "" ) {
        $command = "\"" + $unzip + "\"" + " -P\"" + $password + "\"" + " -d\
"" + $outfolder + "\" \"" + $zipfile + "\"";
    } else {
        $command = "\"" + $7zip + "\" x -p\"" + $password + "\"" + " -o\"" +
 $outfolder + "\" \"" + $zipfile + "\"";
    }
    #homehidemaru = hidemaruhandle(0);
    #n = dllfunc("NewMail");
    #n = dllfunc("SwitchHeaderView", 0);        //ヘッダ表示なし
    gofiletop;
    beginsel;
    gofileend;
    insert $command + "\n\n";
    gofileend;
    runex $command
            , 1     //同期
            , 0     //標準入力なし
            , ""
            , 5     //標準出力をカーソル位置へ挿入
            , ""
            , 5     //標準エラー出力もカーソル位置へ挿入
            , ""
            , 0     //作業フォルダ指定なし
            , ""
            , 1     //表示あり
            , 0     //描画あり
            , 0     //ANSIで受け取り
            , 0     //拡張フラグ指定なし
            ;
    if( !result ) {
        message "unzip.exeまたは7zipの実行に失敗しました。プログラムからの出
力内容を確認してください。";
        endmacro;
    }
    #exitcode = getresultex(9);
    gofileend;
    clearupdated;
    if( #exitcode == 0 || #exitcode == 1 ) {
        //終了コード 参照:
        // 7zip ...      https://sevenzip.osdn.jp/chm/cmdline/exit_codes.htm
        // unzip.exe ... https://community.progress.com/s/article/What-does-Error-Code-mean-on-a-un-Zip-Advanced-Script-1307565966255
        openbyshell $outfolder;
        quit;
    }
    message "unzip.exeまたは7zipからエラーが返っていると思われます。出力結果
を確認してください。";

[ ]
RE:08190 パターン解析についてNo.08193
tera_km さん 21/05/18 11:08
 
こんにちは、お世話になります。

バッチリいけましたです。
迅速な対応ありがとうございました。

[ ]