SlideShare a Scribd company logo
1 of 34
Download to read offline
cocos-2dxアプリの サーバーサイド事始め 
~チート編~
初めに 
•ソーシャルアプリで悩みの種になるチートにつ いて、その手口や対策などを紹介していきたい と思います
本講演の対象者 
•アプリ開発していてチート問題について聞かさ れてガクブルしている方 
•チートについて興味のある方 
•チートに悩まされてきた方
チート問題についてザックリと… 
•クライアントのメモリ改ざん事件 
•不正にヒットポイントが増えるなど 
•通信データ書き換え事件 
•通信で取得するカードパラメータ等を不正に強くしてゲー ムなど 
•データ再送信による二重付与問題 
•クライアント側で二回データを送信されても大丈夫なよう に… 
•不正課金事件 
•不正レシートによる課金
チート問題 
•クライアントのメモリ改ざん事件 
•不正にヒットポイントが増えるなど 
•通信データ書き換え事件 
•通信で取得するカードパラメータ等を不正に強くしてゲー ムなど 
•データ再送信による二重付与問題 
•クライアント側で二回データを送信されても大丈夫なよう に… 
•不正課金事件 
•不正レシートによる課金
クライアントのメモリ改ざん事件 
•脱獄したiPhone / root化したAndroidで動作する GamePlayerというツールを使用することで、アプリ内の メモリを書き換えられてしまう 
•書き換えたい数値を検索して、その数値のデータを書き換 えることが可能 
•HPが2000だったとした場合、2000という数値を検索し、メモ リ上に2000となっているのをユーザーが好きに書き換えら れてしまう ⇒HP 999999 のキャラとかを作成されてしまう ※とあるタイトルでの実例: http://www.xn--gameplayer--w94j5c19a.com/124.html
クライアントメモリ改ざんに対する対抗策 
•大事なデータは暗号化してデータを置きましょう。 
•生の値でなければ、データを検索されても見つか りにくい 
•暗号化は排他的論理和(XOR)を使うと、とても楽 に実装できます 
•A xorB => C の場合、C xorB => A となるので、暗 号・復元がとても楽です。
クライアントメモリ改ざん対策の実装例 
Class MyCharacter{ 
private: 
static constintKEY= 0xfedcba98; 
intmHp; //<=直接セットせずに、setHp,getHpを介してアクセス 
public: 
inline intgetHp()const{ return mHp^KEY;} 
inline void setHp( inthp){ mHp= hp^KEY;} 
};
チート問題 
•クライアントのメモリ改ざん事件 
•不正にヒットポイントが増えるなど 
•通信データ書き換え事件 
•通信で取得するカードパラメータ等を不正に強くしてゲー ムなど 
•データ再送信による二重付与問題 
•クライアント側で二回データを送信されても大丈夫なよう に… 
•不正課金事件 
•不正レシートによる課金
通信データ書き換え事件 
•サーバーへ送るデータ/サーバーから受け取るデータを通信経路上 でデータ書き換えを行うことで不正に強いデータの作成・ゲーム結果 の詐称などが行えます。 
•ゴーストルーターという製品が実際にあります 
データ 
処理結果 
ココでデータを書き換 えられてしまう!!
通信データ書き換えを詳しく図解 
ルーター 
Wifi 
サーバー 
ここでデータを書き換えられてしまっ たら?
通信データ書き換えを詳しく図解 
Wifi 
サーバー 
ルーターの役割をPCが行う。 ソフトウェアでヤリタイ放題! 
チーターのPC
通信データ書き換えの例 
Wifi 
サーバー 
チーターのPC 
キャラ 
一覧要求
通信データ書き換えの例 
Wifi 
サーバー 
データをそのままゲームサーバーへ 転送 
チーターのPC 
キャラ 
一覧要求
通信データ書き換えの例 
Wifi 
サーバー 
要求があったプレイヤーは、LV1の キャラを5体所持しているので、その データを返却 
チーターのPC 
所持キャラ 
LV1×5体 
キャラ 
一覧要求
通信データ書き換えの例 
Wifi 
サーバー 
本当はもっていないキャラも、持って ることにしたり、既存キャラのLVを99 に書き換えて、クライントに返す 
チーターのPC 
所持キャラ 
LV1×5体
通信データ書き換えの例 
Wifi 
サーバー 
結果として、本来ユーザーが持って いないキャラやLVでゲームプレイが 行える! 
チーターのPC 
キャラ 
一覧要求 
所持キャラ 
LV99×10体
通信データ書き換えの例 
Wifi 
サーバー 
ここで、サーバーからのデータを書き 換えることでチートされた!! 
チーターのPC 
所持キャラ 
LV1×5体 
キャラ 
一覧要求 
所持キャラ 
LV99×10体
通信データ書き換えの対策 
•書き換えられてしまうのを防ぐことは原理的に不可能 
•端末外かつサーバー外で行われている 
⇒ならば、書き換えられているかを検知出来ればよい。 
※データが途中で書き換えられているようなら不正扱いして受け付け なければいい(サーバー・クライアント両方とも)
通信データ書き換えの対策 
•ハッシュ値によるデータチェックを行いましょう 
•サーバー/クライアントから送るデータの末尾にハッシュ 値を入れてチェック 
※ファイルが破損していないかチェックしたりするためのMD5 チェックやCRCチェックなどと同じ原理です。
ハッシュ値の原理 
※データのダイジェストを作成しておきます。 データの不正書き換えが発生した場合には、ダイジェストが 変わってしまうので、エラーを検知できる仕組みです 
データ 
646da9ae5d90e6b51b06ede01b9fed67 
MD5/Sha-1等のアルゴリズムを用い ることで、データに対応した16Byteの ダイジェストが得られる
チート問題 
•クライアントのメモリ改ざん事件 
•不正にヒットポイントが増えるなど 
•通信データ書き換え事件 
•通信で取得するカードパラメータ等を不正に強くしてゲー ムなど 
•データ再送信による二重付与問題 
•クライアント側で二回データを送信されても大丈夫なよう に… 
•不正課金事件 
•不正レシートによる課金
データ再送信による二重付与問題 
•クライアント側から、ゲーム結果送信等のデータが二 回送られてしまうことで、二重にキャラの付与処理等 が行われてしまう 
•実はデータ通信の途中で失敗するなどのケースで、わざ とではなく偶然発生してしまう事もあるので、注意が必要
クライアント 
サーバー 
1.サーバーに、IDとパス ワード、遊んだダンジョン、 取得したスコアを送信 
{”id”:” a7c4eab”,”passwd”:”te32BG”,” 
dungeon”:2,”score”:100} 
ユーザー行動のデータ再送信のケース
クライアント 
サーバー 
2.受け取ったデータを元に ユーザー認証を行い、正し ければサーバー内のユー ザーデータを書き換える 
ユーザー行動のデータ再送信のケース 
{”id”:” a7c4eab”,”passwd”:”te32BG”,” 
dungeon”:2,”score”:100}
クライアント 
サーバー 
3.サーバー内で書き換え たデータ等を返そうとしたと 失敗します 
{”money”:20,”getCard”:[1,2,3]} 
ユーザー行動のデータ再送信のケース
クライアント 
サーバー 
4.通信に失敗したみたい なので、もう一回データを 送ります 
{”id”:” a7c4eab”,”passwd”:”te32BG”,” 
dungeon”:2,”score”:100} 
ユーザー行動のデータ再送信のケース
クライアント 
サーバー 
5.既に処理済みのデータが 来たので、データの更新は 行わずに結果だけ返さない といけない。 
ユーザー行動のデータ再送信のケース 
{”id”:” a7c4eab”,”passwd”:”te32BG”,” 
dungeon”:2,”score”:100}
データ再送信の対策について 
•通信ごとにユニークなIDを割り当てて、サーバー側で 最後に行われた通信をキチンと把握しておきましょう 
•サーバー側でプレイヤーのゲームプレイのステータ ス管理をしましょう 
•ゲームプレイ開始してないのに、結果が送られてきたら オカシイなどなどの判定が出来ます
チート問題 
•クライアントのメモリ改ざん事件 
•不正にヒットポイントが増えるなど 
•通信データ書き換え事件 
•通信で取得するカードパラメータ等を不正に強くしてゲー ムなど 
•データ再送信による二重付与問題 
•クライアント側で二回データを送信されても大丈夫なよう に… 
•不正課金事件 
•不正レシートによる課金
不正課金事件について 
•不正なレシート(購入証明書)を送り付ける事で、課 金していないのに課金アイテムを得ようとするケース があります 
•別のアプリのレシートを送って、購入したことにしようとし てみる 
•かなり昔に処理をしたレシートを送って、購入したことにし ようとしてみる
不正課金事件の対策 
•Android / iphone共に送られてきたデータが自分のアプリ内課金商 品が購入されているか確認しましょう 
•AndroidではorderID、iPhoneではtransactionIDと呼ばれる決済ごと にユニークなIDがあるので、過去に決済されたデータは全て残して おきましょう。
チート対策回りでのまとめ 
•クライアント側は、重要なデータは暗号化・ハッシュ チェック等を行うようにしましょう 
•サーバー側は、クライアントから来たデータは信じな いスタンスで行きましょう。 
•通信は、暗号化・ハッシュチェック等を行い改ざんさ れないようにしましょう 
•通信は同じものが何回か行われてしまうことを想定し ましょう
Appendix 
Hashによるチェックや通信経路の詐称などの細かい話は 「新版暗号技術入門秘密の国のアリス」という書籍が詳しく説明されてい ます。 
セキュリティなどに関する基本的なところが学べるのでお勧めです。 
http://www.amazon.co.jp/%E6%96%B0%E7%89%88%E6%9A%97%E5%8F%B7%E6%8A%80%E8%A1%93%E5%85%A5%E9%96%80- %E7%A7%98%E5%AF%86%E3%81%AE%E5%9B%BD%E3%81%AE%E3%82%A2%E3% 83%AA%E3%82%B9-%E7%B5%90%E5%9F%8E-%E6%B5%A9/dp/4797350997

