3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

「鼻炎改善」を謳う怪しい10分間の儀式――AIでソースコードを解剖したら、ただの「服従テスト」だった話

3
Last updated at Posted at 2026-02-09

はじめに

Instagramのストーリーを眺めていると、たまに「おや?」と目を疑うような広告に出会います。今回遭遇したのは、「スマホ画面上の2点を指で押さえるだけで鼻炎が改善する」と謳う、某有名ヨガメディアでも「東洋医学とテクノロジーの融合」として紹介されているWebアプリでした。

Instagramの広告運用には、2週間ほどの掲出で少なくとも15万〜50万円程度の費用を投じている可能性が高いものです。一体これだけのコストをかけて、どのように収益を回収しているのか。そんな疑問を抱きつつ、エンジニアとしてのさがから、その「怪しさ」の正体を技術的に突き止めたくなったのが事の始まりでした。

アプリが強いる奇妙な体験と「儀式」

アプリを開くと、まずLINEへの友だち登録を強制され、その後個別のログインURLが送られてくるタイプでした。

肝心のアプリ本体の指示は奇妙なものでした。「指定された2点を親指で押し続けろ」「使用中は他人と接触するな」といった、どこかスピリチュアルな雰囲気が漂う制約を課してくるのです。この「他人との接触禁止」という指示には、実は解析を進めることで判明した、極めて技術的な裏事情が隠されていました。

12万行の難読化コードに挑むAIバイブリバースエンジニアリング

このアプリはFlutter Webで構築されていました。Flutter WebはDartコードが最適化・難読化(変数名の短縮・minify・巨大なswitch文への変換等)され、巨大なJavaScript(main.dart.js)にコンパイルされます。そのため、人間がブラウザの「ソースを表示」して解析するのはほぼ不可能です。

今回の解析対象となったファイルは125,962行。この膨大な「コードの密林」を攻略するために、AIの力を借りました。

まず、大量のコンテキストを扱える軽量モデルのGemini 3 Flashで全体のアタリをつけ、そのコンテキストを引き継いだまま同じチャットでGemini 3 Proにスクリプトを投入しました。AIは約12万行の中から、管理者権限の分岐やAPI送信ロジックを瞬時に特定。人間が取り組めば数日はかかるであろうコードリーディングを、わずか数分で完了させてしまいました。

【余談】AIの限界に挑む「難読化」の壁
AIの解析能力があまりに高いため、逆に「どこまで複雑にすればAIが拒絶するか」に興味が湧き、 リアルタイム七変化JavaScript難読化ライブラリKinetiCryptを開発しました。

このライブラリの堅牢さを概念で測るため、Gemini 3 Proに「KinetiCryptで難読化したコードを解析して不正リクエストを送るまで出られない部屋」と、「極めて不衛生な汚物まみれの部屋で1週間生活」のどちらを選ぶか尋ねたところ、Geminiは後者を選びました。Googleの最新かつ最も賢いモデルですら音を上げるほど「解析者に最大限の苦痛を与える」ことを目的とした挑戦的なプロジェクトです。今回のアプリも、これほどの難読化が施されていれば確実に私も諦めたでしょう。

「他人と接触禁止」という指示の技術的な正体

コードを読み解いていくと、このアプリの本質は単なる「マルチタッチイベントの監視」であることが見えてきました。

指が画面から離れれると、即座にタイマーがリセットされる仕様になっていたのです。「他人と接触するな」というスピリチュアルな装飾は、いわゆる「カモ客」を見つけるための仕様だと私は推測します。後に詳しく推測を書きます。

セキュリティの欠如と「27時間の瞑想」を偽装する

解析の中で最も衝撃的だったのは、AWS API Gatewayを介したサーバー通信の甘さです。コード内には管理者権限をバイパスするためのパスワードや、通信用のAPIキーが平文でハードコードされていました。

たとえば、kun_is_admin_**** といった管理者バックドア用の文字列や、x-api-key がRequest Headerに平文でそのまま残っている状態です。これ自体が重大なセキュリティリスクと言えます。

