SlideShare uma empresa Scribd logo
1 de 41
東方紅魔郷AI

@aki33524
自己紹介
• 大阪大学工学部電子情報学科一回
• バイナリ読んだり
– x86限定

• SECCON CTF 2013本戦
– 観光勢
– !!!竹田氏!!!
目標
• 紅魔郷Exのノーショットノーボムノーミスクリア
する
– 回避特化

– スコアタックなどアイテムの処理は組み込んでい
ない
処理の介入
• 全体的な処理の把握
– 気合

• 毎フレーム呼ばれる関数を見つけ出してAIの
関数に書き換える
– Dllinjectionを用いる
STGのフローチャート
キー入力
の評価
描画

自機死亡
処理

敵弾移動
処理

自機移動
処理
敵移動処
理
STGのフローチャート
• 正確にはキー入力処理の後にシーン評価
(e.g タイトルシーン、ゲームシーン)
– 先の図はゲームシーン時の処理

• キー入力処理はシーンに依らず必ず行われ
る
– これを乗っ取る
Dllinjection
• Dllをターゲットのプロセスに読み込ませて介
入
– Attach/Detachの処理でメモリアドレスの書き換え
など

• CreateRemoteThreadを用いる方法
– 参考 O’REILLY アナライジングマルウェア
Dllinjection(読み込ませる側)
VirtualAllocEx()で対象プロセス内にメモリ確保
WriteProcessMemory()で確保したメモリに対象
Dllのファイルパスを書き込む
GetModuleHandle()で自プロセスがロードしてい
るkernel32.dllのハンドル取得

GetProcAddress()でLoadLibraryA()の関数アドレ
ス解決(ASLRが無効でなければならない)
CreateRemoteThread()でLoadLibraryA()を実行し
DLLの読み込み完了
Dllinjection(読み込ませる側)
• ASLRが有効であれば先の方法は用いることが出
来ない
– 自プロセスと対象プロセスのLoadLibraryA()のアドレ
スが必ずしも一致しない
– IMAGE_DLLCHARACTERISTICS_DINAMIC_BASEをoffに

• PEheader内のIAT(Import Address Table)から解
決することが出来る
• LoadLibraryA()と同様にFreeLibrary()でDllの
detachを実装出来る
Dllinjection(Dll側)
• DllMainの引数として呼び出された理由
(reasonForCall)が渡される
– DLL_PROCESS_ATTACH/DLL_PROCESS_DETACH
Dllinjection(Dll側)
• キーの評価関数(以下getKeyState())の上書
き
– Attach
• ラッパー関数(以下wrapper())を宣言してgetKeyState()
をwapper()で上書き、内部でgetKeyState()を呼び出す

– Detach
• 関数アドレスの復帰

• 書き換えが少ない(関数アドレスの4byteの
み)
Dllinjection(Dll側)
• InlineAsmは__declspec(naked)な関数に分け
る
– O2オプションで死ぬ
AIの手順
• 敵、敵弾、自機の解析
• nフレーム後の敵、敵弾の位置予測
• 頑張って避ける
敵、敵弾の解析
• 敵弾には速度ベクトルが入っている
– 基本的には不変なので誤差なく予測できる

• 敵、レーザーには速度ベクトルが入っていな
い
– しかもランダム性が高い
– メモリ上の解析からは限界がある
nフレーム後の予測
• 真面目にやるには敵弾を動かす関数を読むしか
無い??
– 解析コストがヤバイ

• 知りたいのは関数の結果であって処理ではない
– 敵、敵弾の更新をする関数(以下
refreshEnemyState())を見つけ出して実行するといい
– 変更されたデータを復帰する必要がある
nフレーム後の予測
• refreshEnemyState()はthiscallらしい
nフレーム後の予測
• 敵弾等のデータはグローバル変数として宣言
されていた
– PEheaderからグローバル変数の領域を知れる
– memcpyでまるごと退避、refreshEnemyState()を
実行、最後に復帰
nフレーム後の予測
nフレーム後の予測
• 自機狙い弾(自機の変位で速度情報が変化
する弾)の予測は出来ない
– 処理系から外す
– 自機の位置を変えてシミュレーション ステータス
が変わった弾を除く