More Related Content

What's hot

ゲームデザインを改善/批評するための時間構造モデル「ワンダールクス」
ゲームデザインを改善/批評するための時間構造モデル「ワンダールクス」ゲームデザインを改善/批評するための時間構造モデル「ワンダールクス」
ゲームデザインを改善/批評するための時間構造モデル「ワンダールクス」
Sho Iwamoto
 
ゲームサーバ開発現場の考え方
ゲームサーバ開発現場の考え方ゲームサーバ開発現場の考え方
ゲームサーバ開発現場の考え方
Daisaku Mochizuki
 

What's hot (20)

최소 300억은 버는 글로벌 게임 기획 : 몬스터슈퍼리그 사례를 중심으로
최소 300억은 버는 글로벌 게임 기획 : 몬스터슈퍼리그 사례를 중심으로최소 300억은 버는 글로벌 게임 기획 : 몬스터슈퍼리그 사례를 중심으로
최소 300억은 버는 글로벌 게임 기획 : 몬스터슈퍼리그 사례를 중심으로
 
[NDC 2014] 시나리오라이터의 과거와 현재, 그리고 미래
[NDC 2014] 시나리오라이터의 과거와 현재, 그리고 미래 [NDC 2014] 시나리오라이터의 과거와 현재, 그리고 미래
[NDC 2014] 시나리오라이터의 과거와 현재, 그리고 미래
 
