この記事では、好ましくない手段を使用してHTML5ゲームをプレイする方法の2つの例を示します。
HTML5ゲームの中核はJavaScriptです。 現在のところ、このカーネルの唯一の保護はコードの難読化です。 同意せず、改行なしで10,000行の難読化されたコードの「シート」を見るのは最初は怖いです。 しかし、少し掘り下げると、アプリケーションのロジックとアーキテクチャが完全に表示されます。 主なものは、不正行為の目的(速度、リソース、GodMode)を決定することです。 ツールとして、ChromeとそのWebインスペクターを使用します。 「ソース」タブで、実行可能コードを「ホット」変更できます。
Google Doodle
簡単な例から始めます: http : //www.google.com/doodles/slalom-canoe-2012 比較的新鮮なオリンピック落書き。
ゲームの主な目標は、できるだけ早くトラックを渡すことです。 いくつかのトリックがすぐに思い浮かびます:
- ボートの速度を上げます。
- 障害物を取り除く。
- 衝突から減速を削除します。
- トラックを「真っ直ぐにする」。
- タイマーで何かをする(リセット、スローダウン)。
ほとんどの場合、最良の考えは最初のものです。 その上で停止します。 ChromeとそのWeb Inspectorを開きます(基本はすばらしい記事にあります )。
ゲームのJavaScriptコードに興味があります。
これがslalom_canoe12-2.jsであると仮定するのは論理的です 。
ソースコードは...少し怖いですよね? JavaScriptシンタックスを使用して、改行を自動的に配置およびフォーマットできます。 可読性が大幅に向上し、分析が容易になります。 コード全体をブレークポイントでオーバーレイし、アルゴリズムを復元することもできます。 しかし、私たちはクアドロコプターでS-400から撮影しません...
私たちは推論し始めます。 キーを押すか、ゲートを通過することで、ボートは加速します。 したがって、どこかにパラメーター「速度」があり、(ほとんどの場合)増分する必要があります。 コードごとにすべての「+ =」演算子を探しています(コードの量と複雑さで許可されているため)。12個しかありません。原則として、「scientific poke」メソッドをオンにして、12個すべてを順番に変更できます。 そして、あなたは考えるかもしれません。
- t his.S + = b.duration-期間に関連する何か(ありがとう、キャップ!);
- this.B &&(e + = this.B *(Math.random()-0.5)、f + = this.B *(Math.random()-0.5))... e + = this.o *(Math.random()- 0.5))-random-0.5はどういうわけか速度に見えません...
- R + = Qc * b -hmm ...および初期値、およびある種の係数。
停止して確認しましょう。 (念のため)ページを更新します。 オープンソースslalom_canoe12-2.js R + = Qc * bが見つかります。 bが加速係数であるとします。 そして500に置き換えます(Ctrl + Sを押すことを忘れないでください)。
ゲームで[再生]をクリックして...
ビンゴ! 私たちの奇跡のボートはフィニッシュラインに急ぎます。 今、あなたはあなたの指の速度であなたの友人に自慢することができます:)
上記の例は、私たちが少しの血でうまくいくことができた場合です。 また、JavaScript、アーキテクチャ、デバッグに関する深い知識は必要ありませんでした。 算術のみ。
別の例に移りましょう。
スペランキー
この例では、if ifとwhat =のほか、英語の基本的な知識が必要です。 少し前に、 スペランキーに関する記事がHabréに掲載されました。 ゲームは確かに注目に値します。 古き良きハードコア! しかし、ゲームに干渉するコントロールと衝突を伴ういくつかの「ショール」があります。 人生、爆弾、ロープ、その他の喜びを自分で描いてみよう。
ゲームでサイトを開きます。 インスペクターでindex.jsを見つけます 。これはゲームコードです。 最初に考えたのは、「なんて悪夢だ。」
しかし、やめて! 明確な言葉もあります。 たとえば、爆弾、ロープ。 これはすでに興味深いです。 そのため、アイテムの受け取りを処理するコードを見つけることができます。 そしてどこかにその量を増やす必要があります...
爆弾という言葉を探しています。 多くの結果があります-79.爆弾バッグを試してみましょう。 そして、これが最初の結果です!
if((qzb(hzb.lhc).hjc == "Bomb Bag")){
{global.loc + = 3; hzb.unc = ilc(qzb(hzb.lhc).exb、(qzb(hzb.lhc).fxb-14)、195); qzb(hzb.unc).khc = 603; { var moc = uzb(hzb.lhc); for(var noc in moc){var ooc = moc [noc]; {nlc(ooc);}}}; gg(hzb、izb、global.ync); hzb.lhc = 0; global.bnc =「3つ以上のボムがあります!」
ここでは、何かが爆弾バッグと比較され、これがそれである場合、global.loc + = 3を実行し、「YOU GOT 3 MORE BOMBS!」と表示されます。 近くにあるコードを分析し、ロープやその他の喜びが保存されている変数を見つけます。 以下に短いリストを示します。
- global.loc-爆弾;
- global.soc-粘着爆弾。
- global.woc-ロープ。
次に、ゲーム自体の値を変更してみます。 [ソース]タブのインスペクターで、[スクリプト実行の一時停止(F8)]をクリックします。
コンソールを開き、次を入力します。
一時停止を解除し、結果をお楽しみください! 私は自分の人生を描く方法を説明しません。 読者にこの変数を理解させてください。
結論:スマートな上り坂は機能しません。 JavaScriptコードの変更は簡単です。 難読化は致命的ではありません。 論理的に考えてみてください。 そしてもう1つ:不正行為を行うと、ゲームへの興味が徐々に失われます(少なくとも私にとっては)。
この記事は情報提供を目的としています。
著者:アレクサンダー・ポラン( hekser )。