• 弾の回避は予測が完全であることを前提
弾の回避
弾の回避
弾の回避
弾の回避
弾の回避
弾の回避
• フレームの先のほうから現在に向かってDP
的に更新するだけ
• 計算量はO(F E)
– F:フレーム数
– E:区間の最大数(弾の最大数)
弾の回避
弾の回避
弾の回避
• 一般にbool値のDPは効率が悪いことが多い
(らしい)
• 中心からの距離の二乗をその点の基本コスト
とする
– 被覆された点はコストINFとする
– 次のフレームの移動出来る点がすべてINFであれ
ばその点のコストはINF
– 次のフレームで移動出来る点の中で最もコストの
小さい点のコストを基本コストに加算して更新
弾の回避
弾の回避
弾の回避
弾の回避
弾の回避
弾の回避
• 縦横の移動しか考えない
– 初期化 O(F ^ 3)
– 通常弾(回転のない矩形)の被覆 O(F E H W)
• H, W : 弾の高さ、幅
• E : 弾の最大数

– レーザーの被覆 O(L F ^ 3)
• L : レーザーの最大数

– 被覆の更新O(F ^ 3)

• 総計算量はO(L F ^ 3)的
• ナナメ移動を考慮するとO((E+L) F ^ 5)
– 弾の被覆を独立して考えるのが難しい
弾の回避
• 1フレームに掛けられる時間は1/60sec
– 10^7 〜 10^8手数

• およそ60F先の計算なら処理落ちしないはず
– 実際は30fpsほどしか出なかった memcpy周りが
重い?
弾の回避
• 実演!!!
弾の回避
• ほとんど死なない
• 「そして誰もいなくなるか」以外は回避出来る
弾の回避
• 「そして誰もいなくなるか」の難しさ
– 弾が自機狙いではなく、弾の発生位置が自機狙
い
– 弾が大量
– 速度が遅い(弾抜けが出来ない)
弾の回避
• 1Fだけ全探索する
– 1F先の場面は自機狙いも含めて誤差がない
– 完全ではないがナナメ対応が出来る!!!
– 単純に17倍の処理時間が掛かる
– 30Fの先読み

• おおよそ20 〜 30F先読みで紅魔郷Exはすべ
て回避出来るらしい
弾の回避
• 死ななくなった
• 【AIリプレイ】紅魔郷Exノーショットノーボムノー
ミスクリア1/2
– http://www.nicovideo.jp/watch/sm23043946
質問

Mais conteúdo relacionado

Mais procurados

マーケティングサイエンス徹底入門と実践Part2
マーケティングサイエンス徹底入門と実践Part2マーケティングサイエンス徹底入門と実践Part2
マーケティングサイエンス徹底入門と実践Part2
宏喜 佐野
 

Mais procurados (20)

エターナらないゲーム開発
エターナらないゲーム開発エターナらないゲーム開発
エターナらないゲーム開発
 
ゲームAIとマルチエージェント(上)
ゲームAIとマルチエージェント(上)ゲームAIとマルチエージェント(上)
ゲームAIとマルチエージェント(上)
 
チュートリアル:細胞画像を使った初めてのディープラーニング
チュートリアル:細胞画像を使った初めてのディープラーニングチュートリアル:細胞画像を使った初めてのディープラーニング
チュートリアル:細胞画像を使った初めてのディープラーニング
 
ゲームAI製作のためのワークショップ(I)
ゲームAI製作のためのワークショップ(I)ゲームAI製作のためのワークショップ(I)
ゲームAI製作のためのワークショップ(I)
 
マーケティングサイエンス徹底入門と実践Part2
マーケティングサイエンス徹底入門と実践Part2マーケティングサイエンス徹底入門と実践Part2
マーケティングサイエンス徹底入門と実践Part2
 
Mother Waveletの設定と分解能について 修正第4版
Mother Waveletの設定と分解能について 修正第4版Mother Waveletの設定と分解能について 修正第4版
Mother Waveletの設定と分解能について 修正第4版
 
[DL Hacks]Learning Cross-modal Embeddings for Cooking Recipes and Food Images...
[DL Hacks]Learning Cross-modal Embeddings for Cooking Recipes and Food Images...[DL Hacks]Learning Cross-modal Embeddings for Cooking Recipes and Food Images...
[DL Hacks]Learning Cross-modal Embeddings for Cooking Recipes and Food Images...
 
Getting started with MLOps
Getting started with MLOpsGetting started with MLOps
Getting started with MLOps
 
RとStanで分散分析
RとStanで分散分析RとStanで分散分析
RとStanで分散分析
 
