この実行ファイルはバッチファイルを介してパスワードの入力を求めていました。
まずディスアセンブルするとCreateProcess関数にTempフォルダの「~3F1.bat」というバッチファイルを実行させています。CreateProcess関数は、
BOOL CreateProcess( LPCTSTR lpApplicationName, // 実行可能モジュールの名前 LPTSTR lpCommandLine, // コマンドラインの文字列 LPSECURITY_ATTRIBUTES lpProcessAttributes, // セキュリティ記述子 LPSECURITY_ATTRIBUTES lpThreadAttributes, // セキュリティ記述子 BOOL bInheritHandles, // ハンドルの継承オプション DWORD dwCreationFlags, // 作成のフラグ LPVOID lpEnvironment, // 新しい環境ブロック LPCTSTR lpCurrentDirectory, // カレントディレクトリの名前 LPSTARTUPINFO lpStartupInfo, // スタートアップ情報 LPPROCESS_INFORMATION lpProcessInformation // プロセス情報 );という形で呼び出します。
普通はlpApplicationNameで実行するファイルを指定しますが、lpApplicationNameをNULLにしてlpCommandLineにコマンドライン的にパラメータを渡すことも出来ます。
呼び出すときのスタックはこうなっていました。
0012FF44 00000000 .... |ModuleFileName = NULL 0012FF48 00900C00 ..・ |CommandLine = "cmd.exe /c C:\DOCUME~1\***\LOCALS~1\Temp\~3F2.bat "***\app14\App14.exe"" 0012FF4C 00000000 .... |pProcessSecurity = NULL 0012FF50 00000000 .... |pThreadSecurity = NULL 0012FF54 00000000 .... |InheritHandles = FALSE 0012FF58 00000020 ... |CreationFlags = NORMAL_PRIORITY_CLASS 0012FF5C 00000000 .... |pEnvironment = NULL 0012FF60 00000000 .... |CurrentDir = NULL 0012FF64 0040C8F8 @. |pStartupInfo = App14.0040C8F8 0012FF68 0040C93C <ノ@. \pProcessInfo = App14.0040C93C"cmd.exe"でTempフォルダの"~3F1.bat"というバッチファイルを起動しています。
プログラム内では、"~3F1.bat"を作ってから、隠しファイルに設定していました。
SetFileAttributes関数の第二引数にFILE_ATTRIBUTE_HIDDENを指定すると隠しファイルの属性が与えられます。
BOOL SetFileAttributes( LPCTSTR lpFileName, // ファイル名 DWORD dwFileAttributes // 属性 );FILE_ATTRIBUTE_HIDDENは0x2です。
私は隠しファイルを表示する設定にしていたんですぐに見つけられました。
バッチファイルの中身に特に凝った工夫はなく、パスワードを見つけたので無事ミッションクリアです。
crackingカテゴリのミッションは残り1つとなり、3530ポイントで現在271位となりました。やっと200番代ですね。
0 件のコメント:
コメントを投稿