他人の空似自作物置場

cmd_logger.zip/Readme.txt

プログラム名:cmd logger

用途:コマンドプロンプトの入力履歴を保存する

使い方:
・injector.exeをcmd_logger.dllと同じディレクトリに配置する
・injector.exeをコマンドプロンプトの代わりに起動する
・普通にコマンドプロンプトのつもりで使用する
・injector.exeと同じフォルダにcommand_history.txtという名前で入力履歴が保存される

インストール:
zip展開するだけ

アンインストール:
レジストリもテンポラリファイルも弄っておりません。
フォルダごと削除するだけですっきりさっぱりおさらばできます。

ファイル解説:
cmd_logger.dll  cmd.exeにインジェクションされログをとる処理を行うdll
injector.exe    cmd.exeにcmd_logger.dllをインジェクションするexe
cmd_logger.sln  VS2010向けプロジェクト
Readme.txt      今読んでいるこれ


Q&A:
  Q:動かないんだが?
  A:可能な限り多様な環境で動くよう頑張ったつもりですが
  それでも動かない場合はごめんなさい。

  Q:command_history.txtって起動するたびに初期化されるの?
  A:いいえ、追加書き込みなので手動で削除しない限りどこまでも大きくなります。

  Q:多重起動した場合どう記録されるの?
  A:毎回コマンドを入力するたびにファイルを開きなおしているので
  単純に時系列順に記録されます。

  Q:CUIアプリへの入力は記録されるの?
  A:されません。
  あくまでコマンドプロンプトへの入力だけになります。

  Q:ファイルの保存場所を変えたいんだが
  A:ソースコードを変更してコンパイルしなおしてください。

  Q:何のためにこんなもの作ったの?
  A:存在しないコマンドをたたいたらtwitterに晒すアプリを作りたい
  という人がいたので、サンプルとして提供するために作りました。

  Q:cmdに引数渡して起動できる?
  A:injector.exeへ渡された引数はそのままcmdへ渡されます。

  Q:VisualStudioコマンドプロンプトで使う方法は?
  A:環境変数のComSpecをinjector.exeへのパスに変更すれば可能です。

  Q:injectorで立ち上げたcmdからさらにinjector起動するとおかしくなるんだが
  A:なんでかは知りませんがそうなるみたいですね。
  基本そんなことしたい状況というのはないはずなのでしないでください。

  Q:その他バグをみつけた or 動作しない or 要望がある
  A:公開しても問題が無いメールアドレスにて
  下部に記載されたアドレスまでメールをどうぞ。
  対応できれば対応します。


作者:sweetie
メールアドレス:bnryxx332a(あっと)mail.goo.ne.jp


ライセンス:
・本ライセンスにおいて、全ての条項は「変更の有無を問わず、明示暗示を問わず、商業慈善を問わず、個人法人を問わず、保持使用を問わず、有料無料を問わず」と装飾されている物として扱う。
・著作権者は本ソフトウェアに関する一切の保障義務をもたない。
・上記条項唯一の例外として、本ライセンスに違反した場合を除いて著作権者から本ソフトウェアに関する一切の法的措置を受ける事が無い事のみ保証される。
・著作権者やその他保持者がこのライセンスの範囲で行う活動に支障が無い範囲であれば何を行っても構わない。
・上記条項の”何を行っても構わない”には本ソフトウェアの製作者を偽っての再配布も含まれる。
・全ての権利の行使において、著作権者への連絡、著作権者やライセンス条項の記載、適用ライセンスなどの制限は一切存在しない。
著作権者名:sweetie


面倒な人向けライセンス解説:
ライセンス記載義務すらありません。
自分が書いたソースコードのごとく扱うことができます。


技術情報(と、どうでもいい話):
純製のcmd.exeにインジェクションするだけなので何も問題にならないと思いきや
意外とはまりどころが多くて困った一品。
具体的には、コンソールの継承を有効にしないとVisualStudioで開けなかったり
ReadConsoleWがtabキーでも制御を返すのでその例外処理を入れたり
引数の受け渡しの処理が意外と面倒だったり
依存するdll名がXP~7と8で違ったり
cmdからinjectorを呼ぶとおかしくなったり(これは直せていないまま)
injector.exeはサスペンドでexeを上げてインジェクションしてresumeするだけ
ちなみに昔からinjection専用exe欲しかったのだが、なんだかんだで
dll置くだけで機能させるという利便性を重視したため、地味に作るの初めて。
今回はcmd.exeがsystem32にいるからダミーのdllを置く
=>システム汚染だからね、しょうがないね。
実は履歴保存だけではなく、起動時に履歴を読み込む機能もつけたかったのだが
履歴の管理はcmd.exeがやっているわけではないようで、処理が追えなかった
ので断念。
GetConsoleCommandHistoryWとかその辺のAPIはさっさとI/F公開しろ。
GetCommandLineWはexe名の後のスペースがひとつ増えるという謎挙動をする、なぜだ。
cmdへの引数解釈エンジンは特殊らしく""a iueo""が"a iueo"と同じ挙動になる。
ちなみに普通は""の間のスペースで区切らない処理ののち""が撤去されるため
aとiueoという二つの引数として扱われる。
なので"""""""i""""n""j""e"""c"""tion"""".""e"x"eなんて書いても実行できる。