saketnkzw

HomeSeriesTagsAbout

PC App Store撃退記

叔父からカレンダーのフリーソフトを入れようとしたらWindowsマシン上に変な画面が前面に出て、何の操作もできないと相談を受けました。
調べてみるとウイルスではないものの、かなり悪質なアドウェア「PC App Store」なるもののようで、被害者もそこそこいるようです。
アプライド【公式】 (@applied_group) on X【注意喚起】 「PC App Store」というアドウェアがソフトのインストーラーなどに同梱される形でご相談が増えています ① 見覚えのない広告が表示や覚えがないソフトがある(操作可能・通常アンインストール可) ② PC App Storeが全画面表示されて操作がほぼできない(重症例) ③x.comhttps://x.com/applied_group/status/2046529494023106678
私は普段Macしか触らないのでWindowsの構造はあまり詳しくなかったのですが、対応する中で「レジストリって何なのか」「コマンドの裏で何が動いているのか」など、色々学びがあったので記録しておきます。

背景

PC App Store という名前で検索すると、同じ症状の報告がいくつか見つかりました。
ただ検索して分かる範囲の情報は玉石混交であり、症状や解決方法に結構幅がありそうだったので、本稿では実際に確認できた事実ベースで記録します。

症状は次の通りでした。

  • ネットワークに接続すると、全画面の「PC App Store」ポップアップが表示され、クレジットカード入力を求める「Create Your Account」画面に占拠されて他の操作ができなくなる
  • ネットワークを切断すると通常通り操作できる
  • タスクマネージャー等は起動できるが、全画面ウィンドウが最前面に固定されていて操作しづらい

状況の詳細

発覚してからの流れはこんな感じでした。

  1. 叔父本人が Windows の「アプリ」設定(設定 → アプリ → インストールされているアプリ)から PCAppStore を見つけてアンインストールを実行。しかし症状は収まらず。

  2. 私が軽く調査し、電話越しにコントロールパネルの「プログラムのアンインストール」を試してもらいました。一覧からは消えるものの、しばらくすると同じポップアップが復活する、を繰り返している状態。

  3. どうしようもなさそうなので、私が直接マシンを預かることに。

小話的に面白かったのは、症状が出ている間のしのぎ方です。メールを送りたいときは、

  • ネットワークに繋がずにメールを作成して送信ボタンを押す
  • そこからネットワークに接続する
  • PC App Store はプロセスとして立ち上がってくるものの、メール自体はリトライ処理で送信できていたとのこと。

画面は乗っ取られるもののバックグラウンドの通信までは妨害しないらしいということで、確かにウイルス的ではなく、ただの迷惑なアプリなのだなと感じました。

実機での調査

マシンを預かり、何が起きているのか調査を行います。

事前に調査をした結果、同様の被害報告の中で PCAppStore 本体だけでなく "Watchdog of PC APP STORE" という名前の監視プロセスが永続化に使われる、という記述を見かけていました。
How to Remove the PC App Store Virus - Detailed InstructionsPC App Store is a rogue adware program that spams you with misleading McAfee warning and renewal pop-ups. Here, I show you how to remove it:howtoremove.guidehttps://howtoremove.guide/pc-app-store-virus/

というわけで、まずは WatchdogAutoUpdater といった名前のプロセスが実際に動いているかどうかから確認していきます。

今動いているプロセスを見る

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 クラスのインスタンスであり、スタンドアロンの実行可能ファイルではありません」とのことです。また「コマンドレットはテキストストリームではなくパイプラインからの入力オブジェクトを処理し、通常はパイプラインに出力としてオブジェクトを配信する」ともあります。

コマンドレットの概要 - PowerShellコマンドレットの概要learn.microsoft.comhttps://learn.microsoft.com/ja-jp/powershell/scripting/developer/cmdlet/cmdlet-overview?view=powershell-7.6

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-ScheduledTaskGet-CimInstanceGet-Process とはまた別の仕組みで動いています。Windows には CIM(Common Information Model)/WMI(Windows Management Instrumentation)という、OS やハードウェアの管理情報を「クラス」として体系立てて公開しているインフラが昔から存在していて、Win32_ServiceWin32_StartupCommand はその中で定義されているクラスの名前です。