DeNAの最新のマスタデータ管理システム Oyakata の全容
DeNAの最新のマスタデータ管理システム Oyakata の全容DeNAの最新のマスタデータ管理システム Oyakata の全容
DeNAの最新のマスタデータ管理システム Oyakata の全容
 
NDC 2012 이은석 - 고전게임 화이트데이 디렉터 포스트모템
NDC 2012 이은석 - 고전게임 화이트데이 디렉터 포스트모템NDC 2012 이은석 - 고전게임 화이트데이 디렉터 포스트모템
NDC 2012 이은석 - 고전게임 화이트데이 디렉터 포스트모템
 
ゲームデザインを改善/批評するための時間構造モデル「ワンダールクス」
ゲームデザインを改善/批評するための時間構造モデル「ワンダールクス」ゲームデザインを改善/批評するための時間構造モデル「ワンダールクス」
ゲームデザインを改善/批評するための時間構造モデル「ワンダールクス」
 
ゲーム制作初心者が知るべき8つのこと
ゲーム制作初心者が知るべき8つのことゲーム制作初心者が知るべき8つのこと
ゲーム制作初心者が知るべき8つのこと
 
2D格闘ゲームにおけるユーザビリティとゲームデザインについて
2D格闘ゲームにおけるユーザビリティとゲームデザインについて2D格闘ゲームにおけるユーザビリティとゲームデザインについて
2D格闘ゲームにおけるユーザビリティとゲームデザインについて
 