トピックモデルでテキストをクラスタリングしてみた
トピックモデルでテキストをクラスタリングしてみたトピックモデルでテキストをクラスタリングしてみた
トピックモデルでテキストをクラスタリングしてみた
 
とある金融屋の統計技師が時系列解析してみた
とある金融屋の統計技師が時系列解析してみたとある金融屋の統計技師が時系列解析してみた
とある金融屋の統計技師が時系列解析してみた
 
マイクロソフトのクラウドテクノロジーでゲーム開発(2019年7月)
マイクロソフトのクラウドテクノロジーでゲーム開発(2019年7月)マイクロソフトのクラウドテクノロジーでゲーム開発(2019年7月)
マイクロソフトのクラウドテクノロジーでゲーム開発(2019年7月)
 
HoloLens2とMeta QuestではじめるWebXR
HoloLens2とMeta QuestではじめるWebXRHoloLens2とMeta QuestではじめるWebXR
HoloLens2とMeta QuestではじめるWebXR
 
画像処理ライブラリ OpenCV で 出来ること・出来ないこと
画像処理ライブラリ OpenCV で 出来ること・出来ないこと画像処理ライブラリ OpenCV で 出来ること・出来ないこと
画像処理ライブラリ OpenCV で 出来ること・出来ないこと
 
天草プロデュース_池田るき様.pptx
天草プロデュース_池田るき様.pptx天草プロデュース_池田るき様.pptx
天草プロデュース_池田るき様.pptx
 
CycleGANによる異種モダリティ画像生成を用いた股関節MRIの筋骨格セグメンテーション
CycleGANによる異種モダリティ画像生成を用いた股関節MRIの筋骨格セグメンテーションCycleGANによる異種モダリティ画像生成を用いた股関節MRIの筋骨格セグメンテーション
CycleGANによる異種モダリティ画像生成を用いた股関節MRIの筋骨格セグメンテーション
 
今だから聞きたい 「一番新しい xRアプリの作り方」 2020年 最新版
今だから聞きたい 「一番新しい xRアプリの作り方」 2020年 最新版今だから聞きたい 「一番新しい xRアプリの作り方」 2020年 最新版
今だから聞きたい 「一番新しい xRアプリの作り方」 2020年 最新版
 
「3Dゲームをおもしろくする技術 」のいろいろな読み方
「3Dゲームをおもしろくする技術 」のいろいろな読み方「3Dゲームをおもしろくする技術 」のいろいろな読み方
「3Dゲームをおもしろくする技術 」のいろいろな読み方
 
「シリアスゲーム(Serious Game)」作りを考える
「シリアスゲーム(Serious Game)」作りを考える「シリアスゲーム(Serious Game)」作りを考える
「シリアスゲーム(Serious Game)」作りを考える
 
【Unite Tokyo 2019】大量のオブジェクトを含む広いステージでも大丈夫、そうDOTSならね
【Unite Tokyo 2019】大量のオブジェクトを含む広いステージでも大丈夫、そうDOTSならね【Unite Tokyo 2019】大量のオブジェクトを含む広いステージでも大丈夫、そうDOTSならね
【Unite Tokyo 2019】大量のオブジェクトを含む広いステージでも大丈夫、そうDOTSならね
 

Destaque

能年玲奈ちゃんのファンとして本気を出してみた
能年玲奈ちゃんのファンとして本気を出してみた能年玲奈ちゃんのファンとして本気を出してみた
能年玲奈ちゃんのファンとして本気を出してみた
真一 北原
 
ENJOY H@RMONY!!とボーダーbot
ENJOY H@RMONY!!とボーダーbotENJOY H@RMONY!!とボーダーbot
ENJOY H@RMONY!!とボーダーbot
treby
 
今流行りのウェブアプリ開発環境Yeoman
今流行りのウェブアプリ開発環境Yeoman今流行りのウェブアプリ開発環境Yeoman
今流行りのウェブアプリ開発環境Yeoman
tomo_masakura
 
2011インターンシップ_09N1123_前野沙織
2011インターンシップ_09N1123_前野沙織2011インターンシップ_09N1123_前野沙織
2011インターンシップ_09N1123_前野沙織
saolympic
 

Destaque (20)

能年玲奈ちゃんのファンとして本気を出してみた
能年玲奈ちゃんのファンとして本気を出してみた能年玲奈ちゃんのファンとして本気を出してみた
能年玲奈ちゃんのファンとして本気を出してみた
 
