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.6k
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
日本語に強いオープンな大規模言語モデル「LLM-jp」
odashi
4
1.1k
自作バイナリを動かす「入口」8選
puhitaku
2
1.3k
DGX Spark でどこまでハッキングができるのか?
kash1064
3
1.3k
遠藤な_めぐろLT #38 「社内のAI活用推進」@麻布台_20261009
endonanana
0
130
Benchmarking Disaggregated Serving on vLLM + Dynamo with a Real Coding-Agent Workload
nttcom
1
190
ソフトウェア ファクトリー - 再現性のあるソフトウェアの工場づくり / Software factory
iktakahiro
6
4.9k
USB PDを使ってスマホを労わりたい
raspython3
0
180
脆弱性診断って、何をしているの? 〜弱点を見つけて、会社の改善につなげるまで〜
keeg
0
920
OptunaHub: ブラックボックス最適化のためのプラットフォーム
pfn
PRO
0
140
スプシの手作業からの解脱 ~更新はClaude Codeに、見せ方と使い方はGASアプリに任せる~
kentarofujii
0
150
二歩目のフロントエンド・ウェブアクセシビリティ
camiha
2
590
しろおびから始める!ログ活用の第一歩
shumei_ito
0
950
Featured
See All Featured
Speed Design
sergeychernyshev
33
2.2k
The Director’s Chair: Orchestrating AI for Truly Effective Learning
tmiket
1
330
Why Your Marketing Sucks and What You Can Do About It - Sophie Logan
marketingsoph
0
430
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
2
530
Git: the NoSQL Database
bkeepers
PRO
433
67k
16th Malabo Montpellier Forum Presentation
akademiya2063
PRO
0
410
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
63
46k
The Cost Of JavaScript in 2023
addyosmani
55
10k
Leveraging Curiosity to Care for An Aging Population
cassininazir
1
540
Building Applications with DynamoDB
mza
96
7.2k
SEO for Brand Visibility & Recognition
aleyda
0
4.8k
Art, The Web, and Tiny UX
lynnandtonic
304
22k
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?