DeClang 誕生!Clang ベースのハッキング対策コンパイラ【DeNA TechCon 2020 ライブ配信】
DeClang 誕生!Clang ベースのハッキング対策コンパイラ【DeNA TechCon 2020 ライブ配信】DeClang 誕生!Clang ベースのハッキング対策コンパイラ【DeNA TechCon 2020 ライブ配信】
DeClang 誕生!Clang ベースのハッキング対策コンパイラ【DeNA TechCon 2020 ライブ配信】
 
UnityのMultiplayサービスの得意な事
UnityのMultiplayサービスの得意な事UnityのMultiplayサービスの得意な事
UnityのMultiplayサービスの得意な事
 
【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~
【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~
【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~
 
リアクティブプログラミングとMVVMパターンについて
リアクティブプログラミングとMVVMパターンについてリアクティブプログラミングとMVVMパターンについて
リアクティブプログラミングとMVVMパターンについて
 
スマートフォンゲーム企画書制作のポイント
スマートフォンゲーム企画書制作のポイントスマートフォンゲーム企画書制作のポイント
スマートフォンゲーム企画書制作のポイント
 
ゲームサーバ開発現場の考え方
ゲームサーバ開発現場の考え方ゲームサーバ開発現場の考え方
ゲームサーバ開発現場の考え方
 
究極のゲーム用通信プロトコル “WebRTC”
究極のゲーム用通信プロトコル “WebRTC”究極のゲーム用通信プロトコル “WebRTC”
究極のゲーム用通信プロトコル “WebRTC”
 
슈팅 게임에서 레벨 디자인 하기
슈팅 게임에서 레벨 디자인 하기슈팅 게임에서 레벨 디자인 하기
슈팅 게임에서 레벨 디자인 하기
 
ゲーム仕様書の書き方 ~大久保磨編~ ver.1.2.0
ゲーム仕様書の書き方 ~大久保磨編~ ver.1.2.0ゲーム仕様書の書き方 ~大久保磨編~ ver.1.2.0
ゲーム仕様書の書き方 ~大久保磨編~ ver.1.2.0
 
背景を作って苦労してみた ~Amplify Impostors~
背景を作って苦労してみた ~Amplify Impostors~背景を作って苦労してみた ~Amplify Impostors~
背景を作って苦労してみた ~Amplify Impostors~
 
ノベルゲーム動的演出の考え方
ノベルゲーム動的演出の考え方ノベルゲーム動的演出の考え方
ノベルゲーム動的演出の考え方
 
トリコの動かし方
トリコの動かし方トリコの動かし方
トリコの動かし方
 
コールバックと戦う話
コールバックと戦う話コールバックと戦う話
コールバックと戦う話
 

Similar to とあるCocos2dxアプリのチート編

情報セキュリティの啓蒙と仮想ネットワーク構築 Dos
情報セキュリティの啓蒙と仮想ネットワーク構築  Dos情報セキュリティの啓蒙と仮想ネットワーク構築  Dos
情報セキュリティの啓蒙と仮想ネットワーク構築 Dos
k009c1271
 
VIOPS09これ欲しい!と言われるネットワーク仮想化とは
VIOPS09これ欲しい!と言われるネットワーク仮想化とはVIOPS09これ欲しい!と言われるネットワーク仮想化とは
VIOPS09これ欲しい!と言われるネットワーク仮想化とは
Toru Kaneko
 
ソーシャルゲームにレコメンドエンジンを導入した話
ソーシャルゲームにレコメンドエンジンを導入した話ソーシャルゲームにレコメンドエンジンを導入した話
ソーシャルゲームにレコメンドエンジンを導入した話
Tokoroten Nakayama
 

Similar to とあるCocos2dxアプリのチート編 (20)

Hokkaido.cap#3 ケーススタディ(基礎編)
Hokkaido.cap#3 ケーススタディ(基礎編)Hokkaido.cap#3 ケーススタディ(基礎編)
Hokkaido.cap#3 ケーススタディ(基礎編)
 
とあるCocos2dx入門編
とあるCocos2dx入門編とあるCocos2dx入門編
とあるCocos2dx入門編
 
