Windowsシステムコールの追跡

# はじめに

本件、下記記事の延長戦です。

[Windowsのstdout/stderrの不可解な動き](https://qiita.com/k2ok/items/b3fba28ff1c97e4e444f)


# Windowsでのシステムコール追跡方法

発想は「Linuxでの[strace]みたいなツールないのかな」です。

[strace]:<https://access.redhat.com/ja/articles/14884>

よく紹介されるのは `SysInternals` の [Process Monitor]。

[Process Monitor]:<https://learn.microsoft.com/ja-jp/sysinternals/downloads/procmon>

但しこれは、ファイルやレジストリを含む低レベルのイベントを捕捉するのは容易だけど、Win32APIなどの高位システムコールをそのまま追跡できるわけではない。

もうちょっとなんかツールないのか、という話。


# "API Monitor" の確認と試用

某チャットAIで問い合わせてみました。
[API Monitor] というツールがあるそうで、、

[API Monitor]:<http://www.rohitab.com/apimonitor>

ためしに [ダウンロードセクション](http://www.rohitab.com/apimonitor#Download) のPortableパッケージのURLを取得して、 [VirusTotal] に見てもらおう。。。

[VirusTotal]:<https://www.virustotal.com/gui/home/url>

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50759/2c131b9a-1623-c513-2a9e-14931cb4a961.png)

全部 `Clean` とはいかないか、、

いちおう心配なので、とりあえず仮想環境に投入してみましょうか。。

ダウンロードしたPortableパッケージのZIPを解凍して実行します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50759/90a03204-d573-40bb-c2f1-91291f4f5c81.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50759/3a6dc8ef-76e3-e2ff-b505-c5381f580e71.png)

起動したら、まず「API Filter」のセクションで捕捉したい関数名にチェックを入れる。
とりあえず、ミドルウエアが「おそらく」使っているであろう `CreateProcessA` と `CreateProcessW` をマーク。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50759/baf65135-225a-9645-ae89-09b0337faeb2.png)

起動中のプロセスにアタッチ（監視開始）する場合は、「Running Processes」のセクションから選択できるようです。（最初はsleepかけてる間にアタッチしてました）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50759/275238ab-459d-5eb3-857d-b4adcc8f5104.png)

ただ起動してすぐ終わっちゃうようなやつだと難しいので、プロセスの起動そのものを追加することもできそうです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50759/c1edba4a-0831-7446-a780-02bbc339c951.png)

実行して、無事捕捉できると「Summary」のセクションに出力されるので選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50759/cb0d2e8b-6a30-b336-181c-110c9200296e.png)

「Parameters」のセクションに詳細が出て、ポインタの参照先も確認できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50759/3eb231ed-d35a-c8bb-09d2-461c00f88156.png)


# その他

サイトの「tutorials」セクションには、いろんな使い方が紹介されているようです。

http://www.rohitab.com/category/api-monitor-tutorials


# おまけ

いちおうscoop bucket作成してみました。

但し、さすがにお客様環境を含む業務環境に入れるのはお勧めできないです。。

自分で責任のとれる、閉じた環境での利用を推奨します。

```api-monitor.json
{
  "version": "v2r13",
  "description": "API Monitor is a free software that lets you monitor and control API calls made by applications and services.",
  "homepage": "http://www.rohitab.com/apimonitor",
  "url": "http://www.rohitab.com/download/api-monitor-v2r13-x86-x64.zip",
  "hash": "d045e45f523a6c0c7a2a8e06831f4b2d705fb84f4995791b5a70b28424a49d2b",
  "architecture": {
    "64bit": {
      "bin": [["apimonitor-x64.exe", "apimonitor"]],
      "shortcuts": [["apimonitor-x64.exe", "API Monitor"]]
    },
    "32bit": {
      "bin": [["apimonitor-x86.exe", "apimonitor"]],
      "shortcuts": [["apimonitor-x86.exe", "API Monitor"]]
    }
  },
  "extract_dir": "API Monitor (rohitab.com)"
}

```

ライセンス等の記載も無く、FAQを読む限りでは Rohitab Batra さんという個人の方の製品のようです。

http://www.rohitab.com/discuss/forum-1/announcement-6-rules-guidelines-and-faq/