Windows Management Instrumentation - Win32 appsWindows Management Instrumentation (WMI) は、Windows ベースのオペレーティング システム上の管理データと操作のインフラストラクチャです。learn.microsoft.comhttps://learn.microsoft.com/ja-jp/windows/win32/wmisdk/wmi-start-page

Get-CimInstance はこの CIMサーバーにクエリを投げて結果を受け取っているだけのコマンドレットです。

Get-CimInstance (CimCmdlets) - PowerShellこのコマンドレットは、Windows プラットフォームでのみ使用できます。 Get-CimInstance コマンドレットは、CIM サーバーからクラスの CIM インスタンスを取得します。 このコマンドレットのクラス名またはクエリを指定できます。 このコマンドレットは、CIM サーバー上に存在する CIM インスタンスのスナップショットを表す 1 つ以上の CIM インスタンス オブジェクトを返します。 InputObject パラメーターが指定されていない場合、コマンドレットは次のいずれかの方法で動作します。 ComputerName パラメーターも CimSession パラメーターも指定されていない場合、このコマンドレットはコンポーネント オブジェクト モデル (COM) セッションを使用してローカル Windows Management Instrumentation (WMI) で動作します。 ComputerName パラメーターまたは CimSession パラメーターが指定されている場合、このコマンドレットは、ComputerName パラメーターまたは CimSession パラメーターで指定された CIM サーバーに対して動作します。 InputObject パラメーターが指定されている場合、コマンドレットは次のいずれかの方法で動作します。 ComputerName パラメーターも CimSession パラメーターも指定されていない場合、このコマンドレットは入力オブジェクトの CIM セッションまたはコンピューター名を使用します。 ComputerName パラメーターまたは CimSession パラメーターが指定されている場合、このコマンドレットは CimSession パラメーター値または ComputerName パラメーター値を使用します。learn.microsoft.comhttps://learn.microsoft.com/ja-jp/powershell/module/cimcmdlets/get-ciminstance?view=powershell-7.6

ドキュメントにあるようにクラス名さえ分かれば Win32_Service でサービス一覧、Win32_StartupCommand でスタートアップ登録一覧、というように同じコマンドレットで色々な情報を取得できます。Get-ScheduledTask は CIM とは別で、タスクスケジューラのサービスに直接問い合わせているコマンドレットのようでした。

Get-ScheduledTask (ScheduledTasks)Use this topic to help manage Windows and Windows Server technologies with Windows PowerShell.learn.microsoft.comhttps://learn.microsoft.com/ja-jp/powershell/module/scheduledtasks/get-scheduledtask?view=windowsserver2022-ps

スタートアップ登録とレジストリ 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 に出てくる HKUHKEY_USERS の略です。公式ドキュメントによると「コンピューター上のすべてのアクティブに読み込まれたユーザー プロファイルが含まれます」とあり、さらに「HKEY_CURRENT_USERHKEY_USERS のサブキーです」とも書かれています。

上級ユーザー向けの Windows レジストリ - Windows ServerWindows レジストリと、レジストリを編集する方法について説明します。learn.microsoft.comhttps://learn.microsoft.com/ja-jp/troubleshoot/windows-server/performance/windows-registry-advanced-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-ProcessGet-CimInstance はすべて PowerShell のコマンドレットでしたが、reg だけは毛色が違います。これは C:\Windows\System32\reg.exe という実体のある単体の実行ファイルで、古参のコマンドラインツールのようです。

PowerShell にはレジストリを HKCU:\ のようなドライブとして扱う仕組み(レジストリプロバイダー)があり、Get-ItemProperty -Path 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Run' のような書き方でも同じ情報が取れるようです。

Windows PowerShell プロバイダーの概要 - PowerShellWindows PowerShell プロバイダーの概要learn.microsoft.comhttps://learn.microsoft.com/ja-jp/powershell/scripting/developer/provider/windows-powershell-provider-overview?view=powershell-7.6
レジストリ キーの操作 - PowerShellこの記事では、PowerShell を使用してレジストリ キーを処理する方法について説明します。learn.microsoft.comhttps://learn.microsoft.com/ja-jp/powershell/scripting/samples/working-with-registry-keys?view=powershell-7.6