リアルタイムゲームサーバーの ベンチマークをとる方法
リアルタイムゲームサーバーの ベンチマークをとる方法リアルタイムゲームサーバーの ベンチマークをとる方法
リアルタイムゲームサーバーの ベンチマークをとる方法
 
Eメールはまだまだ面白い
Eメールはまだまだ面白いEメールはまだまだ面白い
Eメールはまだまだ面白い
 
45分で理解する ドッコムマスタートリプルスター受験対策 2012
45分で理解する ドッコムマスタートリプルスター受験対策 201245分で理解する ドッコムマスタートリプルスター受験対策 2012
45分で理解する ドッコムマスタートリプルスター受験対策 2012
 
情報セキュリティの啓蒙と仮想ネットワーク構築 Dos
情報セキュリティの啓蒙と仮想ネットワーク構築  Dos情報セキュリティの啓蒙と仮想ネットワーク構築  Dos
情報セキュリティの啓蒙と仮想ネットワーク構築 Dos
 
アナザーエデンにおける非同期オートセーブを用いた通信待ちストレスのないゲーム体験の実現
アナザーエデンにおける非同期オートセーブを用いた通信待ちストレスのないゲーム体験の実現アナザーエデンにおける非同期オートセーブを用いた通信待ちストレスのないゲーム体験の実現
アナザーエデンにおける非同期オートセーブを用いた通信待ちストレスのないゲーム体験の実現
 
2012年03月 経済産業省セミナー「クラウドは敵か?味方か?」
2012年03月 経済産業省セミナー「クラウドは敵か?味方か?」2012年03月 経済産業省セミナー「クラウドは敵か?味方か?」
2012年03月 経済産業省セミナー「クラウドは敵か?味方か?」
 
DeNAのサーバー"コード"レスアーキテクチャ
DeNAのサーバー"コード"レスアーキテクチャDeNAのサーバー"コード"レスアーキテクチャ
DeNAのサーバー"コード"レスアーキテクチャ
 
非エンジニアでもわかる
非エンジニアでもわかる非エンジニアでもわかる
非エンジニアでもわかる
 
Mobile Web
Mobile WebMobile Web
Mobile Web
 
IIJmio meeting #3 スピードテストについて考える
IIJmio meeting #3 スピードテストについて考えるIIJmio meeting #3 スピードテストについて考える
IIJmio meeting #3 スピードテストについて考える
 
Lチカで終わらせないArduino シリアル通信 Part2(移行済)
Lチカで終わらせないArduino シリアル通信 Part2(移行済)Lチカで終わらせないArduino シリアル通信 Part2(移行済)
Lチカで終わらせないArduino シリアル通信 Part2(移行済)
 
Amazon Athena 初心者向けハンズオン
Amazon Athena 初心者向けハンズオンAmazon Athena 初心者向けハンズオン
Amazon Athena 初心者向けハンズオン
 
Build easy web system on softlayer
Build easy web system on softlayerBuild easy web system on softlayer
Build easy web system on softlayer
 
Itで中小企業の生産性向上6
Itで中小企業の生産性向上6Itで中小企業の生産性向上6
Itで中小企業の生産性向上6
 
OSC Fukuoka SoftLayer
OSC Fukuoka SoftLayer OSC Fukuoka SoftLayer
OSC Fukuoka SoftLayer
 
VIOPS09これ欲しい!と言われるネットワーク仮想化とは
VIOPS09これ欲しい!と言われるネットワーク仮想化とはVIOPS09これ欲しい!と言われるネットワーク仮想化とは
VIOPS09これ欲しい!と言われるネットワーク仮想化とは
 
ソーシャルゲームにレコメンドエンジンを導入した話
ソーシャルゲームにレコメンドエンジンを導入した話ソーシャルゲームにレコメンドエンジンを導入した話
ソーシャルゲームにレコメンドエンジンを導入した話
 
リモート・スマホ・シェアリング
リモート・スマホ・シェアリングリモート・スマホ・シェアリング
リモート・スマホ・シェアリング
 

Recently uploaded

Recently uploaded (11)

LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
論文紹介: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
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
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の勉強会で発表されたものです。
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
論文紹介: 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
 
論文紹介: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...
 

とあるCocos2dxアプリのチート編