Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Untitled

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest. →
Avatar for fuse fuse
April 23, 2026
110

 Untitled

Avatar for fuse

fuse

April 23, 2026

Transcript

  1. 自己紹介 会社 株式会社テクノプロジェクト ヘルスケアサービスデザイン部 仕事 Azure / AWS インフラ基盤支援 生まれ

    2000年(C:ドライブ世代) ゲーム ゲーマー歴 = 年齢。ゲームをしない日はない。生まれる前からドラクエ を聞き、生後もJALECOのゲームで一緒に遊ぶ
  2. 自動化の進化の歴史 STEP 1 UWSC 座標固定のため デザインが変わると死 ぬ → STEP 2

    Python + Selenium ブラウザを 開き続けないといけな い → 他のゲームができな い CSS / HTML / JS を学ぶ → STEP 3 urllib + BeautifulSoup ブラウザ不要に! GET / POST / Cookie を 学ぶ → STEP 4 LINE Bot (GCP / Heroku) 通知を LINEで受け取りたい → 挫折して終了
  3. UWSC 〜 自動化ツール その1 〜 UWSCとは? Windowsのキーボード・マウス操作を記 録・再生して自動化する無料ツール。プ ログラミング知識なしでクリックや入力 を自動化できる。

    // マウスを座標(500,300)に移動してクリック MOV(500, 300) BTN(LEFT, CLICK) SLEEP(1) やったこと:ゲームの攻撃ボタンをひたすら自動クリック スクリプトを記録&入力し、プログラミングの知識をつけていく。 問題:座標固定のため、ゲームのデザインが少し変わると動かなくなる ユーザーに自動化しているとばれるとヤバイ!
  4. Python + Selenium 〜 自動化ツール その2 〜 Seleniumとは? Pythonから操作できる、ブラウザ自動操 作ライブラリ。Webのテストやスクレイ

    ピングによく使われる。CSSセレクタで HTML要素を指定して操作できる。 from selenium import webdriver driver = webdriver.Chrome() driver.get("http://game.example") # ボタンをCSSセレクタで探してクリック btn = driver.find_element( By.CSS_SELECTOR, ".attack-btn") btn.click() 得たもの:HTML / CSS / JavaScriptの基礎知識 問題:ブラウザを開きっぱなしにしないといけない。他のゲームができない
  5. urllib + BeautifulSoup 〜 自動化ツール その3 〜 urllibとは? Pythonの標準ライブラリ。ブラウザを開 かずにHTTPリクエストを直接送れる。

    GETやPOSTでサーバーと通信し、Cookieも 手動で管理できる。 import urllib.request import http.cookiejar # Cookieを保持しながらログイン cj = http.cookiejar.CookieJar() opener = urllib.request.build_opener( urllib.request.HTTPCookieProcessor(cj)) # POST でログイン opener.open(url, data) 得たもの:GET / POST / Cookie / HTTPの仕組みを体感した ブラウザ不要!バックグラウンドで動く! → 他のゲームもできる!
  6. LINE Bot 〜 自動化ツール その4 〜 「自動化の操作を友人とLINEでしたい」という欲が生まれる。 Heroku / GCP

    クラウド上でPythonプログラムを常時起動する ためのプラットフォーム。LINEのWebhookを受 け取るサーバーとして利用。 → LineのBot作成まで作り、そこから挫折。 Lineのメッセージと自動化の指示をどうつなげるか少し悩んでやめた。
  7. このゲーム、やばすぎる エラー全公開 連打するとエラー → システムバージョン・DB情 報がダダ漏れ MySQL丸見え なぜかDBが全公開状態 インジェクション無対策 検索に

    ' を入れるだけでDBエラー → 内部情報がユーザーに筒抜けで出回る 文字化けでGMコマンド実行 おそらくDB側がShift-JIS設定。バックスラッシュ を文字化けさせコマンドを実行可能 TTL無限のセッションID セッションIDが漏れたら乗っ取られ放題 しかもどっかから漏れてる 掲示板でXSS可能 スクリプトが普通に動く → 報告フォームからメール返答なし。 有識者が社長のTwitterDMに送って解決
  8. 「ゲームの設定はexeの中にある」という確信 プチコンmkIIなども同時期に遊んでいた古部少年。 「知識があれば設定を確認・編集できる」と確信。 → STEP 01 バイナリエディタ プロセスメモリエディタ デバッガ Stirlingなどでexeを解析しようと

    する → STEP 02 16進数の海へ 横についていた文字=ニモニッ ク(アセンブリ)を発見。「こ れは何だ……?」 STEP 03 C言語を学ぶ 「英語なら全部同じだろ」 → 完全に見当違い
  9. 「なぜ動くのか?」を自分で再現する その後、ゲームで出回っていた情報をもとに、SQLまわりを学ぶ。 「こいつに勝つためにSQLiとXSSを調べた。DVWAがオススメらしい。」 → 脆弱なアプリを自前でデプロイして動かしてみることにした。 $ sudo docker run --rm

    -p 80:80 dvwa [*] DVWAをデプロイ → Linux / Docker / MySQLを学ぶ(必要に迫られて) [+] ショップ検索に ' を入力 → DBエラーを確認 [+] 情報取得を再現できた [+] スクリプトが画面で実行されるメカニズムを理解 [!] 「エラーを出すことが攻撃の第一歩」を体で覚えた 得たもの:SQLi / XSS / Docker / Linux / MySQL の実践知識
  10. 古部少年の行動パターンを分析すると この歴史を振り返ると、すべての行動に共通する構造があった。 動機 ゲームで 強くなりたい → 行動 手当たり次第 に試す執念 →

    失敗 目的が 達成できない → 習得 過程で 技術が身につく 実例: UWSC → 失敗 → 座標・マウス操作の仕組みを知った Selenium → ブラウザを諦める → urllib でHTTPを理解した バイナリ解析 → 見当違い → サーバー・アセンブリの概念を知った 乗っ取り → 敗北 → SQLi・XSSを本格的に調べるきっかけになった