調査結果のまとめ

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という名前の手がかりになった記事

How to Remove the PC App Store Virus - Detailed InstructionsPC App Store is a rogue adware program that spams you with misleading McAfee warning and renewal pop-ups. Here, I show you how to remove it:howtoremove.guidehttps://howtoremove.guide/pc-app-store-virus/

PCAppStore 本体に加えて "Watchdog of PC APP STORE" という監視プロセスが永続化に使われる、という記述があり、今回 Get-Process の検索パターンにあらかじめ Watchdog を含めていた根拠になりました。実際に叔父の機体でも Watchdog.exe という名前そのままで見つかっています。

同じ症状の被害報告

PC App Store virus? - Virus, Trojan, Spyware, and Malware Removal HelpPC App Store virus? - posted in Virus, Trojan, Spyware, and Malware Removal Help: Hi everyone. This forum was highly recommended to me by a great tech friend on a discord server I have a Lenovo Legion Go running Windows 11. I rarely use the browser as this device is a gaming handheld but I have used it do download some things. The other day Windows Defender detected an adware threat: Win32/Stapcore Location: C:\users\jeff\pcappstore\pcappstore.exe I clicked remove in windows defender howev...www.bleepingcomputer.comhttps://www.bleepingcomputer.com/forums/t/797483/pc-app-store-virus/

実際の被害者による実行パスの実例(C:\users\<user>\pcappstore\PCAppStore.exe)が投稿されているフォーラムスレッドです。

PC App Store(迷惑ソフト)先日、生徒さんより「画面にカードの登録画面が表示されて、何をしても操作できなくなって困っています」と連絡があり&hellip;pasokonjyuku.comhttps://pasokonjyuku.com/setting/pc-app-store/

「ネットワークに接続している間だけ全画面表示される」という症状が一般的な特徴として書かれています。

急にカード情報の入力画面が出てきて戻らない!「PC App Store」というアドウェアの対処法ファイルをダウンロードしようとしたら偽のカード情報入力ページに強制的に切り替わり、再起動しても戻ってしまう。原因は「PC App Store」というアドウェアです。原因と対処法、やってはいけないことをまとめました。www.digitalaoba.comhttps://www.digitalaoba.com/blog/20260709_pc_app_store_adware/

「Create Your Account」の偽決済画面について、カード情報入力欄の構成や「初回無料 → 自動課金」といった文言まで詳しく書かれています。

アンインストールだけでは不十分、という裏付け

https://ittrip.xyz/soft/windows/pc-app-store-delete-problemhttps://ittrip.xyz/soft/windows/pc-app-store-delete-problem

Windows Defender がこのアドウェアを Adware:Win32/PCAppStore!MSR という固有の検出名で識別していること、名前が似ているため正規の Microsoft Store と混同されやすいことが書かれています。

Get rid of PC App Store adware: Step-by-step guideProtect your device from the PC App Store adware. Explore our comprehensive guide for effective removal techniques and boost your cybersecurity today.www.expressvpn.comhttps://www.expressvpn.com/blog/pc-app-store-adware/

スタートアップ登録や複数箇所のファイルが、アンインストール後も残ることがあるという指摘です。

SoftLandingタスクを無害と判断した根拠

タスクスケジューラの棚卸しで見慣れない SoftLandingCreativeManagementTask というタスクが出てきて一瞬身構えましたが、調べてみると Windows 11 の「Content Delivery Manager」に紐づく標準機能のようでした。

SoftLanding - Windows 11SoftLanding - posted in Windows 11: I have recently found a folder in Windows/System32/Tasks called SoftLanding I have never heard of SoftLanding. It is scheduled to run a task tomorrow on the 5th May. I use Windows 11 What is this? How do I get rid of it?www.bleepingcomputer.comhttps://www.bleepingcomputer.com/forums/t/815839/softlanding/

同じ名前で不安になった人のフォーラムスレッドで、複数の回答者が「一般的に安全」と回答しています。


上記以外にも複数の記事を参照しましたが、内容が重複するものや今回のケースと直接関係のないものは割愛しています。