LT駆動開発03 Web制作をカレー作りで例えてみる
LT駆動開発03 Web制作をカレー作りで例えてみるLT駆動開発03 Web制作をカレー作りで例えてみる
LT駆動開発03 Web制作をカレー作りで例えてみる
 
過換気症候群
過換気症候群過換気症候群
過換気症候群
 
日経ITpro EXPO 2015: 次世代IoTアーキテクチャ CEO玉川、CTO安川
日経ITpro EXPO 2015: 次世代IoTアーキテクチャ CEO玉川、CTO安川日経ITpro EXPO 2015: 次世代IoTアーキテクチャ CEO玉川、CTO安川
日経ITpro EXPO 2015: 次世代IoTアーキテクチャ CEO玉川、CTO安川
 
リクルート式 自然言語処理技術の適応事例紹介
リクルート式 自然言語処理技術の適応事例紹介リクルート式 自然言語処理技術の適応事例紹介
リクルート式 自然言語処理技術の適応事例紹介
 
About Servicegrant / digest
About Servicegrant / digestAbout Servicegrant / digest
About Servicegrant / digest
 
ENJOY H@RMONY!!とボーダーbot
ENJOY H@RMONY!!とボーダーbotENJOY H@RMONY!!とボーダーbot
ENJOY H@RMONY!!とボーダーbot
 
「PUSH 大阪」の紹介
「PUSH 大阪」の紹介「PUSH 大阪」の紹介
「PUSH 大阪」の紹介
 
今流行りのウェブアプリ開発環境Yeoman
今流行りのウェブアプリ開発環境Yeoman今流行りのウェブアプリ開発環境Yeoman
今流行りのウェブアプリ開発環境Yeoman
 
データ可視化とコスト管理
データ可視化とコスト管理データ可視化とコスト管理
データ可視化とコスト管理
 
営業プロセス研修資料
営業プロセス研修資料営業プロセス研修資料
営業プロセス研修資料
 
2011インターンシップ_09N1123_前野沙織
2011インターンシップ_09N1123_前野沙織2011インターンシップ_09N1123_前野沙織
2011インターンシップ_09N1123_前野沙織
 
俺の仕事がこんなに楽しいわけが無い・公開版(初出:2010/12/20 株式会社ECナビ会社説明会@IAMAS)
俺の仕事がこんなに楽しいわけが無い・公開版(初出:2010/12/20 株式会社ECナビ会社説明会@IAMAS)俺の仕事がこんなに楽しいわけが無い・公開版(初出:2010/12/20 株式会社ECナビ会社説明会@IAMAS)
俺の仕事がこんなに楽しいわけが無い・公開版(初出:2010/12/20 株式会社ECナビ会社説明会@IAMAS)
 
⑨Web制作、デザイン、セキュリティなどの基礎を学ぼう
⑨Web制作、デザイン、セキュリティなどの基礎を学ぼう⑨Web制作、デザイン、セキュリティなどの基礎を学ぼう
⑨Web制作、デザイン、セキュリティなどの基礎を学ぼう
 
リクルートにおけるVDI導入とCiscoデータセンタソリューション
リクルートにおけるVDI導入とCiscoデータセンタソリューションリクルートにおけるVDI導入とCiscoデータセンタソリューション
リクルートにおけるVDI導入とCiscoデータセンタソリューション
 
リクルートのWebサービスを支える共通インフラ「RAFTEL」
リクルートのWebサービスを支える共通インフラ「RAFTEL」リクルートのWebサービスを支える共通インフラ「RAFTEL」
リクルートのWebサービスを支える共通インフラ「RAFTEL」
 
libpgenでパケット操作
libpgenでパケット操作libpgenでパケット操作
libpgenでパケット操作
 
自己紹介用プレゼン
自己紹介用プレゼン自己紹介用プレゼン
自己紹介用プレゼン
 
⼤企業で実現するイマドキの内製開発
⼤企業で実現するイマドキの内製開発⼤企業で実現するイマドキの内製開発
⼤企業で実現するイマドキの内製開発
 
テスト駆動インフラ構築-Chefとserverspecを使ったインフラ自動化のすすめ-
テスト駆動インフラ構築-Chefとserverspecを使ったインフラ自動化のすすめ-テスト駆動インフラ構築-Chefとserverspecを使ったインフラ自動化のすすめ-
テスト駆動インフラ構築-Chefとserverspecを使ったインフラ自動化のすすめ-
 

Último

Último (12)

NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 

東方紅魔郷AI