Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

【Unity道場スペシャル 2017京都】スマホゲーム開発者なら知っておくべきチートのリスク&対策

3,720 views

Published on

2017/11/18に開催されたUnity道場スペシャル 2017京都の講演スライドです。
講師:小林 亜実(株式会社DNPハイパーテック)

ゲームアプリを開発される方の多くが頭を悩ませるチート行為。対策を怠ると、ゲームバランスの崩壊による『炎上』や収益の低下につながります。 このセッションでは、Unityアプリのチート対策セキュリティ「CrackProof for Unity」の開発会社が、実際によく見られるチート手法の解説を交えながらクライアントを狙った攻撃からアプリを効果的に保護する方法をご説明します。 その他、10月に開催されるUniteAustinの現地レポートや、トレンドであるVRゲームのセキュリティについても、時間の許す限りお伝えしたいと思います!

こんな人におすすめ
・Unityでスマホ向けゲームを開発している人
・チート対策に興味がある人

受講者が得られる知見
・Unityを使って作成したゲームにおけるチートリスク、チート対策手法

Unityのイベント資料はこちらから:
https://www.slideshare.net/UnityTechnologiesJapan/clipboards

Published in: Technology
  • Sex in your area is here: ♥♥♥ http://bit.ly/2F90ZZC ♥♥♥
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Dating direct: ❤❤❤ http://bit.ly/2F90ZZC ❤❤❤
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

