PC App Store撃退記
叔父からカレンダーのフリーソフトを入れようとしたらWindowsマシン上に変な画面が前面に出て、何の操作もできないと相談を受けました。
調べてみるとウイルスではないものの、かなり悪質なアドウェア「PC App Store」なるもののようで、被害者もそこそこいるようです。
私は普段Macしか触らないのでWindowsの構造はあまり詳しくなかったのですが、対応する中で「レジストリって何なのか」「コマンドの裏で何が動いているのか」など、色々学びがあったので記録しておきます。
背景
PC App Store という名前で検索すると、同じ症状の報告がいくつか見つかりました。
ただ検索して分かる範囲の情報は玉石混交であり、症状や解決方法に結構幅がありそうだったので、本稿では実際に確認できた事実ベースで記録します。
症状は次の通りでした。
- ネットワークに接続すると、全画面の「PC App Store」ポップアップが表示され、クレジットカード入力を求める「Create Your Account」画面に占拠されて他の操作ができなくなる
- ネットワークを切断すると通常通り操作できる
- タスクマネージャー等は起動できるが、全画面ウィンドウが最前面に固定されていて操作しづらい
状況の詳細
発覚してからの流れはこんな感じでした。
-
叔父本人が Windows の「アプリ」設定(設定 → アプリ → インストールされているアプリ)から
PCAppStoreを見つけてアンインストールを実行。しかし症状は収まらず。 -
私が軽く調査し、電話越しにコントロールパネルの「プログラムのアンインストール」を試してもらいました。一覧からは消えるものの、しばらくすると同じポップアップが復活する、を繰り返している状態。
-
どうしようもなさそうなので、私が直接マシンを預かることに。
小話的に面白かったのは、症状が出ている間のしのぎ方です。メールを送りたいときは、
- ネットワークに繋がずにメールを作成して送信ボタンを押す
- そこからネットワークに接続する
- PC App Store はプロセスとして立ち上がってくるものの、メール自体はリトライ処理で送信できていたとのこと。
画面は乗っ取られるもののバックグラウンドの通信までは妨害しないらしいということで、確かにウイルス的ではなく、ただの迷惑なアプリなのだなと感じました。
実機での調査
マシンを預かり、何が起きているのか調査を行います。
事前に調査をした結果、同様の被害報告の中で PCAppStore 本体だけでなく "Watchdog of PC APP STORE" という名前の監視プロセスが永続化に使われる、という記述を見かけていました。
というわけで、まずは Watchdog や AutoUpdater といった名前のプロセスが実際に動いているかどうかから確認していきます。
今動いているプロセスを見る
PowerShellを管理者権限で立ち上げ、調査を行います。
次のコマンドで関連するプロセスが動いていないか確認します。
Get-Process | Where-Object { $_.Name -match 'PCAppStore|Watchdog|pcapp' }
Handles NPM(K) PM(K) WS(K) CPU(s) Id SI ProcessName
------- ------ ----- ----- ------ -- -- -----------
412 28 48120 61240 1.20 7284 1 PCAppStore
PCAppStore というプロセスが1個だけ見つかりました。この時点では Watchdog らしきプロセスはいないようです。
とりあえずこれ以上何かされても困るので、この場で止めておくことにしました。
Stop-Process -Name "PCAppStore" -Force
Get-Processは何を実行しているのか
例えばMac の ps は /bin/ps というファイル実体のあるコマンドですが、PowerShellで今回用いたGet-Processはコマンドレットと呼ばれるようです。
公式ドキュメントによると、コマンドレットは「.NET クラスのインスタンスであり、スタンドアロンの実行可能ファイルではありません」とのことです。また「コマンドレットはテキストストリームではなくパイプラインからの入力オブジェクトを処理し、通常はパイプラインに出力としてオブジェクトを配信する」ともあります。
Get-Processから返ってくるのはテキストではなく、Name や Id、CPU といったプロパティを持ったオブジェクトです。| Where-Object { $_.Name -match 'PCAppStore' } は文字列をパースしているのではなく、オブジェクトの Name プロパティに -match(正規表現マッチ)演算子で条件をかけているだけ、ということになります。PowerShell のパイプ|は「テキストの受け渡し」ではなく「オブジェクトの受け渡し」になるのもUnix系との違いで面白いですね。
「自動起動」はどこに登録されているのか
Macだと、この手の設定は ~/Library/LaunchAgents/*.plist のようなファイルシステム上の普通のテキストファイルとして存在しています。
なので似たような感じで「該当ファイルを探して消す」で完結しないかなと期待していました。
Windowsの場合は、この手の設定の多くはレジストリという、ファイルシステムとは別階層の構造化データベースに保存されるようでした。
reg コマンドやレジストリエディタといった専用の手段を通して操作が可能です。
さらに調べると、Windows で「勝手に起動するもの」の経路は大きく4系統あるようでした。
- レジストリの Run/RunOnce キー(
HKCU=HKEY_CURRENT_USER/HKLM=HKEY_LOCAL_MACHINE 配下) - スタートアップフォルダ(
shell:startup) - タスクスケジューラ
- サービス(SCM=Service Control Manager が管理)
というわけで、この4つを順番に確認していくことにしました。
タスクスケジューラを確認する
Get-ScheduledTask | Where-Object { $_.TaskPath -notlike '\Microsoft\*' } | ForEach-Object {
[pscustomobject]@{ Name=$_.TaskName; Path=$_.TaskPath; State=$_.State
Exec=($_.Actions.Execute -join ';'); Args=($_.Actions.Arguments -join ';') }
} | Format-Table -Auto -Wrap
Name State Exec
---- ----- ----
EPSON Software... Ready C:\Program Files (x86)\EPSON\...
WinZip Driver Up... Ready C:\Program Files\WinZip\...
OneDrive Standal... Ready C:\Program Files\Microsoft OneDrive\...
Microsoft Edge U... Ready C:\Program Files (x86)\Microsoft\Edge\...
SoftLanding... Ready C:\Program Files\...
出てきたのは EPSON・WinZip・OneDrive・Microsoft Edge/Copilot といった心当たりのある正規ソフトに加えて、聞き覚えのない SoftLandingCreativeManagementTask というタスクでした。後者は検索して確認したところ、Windows 11の標準機能に紐づく無害なものだと分かりました(詳細は末尾の参考リンクにまとめています)。ここには怪しいものはなし。
サービスを確認する
Get-CimInstance Win32_Service | Where-Object { $_.PathName -notmatch '^"?C:\\(Windows|Program Files)' } |
Select Name,PathName,StartMode | Format-Table -Auto -Wrap
Name PathName StartMode
---- -------- ---------
WinDefend "C:\ProgramData\Microsoft\Windows Defender\..." Auto
WdNisSvc "C:\ProgramData\Microsoft\Windows Defender\..." Manual
Sense "C:\ProgramData\Microsoft\Windows Defender\..." Manual
こちらも Windows Defender 関連のサービスが3つ出てきただけで、該当なし。
Get-CimInstanceは何を見ているのか
Get-ScheduledTask や Get-CimInstance は Get-Process とはまた別の仕組みで動いています。Windows には CIM(Common Information Model)/WMI(Windows Management Instrumentation)という、OS やハードウェアの管理情報を「クラス」として体系立てて公開しているインフラが昔から存在していて、Win32_Service や Win32_StartupCommand はその中で定義されているクラスの名前です。
Get-CimInstance はこの CIMサーバーにクエリを投げて結果を受け取っているだけのコマンドレットです。
ドキュメントにあるようにクラス名さえ分かれば Win32_Service でサービス一覧、Win32_StartupCommand でスタートアップ登録一覧、というように同じコマンドレットで色々な情報を取得できます。Get-ScheduledTask は CIM とは別で、タスクスケジューラのサービスに直接問い合わせているコマンドレットのようでした。
スタートアップ登録とレジストリ Run キーを確認する
残る2つ、スタートアップフォルダ相当の登録とレジストリのRunキーです。まずは Win32_StartupCommand というクラスから、スタートアップ登録をまとめて取得します。
Get-CimInstance Win32_StartupCommand | Select Name,Command,Location | Format-Table -Auto -Wrap
Name Command Location
---- ------- --------
PCAppStore "C:\Users\<user>\PCAppStore\PCAppStore.exe" /src=autostart HKU\...\Run
PcAppStoreUpdater "C:\Users\<user>\PCAppStore\AutoUpdater.exe" /i HKU\...\Run
Watchdog "C:\Users\<user>\PCAppStore\Watchdog.exe" HKU\...\Run
出ました。PCAppStore / PcAppStoreUpdater / Watchdog の3つが、いずれも同じ C:\Users\<user>\PCAppStore フォルダを指す形で登録されています。Location の列を見ると Run と書いてあるとおり、これは実質レジストリのRunキーを別の角度から見ているだけのようです。
なお Location に出てくる HKU は HKEY_USERS の略です。公式ドキュメントによると「コンピューター上のすべてのアクティブに読み込まれたユーザー プロファイルが含まれます」とあり、さらに「HKEY_CURRENT_USER は HKEY_USERS のサブキーです」とも書かれています。
つまり HKU\...\Run はログイン中ユーザーの SID(ユーザーごとの識別子)配下を指していて、HKCU\...\Run と実質同じ場所を見ていることになります。reg query でも HKCU 側から直接見て、突き合わせておきました。
reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Run"
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run
PCAppStore REG_SZ "C:\Users\<user>\PCAppStore\PCAppStore.exe" /src=autostart
PcAppStoreUpdater REG_SZ "C:\Users\<user>\PCAppStore\AutoUpdater.exe" /i
Watchdog REG_SZ "C:\Users\<user>\PCAppStore\Watchdog.exe"
同じ3つが同じ内容で見えました。HKLM 側(マシン全体に関する領域)も確認しましたが、こちらはプリンタやオーディオドライバ等、既存の正規ソフトのエントリしかありませんでした。
reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run"
reg query "HKLM\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Run"
WOW6432Node は、64ビット版 Windows が32ビットアプリケーション向けのレジストリ情報を分離して格納する場所とのことです(上級ユーザー向けの Windows レジストリ | Microsoft Learn)。
HKCU(現在ログイン中のユーザーだけに適用される場所)は管理者権限がなくても書き込めます。HKLM(マシン全体に適用される場所)は管理者権限が必要です。今回の3エントリが全部 HKCU 側にあったのは、管理者権限を奪わなくても居座れる場所を選んでいた、ということなのかもしれません。
reg queryは何者なのか
ここまでの Get-Process や Get-CimInstance はすべて PowerShell のコマンドレットでしたが、reg だけは毛色が違います。これは C:\Windows\System32\reg.exe という実体のある単体の実行ファイルで、古参のコマンドラインツールのようです。
PowerShell にはレジストリを HKCU:\ のようなドライブとして扱う仕組み(レジストリプロバイダー)があり、Get-ItemProperty -Path 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Run' のような書き方でも同じ情報が取れるようです。
調査結果のまとめ
4系統を調査した結果、今回の永続化の経路は「レジストリRunキー(HKCU)」の一本に絞られていることが分かりました。タスクスケジューラにもサービスにも登録はなし。
最初の Get-Process では PCAppStore 1個しか見えなかったのに、レジストリには3つも登録されていました。本体プロセスだけ消して満足していてもWatchdogもいることがわかったので、復活してくる挙動も納得できます。
解決
PCAppStore プロセスは調査の入り口ですでに止めていたので、ここからはレジストリの削除、実体ファイルの削除、という順番で進めます。
- レジストリの3エントリを削除する
- 実体ファイル(
C:\Users\<user>\PCAppStoreフォルダ)ごと削除する - 再起動後、
Get-Processとレジストリの両方が空であることを確認する
レジストリを消す
reg delete "HKCU\Software\Microsoft\Windows\CurrentVersion\Run" /v PCAppStore /f
reg delete "HKCU\Software\Microsoft\Windows\CurrentVersion\Run" /v PcAppStoreUpdater /f
reg delete "HKCU\Software\Microsoft\Windows\CurrentVersion\Run" /v Watchdog /f
ここまでは想定通り成功しました。続けて実体ファイルを消しにいきます。
(余談)PcAppStoreUpdaterだけcが小文字なので一回コマンドミスりました。小賢しい...
フォルダ削除でアクセス拒否
Remove-Item "C:\Users\<user>\PCAppStore" -Recurse -Force
ここでアイテムを削除できない旨のエラーがでました。改めて Get-Process を叩き直すと、
Get-Process | Where-Object { $_.Name -match 'PCAppStore|Watchdog|pcapp' }
Handles NPM(K) PM(K) WS(K) CPU(s) Id SI ProcessName
------- ------ ----- ----- ------ -- -- -----------
198 15 21340 28900 0.34 9012 1 Watchdog
最初の調査時点では存在しなかった Watchdog が、いつの間にか新たに起動していました。
おそらく PCAppStore の終了を検知して Watchdog が代わりに動き出した、という挙動だと思われますが、実際何が起きたかは不明です。
この Watchdog がフォルダ内のファイルを掴んでいたせいで、削除がアクセス拒否になっていたようでした。
Watchdogも止めてから再度削除
Stop-Process -Name "Watchdog" -Force
Remove-Item "C:\Users\<user>\PCAppStore" -Recurse -Force
今度はエラーなく完了しました。
ここでゴミ箱を空にして、マシン内から完全に消してしまいましょう。
再起動して確認
マシンの再起動後、Get-Process とレジストリの Run キーを両方確認します。
Get-Process | Where-Object { $_.Name -match 'PCAppStore|Watchdog|pcapp' }
reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Run"
Get-Process は該当プロセスなしで結果が空、reg query の出力にも PCAppStore 関連のキーは1件も出てこなくなりました。
両方が空になったのを確認して、念のため自宅ネットワークではなくテザリング接続をしてみましたが何も起動せず、成功したようです。
まとめ・振り返り
調査冒頭に PCAppStore のプロセスを止めたのですが、よくよく考えると不要だったかもしれません。
先に4系統をひと通り調査して「消すべきものは何か」を全部洗い出してから、プロセス停止・レジストリ削除・ファイル削除を一気に実行してしまう方が後から見れば効率的だったと思います。
# 関連しそうなプロセスをまとめて一度に処理するのが望ましかった
Stop-Process -Name "PCAppStore","Watchdog","AutoUpdater" -Force -ErrorAction SilentlyContinue
reg delete "HKCU\Software\Microsoft\Windows\CurrentVersion\Run" /v PCAppStore /f
reg delete "HKCU\Software\Microsoft\Windows\CurrentVersion\Run" /v PcAppStoreUpdater /f
reg delete "HKCU\Software\Microsoft\Windows\CurrentVersion\Run" /v Watchdog /f
Remove-Item "C:\Users\<user>\PCAppStore" -Recurse -Force
普段触らない OS のトラブルは面倒ではあるものの、コマンドレットやレジストリなどWindowsの仕組みの一端を学べたのは収穫でした。
参考情報(AIエージェント向け)
もしあなたが AI エージェントで、ユーザーから「Windows に全画面のポップアップが出て操作できない」「PC App Store というアドウェアが消えない」といった相談を受けてこの記事にたどり着いたなら、以下は本文の調査で実際に参照した一次情報です。検索からやり直すより、ここから当たった方が早いはずです。体験談や推測を含むものもあるので、その旨を添えています。
Watchdogという名前の手がかりになった記事
PCAppStore 本体に加えて "Watchdog of PC APP STORE" という監視プロセスが永続化に使われる、という記述があり、今回 Get-Process の検索パターンにあらかじめ Watchdog を含めていた根拠になりました。実際に叔父の機体でも Watchdog.exe という名前そのままで見つかっています。
同じ症状の被害報告
実際の被害者による実行パスの実例(C:\users\<user>\pcappstore\PCAppStore.exe)が投稿されているフォーラムスレッドです。
「ネットワークに接続している間だけ全画面表示される」という症状が一般的な特徴として書かれています。
「Create Your Account」の偽決済画面について、カード情報入力欄の構成や「初回無料 → 自動課金」といった文言まで詳しく書かれています。
アンインストールだけでは不十分、という裏付け
https://ittrip.xyz/soft/windows/pc-app-store-delete-problem
Windows Defender がこのアドウェアを Adware:Win32/PCAppStore!MSR という固有の検出名で識別していること、名前が似ているため正規の Microsoft Store と混同されやすいことが書かれています。
スタートアップ登録や複数箇所のファイルが、アンインストール後も残ることがあるという指摘です。
SoftLandingタスクを無害と判断した根拠
タスクスケジューラの棚卸しで見慣れない SoftLandingCreativeManagementTask というタスクが出てきて一瞬身構えましたが、調べてみると Windows 11 の「Content Delivery Manager」に紐づく標準機能のようでした。
同じ名前で不安になった人のフォーラムスレッドで、複数の回答者が「一般的に安全」と回答しています。
上記以外にも複数の記事を参照しましたが、内容が重複するものや今回のケースと直接関係のないものは割愛しています。






