Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
LINE_DM_201609.pdf
Search
kenjiaiko
September 26, 2016
Technology
2.5k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
LINE_DM_201609.pdf
kenjiaiko
September 26, 2016
Other Decks in Technology
See All in Technology
人間はどの意思決定を手放せるのか
kawasima
14
5.7k
AI時代、データエンジニアが一番おもろい
genshun9
0
550
MCPをつなげて作る組織横断のAIエージェント基盤(の開発工程)
tsubakimoto_s
0
120
Gitは怖い?共有ワークスペースから始めるSnowflakeチーム開発
coco_se
0
210
Spring BootからQuarkusへの移行
tatsuya1bm
2
110
HRC_Frontend_Conference_Fukuoka_2026.pdf
ts020
0
680
データ_AIの事業の勝敗をわけるもの
nek0128
0
270
俺の仕事は AIに奪われないし、たぶんその BIも要らない
hikaruri
0
440
SQL文一行も書けない人事がCortexもろもろを使って人事業務を楽にしてみる
ponponmikankan
1
240
事業課題から技術的負債に向き合う
sansantech
PRO
2
1.3k
コスト最適化の「めんどくさい」を AWS FinOps Agent でチョット楽にする
classmethod_kaz
0
340
フルカイテン株式会社 エンジニア向け採用資料
fullkaiten
0
12k
Featured
See All Featured
What Being in a Rock Band Can Teach Us About Real World SEO
427marketing
0
1.1k
Breaking role norms: Why Content Design is so much more than writing copy - Taylor Woolridge
uxyall
1
400
Mobile First: as difficult as doing things right
swwweet
225
10k
Build your cross-platform service in a week with App Engine
jlugia
234
19k
Stewardship and Sustainability of Urban and Community Forests
pwiseman
0
520
The Power of CSS Pseudo Elements
geoffreycrofte
82
6.6k
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
1
2.1k
We Analyzed 250 Million AI Search Results: Here's What I Found
joshbly
1
1.9k
Mind Mapping
helmedeiros
1
360
Designing Experiences People Love
moore
143
24k
Bridging the Design Gap: How Collaborative Modelling removes blockers to flow between stakeholders and teams @FastFlow conf
baasie
0
700
Building a A Zero-Code AI SEO Workflow
portentint
PRO
0
720
Transcript
LINE株式会社 愛甲健二 スマホゲームのセキュリティやってみた
この資料について スマホゲームのセキュリティについて、わりと”ざっくり”と解 説。細かいことは気にしない。 開発者の方、あまりセキュリティに詳しくない方に”ざっくり”と 理解してもらえるとうれしい。 より詳しく知りたい方はPCゲームのチートの歴史、手法など を調べるとよいかも。
自己紹介 • 愛甲健二 • LINE株式会社 セキュリティ室所属(エンジニア) • 主な仕事:Release前の製品のSecurity診断 - Web、Gameが多い
※) 今回は”Game”について話せたらと思います。
セキュリティ調査の流れ • ツールを用いたメモリ改変 • ゲーム内時間の加速/減速 • 端末内に保存されるデータの暗号化 • ゲームサーバとの通信の暗号化 •
ARM/ILの解析 結局、どんな対策も時間がたてば解析されるが、 容易にそこまでたどりつかせないことが目的 Botに対してはサーバ側で別途対策
使用するサンプルゲーム https://github.com/kenjiaiko/SUNIDRA2 興味ある方は、上記のコードを利用して、 この資料に書かれてあることを試してみてください。 この資料も後ほど公開されると思いますので。
ツールを用いたメモリ改変 • メモリ内で”変化した値”を検索&改変する - 例:100 -> 89 に変化した値を検索(ex.GameHacker) 重要な値は内部でencodeして保持しておく
Demo
ゲーム内時間の加速/減速 • ゲーム内時間の加速/減速を行う - 例:Hooking gettimeofday?(ex.GameHacker) 時間はserver側でも保持し、同期する (ゲーム仕様によって対策は異なる)
Demo
端末内に保存されるデータの暗号化 • 端末内に保存されているファイルを確認 $ cat shared_prefs/com.kenji.seccon.cedec.game.xml <?xml version='1.0' encoding='utf-8' standalone='yes'
?> <map> <int name="Screenmanager Is Fullscreen mode" value="0" /> <int name="Screenmanager Resolution Width" value="1920" /> <int name="kenji_stamina" value="999" /> <string name="5.2.1">70552e0acd48f1664e191c96642717ab</string> <int name="Screenmanager Resolution Height" value="1080" /> <int name="kenji_stamina_update_time" value="1470136534" /> <string name="PASS">aiko</string> <string name="USER">kenji</string> </map> ゲーム内で使う値は暗号化して保存しておく
ゲームサーバとの通信の暗号化 HTTPSのみではMITMで通信を閲覧できる • ゲーム内でも暗号化する(二重暗号化) • SSL Pinning(証明書チェック)を行う どちらもゲームコードを分析されたら外されるが 単純な解析は難しくなる certificate
通信を閲覧できる
ARM/ILの解析 • Unity - IL, ARM, Java(on Android) • Cocos2d-x
- ARM, Java(on Android) 基本的にARM, Javaを読む必要がある 昨今のゲームだとJava純正はほとんどみないイメージ
Unity https://unity3d.com/jp/unity/multiplatform
Unityのloadの仕組み(ざっくり) Image_loader dlopen dlopen /classes.dex System.loadLibrary /lib/armeabi-v7a/libmain.so Java ARM /lib/armeabi-v7a/libmono.so
ARM /lib/armeabi-v7a/libunity.so ARM /assets/bin/Data/Managed/*.dll CIL 連携 ゲーム本体のコード 各プラットフォーム用のloader(例:Android)
IL2CPP https://blogs.unity3d.com/2015/05/06/an-introduction-to-ilcpp-internals/ /assets/bin/Data/Managed/*.dll CIL /lib/armeabi-v7a/libil2cpp.so ARM ゲームの処理をASM(ARM, x86)に変換できる
Cocos2d-x https://unity3d.com/jp/unity/multiplatform
Cocos2d-xのloadの仕組み(ざっくり) /classes.dex System.loadLibrary (in onLoadNativeLibraries) Java /lib/armeabi/libXXXX.so ARM ゲーム本体のコード 各プラットフォーム用のloader(例:Android)
-> call nativeInit Simple!
ARM/ILの解析 • IL ILSpy, JustDecompile, etc… • Java JDGUI, JavaDecompiler,
etc… • ASM(ARM, x86) IDA 各種ツールでde-compile/dis-assembleして解析する 難):IL2CPP >= Cocos2d-x(ARM) > IL == Java:(易
Demo
Bot検出 • 最後には全解析されてBotが作られる • サーバ側でBotの検出&Banを行う(半自動化) - プレイ時間/期間/回数 - レベルアップ/ステージクリアのタイミング -
Item(課金含む)の使用数 - プレイ時のIP帯域 知名度が高くなれば必然的にBotも多くなる 対応方法はそれぞれ(Gameによる) human bot
リファレンス 解析、チートの練習のためのサンプルゲーム https://github.com/kenjiaiko/SUNIDRA2 [Unity/C#]WWW/HttpWebRequestにおける 中間者攻撃の危険性を考慮した通信プログラムまとめ http://qiita.com/harmegiddo/items/b72ca4f430292251c8a6 AN INTRODUCTION TO IL2CPP
INTERNALS https://blogs.unity3d.com/2015/05/06/an-introduction-to-ilcpp-internals/ cocos2d-xでAndroidの起動シーケンスを追いかけてみる http://qiita.com/yosizo@github/items/53c74f0267becd6a81df IL2CPP Dumper https://github.com/Jumboperson/Il2CppDumper コマンドラインタイプのメモリチートツール https://github.com/Lazenca/Lazenca-A-Andoird
Thank you! Any Questions?