【Unity道場スペシャル 2017京都】スマホゲーム開発者なら知っておくべきチートのリスク&対策

  1. 1. スマホゲーム開発者が 知っておくべき チートのリスク&対策
  2. 2. 小林亜実
 株式会社DNPハイパーテック マーケティング部
  3. 3. DNPハイパーテックとは
 会社概要 商号  株式会社DNPハイパーテック(大日本印刷グループ) 所在地 京都市下京区(京都リサーチパーク内) 設立  1994年5月18日 業務内容 • BtoBセキュリティソフトの開発 • 特許業務支援ソフトの開発 • 特許戦略コンサルティング
  4. 4. 本日のゴール Unityを使ってスマホゲームを開発・運営されている方に アプリ(クライアントサイド)のチート対策 について理解を深めていただく
  5. 5. アジェンダ 1. チートが引き起こす問題 2. チート手法 3. ケーススタディ『改ざんapkの蔓延』 4. まとめ 5. チート対策「CrackProof」のご紹介 6. 最近のトピック
  6. 6. 1.チートが引き起こす問題
  7. 7. チートとは? スコアやヒットポイントの操作 ステージやシナリオの解放 レアキャラクターの入手 ゲームプレイの自動化 課金アイテムの入手 アプリ内広告の無効化 GPSの位置偽装
            etc… 『ゲームを優位に進めるため、  制作者の意図しない動作を  させる不正行為』 (Wikipediaより) 定義 チート例
  8. 8. チートが引き起こすリスク ゲームの運営にはチート対策が必須! 収益機会の損失 ビジネス失敗 RISK2 レビュー炎上 新規DLが… RISK3RISK1 ゲームバランス崩壊 ユーザー離れ
  9. 9. 2.チート手法
  10. 10. 弊社で作成したアプリ チート手法 ・パッチツールによるアプリ内広告の無効化 ・メモリ改ざんツールによる課金アイテムの入手
  11. 11. 弊社で作成したアプリ パッチツールによるアプリ内広告の無効化
  12. 12. 弊社で作成したアプリ パッチツールによるアプリ内広告の無効化
  13. 13. 弊社で作成したアプリ メモリ改ざんツールによる課金アイテムの不正入手 ① ジュエル(課金アイテム) 50個消費→アイテム1個 *課金時にはサーバーと通信 ②アイテム  1個消費
   →Attack10倍
  14. 14. メモリをいじって
 ジュエルをタダで増やす →アイテムに交換  →Attack上げる   !敵を一撃で撃破 デモでやること
  15. 15. 弊社で作成したアプリ チート手法 ・パッチツールによるアプリ内広告の無効化 ・メモリ改ざんツールによる課金アイテムの入手 ユーザーにとっては意外とカジュアルな行為
  16. 16. 3.ケーススタディ 『改造apkの蔓延』
  17. 17. 3. パブリッシャーA社様 のケース  プレイヤーの攻撃力を増大させるよう 改造したapkが出回っている 被 害 実際に収益が大きく損なわれており
 急いで対策したい チート対策のお問い合わせがあった
  18. 18. なぜ改造apkがつくられたのか ①DLLファイルの解析・改ざん ②メモリの解析・改ざん ③再署名して再パッケージ
  19. 19. なぜ改造apkがつくられたのか ①DLLファイルの解析・改ざん ②メモリの解析・改ざん ③再署名して再パッケージ
  20. 20. DLLファイルとは ビルド C#で書いた ソースコード .DLL libunity.so libmono.so JIT コンパイル 関数呼び出し ロード 中間言語 00010011 10101000 00001000 10101001 00100100 機械語 .DLL 機械語 apk
  21. 21. ソースコードへ戻すことが容易 コンパイル 逆コンパイル (ILSpyなど) ソースコード ( C# ) バイナリ ファイル (DLLファイルに) 0001001110010 0100100100011 0111010100000 0010001010100 1001001000110 1110000100111 0010010010010 0011011101010 0000001000101 0100100100100 01101110
  22. 22. ソースコード(.cs) ILSpyで逆コンパイルした
 Assembly-CSharp.dll 逆コンパイルすると…
  23. 23. 対策手法(DLLファイルの解析・改ざん対策) ・難読化 ・暗号化 ・ハッシュ値をチェック(SHA-1, SHA-256 等) ・IL2CPPを使ってネイティブファイルで出力
  24. 24. IL2CPP:Intermediate Language to C Plus Plus IL2CPP は Unity が開発したスクリプティングバックエンドで、ある種のプラットフォーム のプロジェクトを作成するときに、Mono の代わりに使用できます。IL2CPP を使ってプロ ジェクトを作成することを選択すると、Unity は選択したプラットフォームのネイティブ バイナリファイル (.exe, apk, .xap など) を作成する前に、スクリプトからの IL コード (CIL、Common Intermediate Language、共通中間言語) を変換し C++ コードに組み立て ます。(Unityマニュアルより)       IL2CPPを使ってネイティブファイルで出力するって? →C#(中間言語コード)をC++(ネイティブコード)に変換する仕組み 記述したコードは libil2cpp.so(SOファイル)に変換される。
  25. 25. objdumpで逆アセンブルしたlibil2cpp.so 逆アセンブルすると… 内容を解析するには、 各CPUの命令のアセンブリ言語を 理解する必要がある。 解析のハードルが高い
  26. 26. IL2CPPの使い方 ① Android NDKに、パスを設定する ② Player Settings>Others Setting内の  Configurationカテゴリで、  Scripting BackendをIL2CPPに変更する。
  27. 27. 対策手法(DLLファイルの解析・改ざん対策) ・難読化 ・暗号化 ・ハッシュ値をチェック(SHA-1, SHA-256 等) ・IL2CPPを使ってネイティブファイルで出力 A社チート対策チームは 難読化を施していた
  28. 28. なぜ改造apkがつくられたのか ①DLLファイルの解析・改ざん ②メモリの解析・改ざん ③再署名して再パッケージ
  29. 29. ◆ モジュール間の連結部分を狙う ◆ ブレークポイントやステップ実行を利用 処理がわかってしまう 難読化できない 動きがあった時にどのメソッド・関数が
 呼ばれているかがわかる デバッガアタッチによるメモリアクセス 呼び出し方が決まっているから
  30. 30. ・デバッガを検知する関数・クラスを利用 Ex).NET FrameworkのDebuggerクラス(System.Diagnostics名前空間)の   IsAttachedプロパティを使用する ・デバッガを検知する部分のコードを改ざんされると意味がない ・自分自身も、作ったアプリをデバッグできない Weak Point 対策手法
  31. 31. なぜ改造apkがつくられたのか ①DLLファイルの解析・改ざん ②メモリの解析・改ざん ③再署名して再パッケージ(そして再配布)
  32. 32. 再署名、再パッケージそして再配布 アプリが正規のパブリッシャーにより作られたものかを証明するもの GooglePlayでの配布(再配布)時には署名が必要 野良サイトで配布されれば署名は意味がない 意外と盲点:オリジナルと違う署名でも再パッケージ自体は可能! 正規の署名でなければGoogle Playにアップできない 署名とは アプリの再配布対策に有効!!
  33. 33. ・自己署名を検証する Ex) 起動時にPackageInfo(パッケージ情報を取得するclass)経由で 署名情報を取得し、自己署名と比較する 署名を検証する部分のコードを改ざんされると意味がないWeak Point 対策手法 ・ハッシュ値をチェック
  34. 34. 4.まとめ
  35. 35. A社事例の対策手法 DLLファイルの 解析•改ざん メモリ上の コード解析 再署名 &再パッケージ 難読化 暗号化 ハッシュ値チェック デバッガ検知 自己署名を検証 ハッシュ値チェック ・時間をかければ解読される ・プログラム実行中だと解読される 署名を検証する部分のコードを
 改ざんされると意味がない
  36. 36. メモリ上の数値の 解析•改ざん デバッガ検知 プログラミングの工夫 DLLファイルの 解析•改ざん メモリ上の コード解析 再署名 &再パッケージ 難読化 暗号化 ハッシュ値チェック デバッガ検知 自己署名を検証 ハッシュ値チェック エミュレータ上で 動作させ解析 エミュレータ検知 Root / Jb端末で 動作させ解析 Root / Jbの検知 そのほかの対策手法
  37. 37. メモリ上の数値の 解析•改ざん デバッガ検知 プログラミングの工夫 DLLファイルの 解析•改ざん メモリ上の コード解析 再署名 &再パッケージ 難読化 暗号化 ハッシュ値チェック デバッガ検知 自己署名を検証 ハッシュ値チェック 署名を検証する部分のコードを
 改ざんされると意味がない エミュレータ上で 動作させ解析 エミュレータ検知 Root / Jb端末で 動作させ解析 Root / Jbの検知 チートは多面的に対策する必要がある。
  38. 38. 5.チート対策セキュリティ 「CrackProof」のご紹介
  39. 39. CrackProofとは アプリを不正な解析・改ざんから 保護し、チート被害を防止する
 セキュリティソフト チート対策 海賊版の防止 アルゴリズムの保護 Protect your App
  40. 40. CrackProofをお使いいただく価値 忙しいゲーム開発現場ですぐに使えて 時間も手間もかけずにチート対策
  41. 41. 時間も手間もかからない理由 ①開発工程に影響なし ②クラウドで堅牢化処理 プログラミング リリース CLIツールに統合することも可能 STEP1 セキュリティオプションを選択 STEP4 起動確認してリリース! STEP2 アプリをアップロード STEP3 クラウド上で自動処理 デバッグ テスト ビルド 開発工程図
  42. 42. CrackProofの保護機能 静的解析とは 静 ファイルレベルの解析 動 動的解析とは 実行中のプログラムに
 対する解析 静的解析も動的解析も阻止 セキュリティ機能(一部) 特長 ファイル暗号化 実行ファイル改ざん対策 エミュレータ対策 コードインジェクション対策 デバッガ対策 メモリアクセス対策 特権取得対策
          etc…
  43. 43. Unityで作成したDLLファイルを保護 CrackProof 対応プラットフォーム 主要OS、さらにUnityに対応 + iOS Windows android Linux NEW
  44. 44. CrackProofの実績 430 累計 以上のゲームタイトル
 に採用! 安定した 動作と軽さ ” “ 当社の開発環境に ピッタリ合いました ” “ サポートが 丁寧です ” “ ” “うれしいことにチート 被害が止まりました
  45. 45. 万全のサポート体制 サポート専任チームが導入前から導入後 までしっかりフォローします! メーカー直接サポートだから 素早く問題解決 日本語でサポート 日本のお客様には 10年以上のノウハウに基づく 運用コンサルティング 安心の 国 内 サポート
  46. 46. VRアーケードゲームにおける セキュリティの話 番外編
  47. 47. 世界のVR市場 0 7.5 15 22.5 30 ソフトウェア/サービス ハードウェア 2016 2017 2018 2019 2020 $3.7Bn $28.3Bn $16.2Bn
  48. 48. VRアーケード 中国 東方科幻谷 アメリカ IMAX VR センター オランダ De VR Arcade Amsterdam ショッピング モール内 ゲーム センター 内 テーマパーク 内
  49. 49. VRアーケードゲームにおけるセキュリティリスク DRM
  50. 50. VRアーケードゲームにおけるセキュリティリスク
  51. 51. VRアーケードゲームにおけるセキュリティリスク コンテンツ コンテンツ ランチャー コンテンツ 実はPC
  52. 52. VRアーケードゲームにおけるセキュリティリスク ID/パスワード認証 USBドングル認証 ランチャー コンテンツ コンテンツコンテンツ
  53. 53. VRアーケードゲームにおけるセキュリティリスク void __fastcall TForm1::FormCreate(TObject *Sender) { Form1->Height = 167; if ( RasCtrl1->UseSpValue == -1 ) // True CheckBox1->Checked = true; else RasCtrl1->UseSpValue = false; Edit5->Text = RasCtrl1->UserName; Edit6->Text = RasCtrl1->Password; Edit2->Text = RasCtrl1->SpTelephoneNumber; Edit3->Text = RasCtrl1->SpDomainName; Edit4->Text = RasCtrl1->SpCallBackNumber; RasCtrl1->ReDialTimes = 1; RasCtrl1->ReDialInterval = 10; } //--------------------------------------------------------------------------- void __fastcall TForm1::BtnOptionClick(TObject *Sender) { if ( BtnOption->Caption == "korenya >&>" ) BtnOption->Caption = "&<<mikketa"; BtnOption->Caption = "dongle_ninshiki >&>"; } ListBox1->SetFocus(); } //--------------------------------------------------------------------------- void __fastcall TForm1::BtnConnectClick(TObject *Sender) { //nyannyanya ButtonMode( false ); //NTRasmon.exetatiate // On Error Resume Next // If m_Rasmon = 0 Then // m_Rasmon = Shell("rasmon.exe", vbNormalFocus) // End If // On Error GoTo 0 Form2->Caption = RasCtrl1->EntryName; RasCtrl1->UserName = Edit5->Text; RasCtrl1->Password = Edit6->Text; if ( CheckBox1->Checked == false ) { RasCtrl1->UseSpValue = -1; RasCtrl1->SpTelephoneNumber = Edit2->Text; 認証APIを複数箇所で 呼び出していても…
  54. 54. VRアーケードゲームにおけるセキュリティリスク void __fastcall TForm1::FormCreate(TObject *Sender) { Form1->Height = 167; if ( RasCtrl1->UseSpValue == -1 ) // True CheckBox1->Checked = true; else RasCtrl1->UseSpValue = false; Edit5->Text = RasCtrl1->UserName; Edit6->Text = RasCtrl1->Password; Edit2->Text = RasCtrl1->SpTelephoneNumber; Edit3->Text = RasCtrl1->SpDomainName; Edit4->Text = RasCtrl1->SpCallBackNumber; RasCtrl1->ReDialTimes = 1; RasCtrl1->ReDialInterval = 10; } //--------------------------------------------------------------------------- void __fastcall TForm1::BtnOptionClick(TObject *Sender) { if ( BtnOption->Caption == "korenya >&>" ) BtnOption->Caption = "&<<mikketa"; BtnOption->Caption = "dongle_ninshiki >&>"; } ListBox1->SetFocus(); } //--------------------------------------------------------------------------- void __fastcall TForm1::BtnConnectClick(TObject *Sender) { //nyannyanya ButtonMode( false ); //NTRasmon.exetatiate // On Error Resume Next // If m_Rasmon = 0 Then // m_Rasmon = Shell("rasmon.exe", vbNormalFocus) // End If // On Error GoTo 0 Form2->Caption = RasCtrl1->EntryName; RasCtrl1->UserName = Edit5->Text; RasCtrl1->Password = Edit6->Text; if ( CheckBox1->Checked == false ) { RasCtrl1->UseSpValue = -1; RasCtrl1->SpTelephoneNumber = Edit2->Text; クラッキングツールや 熟練のクラッカーによって 呼び出し自体を無効にされる 認証APIを複数箇所で 呼び出していても…
  55. 55. 必要な対策 DRM 堅牢化 (解析・改ざん対策)
  56. 56. UniteAustinの様子 番外編
  57. 57. Unite Austin 期間:10月3~5日 場所:テキサス州オースティ ン
  58. 58. 基調講演→ ←ネットワーキングパーティ会場
  59. 59. ←会場フロア ←女性向けワークショップ
  60. 60. 展示ブース
  61. 61. ご清聴ありがとうございました! www.hypertech.co.jp/game

×