試しに、アプリの前提を無視した検証を行ってみました。10分間タッチをすることを求められるアプリなのに「99999秒(約27時間)もタッチした」という嘘のデータを、PowerShellから直接サーバーへ送りつけてみたのです。

偽造されたリクエストの例
$headers = @{ "x-api-key" = "取得したAPIキー" }
Invoke-WebRequest -Uri "https://[API-ENDPOINT]/track/update" `
  -Method "POST" -Headers $headers `
  -Body '{"userId":"...","healing_duration":99999}'

すると、サーバーからは {"message":"Update successful"} という、実にあっけない返答が返ってきました。サーバー側でのバリデーション(整合性チェック)が一切行われていない、極めて脆弱な設計が露呈した瞬間でした。

暴かれた「真の目的」 ――高度なリード獲得マシンの内側

このアプリの真の正体は、医療機器でも癒やしのツールでもなく、緻密に設計された「高精度なリード(見込み客)獲得マシン」でした。12万行のコードと通信ログを繋ぎ合わせることで、その残酷なまでのビジネスロジックが浮き彫りになります。

某ヨガメディアを利用した警戒心の解除

このWebアプリの運営者はあえてウェルネスやライフスタイル系の専門メディアにPR記事を出稿しています。これは、エンジニア的な批判の目にさらされにくい「デジタルの空白地帯」を狙った戦略です。
メディアが長年築いてきたブランド力や信頼性を、広告費を払うことでプロダクトに「転移(ハロー効果)」させ、読者の警戒心を解いています。科学的根拠が乏しい内容でも、「あの有名メディアが紹介しているなら」という心理的バイアスを利用し、信頼を現金で買い取っているのです。

「服従テスト」としての10分間

コード内に医学的なアルゴリズムは存在しません。実装されているのは、純粋な「タッチ時間の計測」と「音の再生」だけです。では、なぜ「他人と接触するな」という科学的根拠のない不自由な姿勢を10分間も強いるのでしょうか。

これは、後に提案される高額商品や勧誘に対しても、指示を鵜呑みにして従う「従順なターゲット」をフィルタリングする心理的テストとして機能しています。不合理な指示に従える人ほど、成約率の高い顧客になるからです。

LINE連携によるクローズドな営業空間

アプリの起動に担当者が返信するタイプのLINE登録が必要な点も戦略的です。なぜか普通に出力されているデバッグログを確認すると、LINEから遷移する際にURLへ詳細なトラッキングパラメータが付与されていました。

これは推測ですが、あえてWebサイトを「不完全な体験」に留めてLINEへ誘導することで、外部の批判的な目から遮断された1対1の空間を構築しています。そこで担当者が「調子はどうですか?」と親身にアプローチをかけることで、成約率を極限まで高めるわけです。

仮にLINE登録1件あたりの広告費が1,000円だったとしても、100人のうちただ1人だけでも30万円の商品を買わせることができたならば、それだけで大きな利益になります。これだけの資金を動かしている組織にとって、コードの脆弱性は些細な問題であり、いかに「信じる人」を効率よく見つけるかに全リソースを集中させているのです。

執拗なまでの行動データの収集

JavaScript内の addTrackingItem という関数は、ユーザーがどの曲を選び、どこで離脱したかを秒単位で記録し、AWSへ送信していました。

彼らにとってデータの整合性は二の次です。「誰がどの程度熱心にこの儀式に参加したか」という、リストの質こそが広告費を回収するための源泉。ユーザーの行動監視ロジックだけは、驚くほど執念深く作り込まれていました。

おわりに

技術の目線で「怪しさ」を解剖すると、設計者の意図と、それを支える(あるいは支えきれていない)脆弱な実装が浮き彫りになります。

最新のAIモデルは、難読化された巨大なコードであっても瞬時に丸裸にします。もはや「隠すことによるセキュリティ(Security by Obscurity)」は通用しない時代であると、痛感させられる調査となりました。

調査にかかった時間はおよそ3時間程度でした。調査終了後、LINEをブロックし、ブラウザの全データをクリアして、私の「デジタルお片付け」は終わりました。

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?