「先着1000名様!ゲームクリアで必ずFun!Fun!ピンク缶!プレゼント!」を"必ず"ゲームクリアしてみる
柔軟剤入り洗剤【ボールド】公式サイト-Fundry Town-
普通に何回スロット回しても全然クリアできなかったので本気出してみた。
まず、Fundryスロットについての説明をします。
概要
- 期間は2013年11月30日まで。
- スロットを試行するためのコインは3枚配られます。1回のスロット試行で1枚消費します。つまり初期状態で連続3回までスロットが試行できます。
- リーチの際は10秒ほどの広告アニメーションが流れた後、3つ目のロールが止まります。
- スロットのロールが揃った時、つまり当たった場合、「ヒミツの番号」が表示され、応募ページに「ヒミツの番号」を入力することにより、当たったと判断されます。
技術的な説明
- コインの枚数はCookieに保存されます。(coin)
- スロットのシステムは全てJavascript(+PHP)で書かれています(ヒミツの番号も)
- スロットが当たる確率は1/2000で、リーチの確率は350/1500(約1/4)です。
- 「ヒミツの番号」は定数です。
解析攻略してみる
それでは上記を利用して攻略してみます。
考えられる方法は、
- Cookie操作で無限回ゲーム試行
- ソースコードに含まれる確率を操作し100%当てる
- ソースコードに含まれる「ヒミツの番号」を探す
です。どの方法を使うかは自分の得意な分野で決めてください。
・ソースコードに含まれる確率を操作し100%当てる
Firebugを開き、スロットを呼び出すファイルを調べます。URLは
http://vip.myrepi.com/bold/slot.php
と判明します。
ソースを見ます。
slot.php
<script type="text/javascript" src="http://media.myrepi.com/bold/js/slot_machine.js"></script>
ページ上部にslot_machine.jsが読み込まれて怪しいので開きます。
slot_machine.js
ページ上部に
SlotMachine.percentage = 1; SlotMachine.percentageNearmiss = 350;
をあります。
ページ中部に
//当たり外れを決定する. var indices; var randomIndices = this.getRandomIndices(); this.m_reachFlag = false; this.m_winFlag = false; if(Math.random()*2000 < SlotMachine.percentage) { indices = [0,0,0]; this.m_reachFlag = true; this.m_winFlag = true; } else if(Math.random()*1500 < SlotMachine.percentageNearmiss) { indices = [0,0,randomIndices[0]]; this.m_reachFlag = true; } else indices = randomIndices; this.m_reels[1].setStopIndex(indices[0]); this.m_reels[2].setStopIndex(indices[1]); this.m_reels[3].setStopIndex(indices[2]); this.m_reels[1].start(); this.m_reels[2].start(); this.m_reels[3].start(); this.m_stopButton1.startAlert();
があります。
this.m_winFlag=trueが書いてある部分が当たりなんでしょう。if文は
if(Math.random()*2000 < SlotMachine.percentage)
と書いてあります。
つまり当たる確率は1/2000。当たらない時、リーチの確率は350/1500。
つまり100%当たるようにするには、SlotMachine.percentageの値を2001以上にすればよいわけです。
おわり。
・ソースコードに含まれる「ヒミツの番号」を探す
http://media.myrepi.com/bold/slot.php
のソースコードを開きます。
slot.php
ページ中部に、
<div id="slot_how" style="display:none"> <h2 class="ttl"><img src="http://media.myrepi.com/bold/images/detail/ttl_slot.png" alt="Fundry!スロット"></h2> <h3><img src="http://media.myrepi.com/bold/images/detail/ttl_how.png" alt="応募方法"></h3> <section> <div class="attention"><img src="http://media.myrepi.com/bold/images/detail/txt_how_attention.gif" alt="ご応募が終わるまでこの画面は閉じないよう、ご注意ください。"></div> <div class="flow" id="flow01"> <div class="inner"> <div id="secretNumber"> <h4><img src="http://media.myrepi.com/bold/images/detail/ttl_how01.gif" alt="1.ヒミツの番号をメモ"></h4> <p id="secretDigit"></p> </div> <p><img src="http://media.myrepi.com/bold/images/detail/txt_how01.gif" alt="応募画面でヒミツの番号の入力項目がありますので、上記番号をメモしてください。"></p> </div><!-- /inner --> </div><!-- /flow01 -->
があります。
secretDigitが怪しいです。
2)の時と同様に
http://media.myrepi.com/bold/js/slot_machine.js
を開きます。
slot_machine.js
secretDigitで検索をします。すると、
$("#secretDigit").get(0).innerHTML = '<img src="data:image/gif;base64,' + qervvbk +'">';
が検索にかかります。
読むと、gifファイルがbase64エンコードされているようで、
そのbase64エンコードされている値の変数はqervvbkです。この変数名で検索してみると、
var qervvbk = "R0lGODlhSAARALMPAI+Pj9ra2ubm5oKCgrS0tGlpacHBwZubm83NzfPz811dXVBQUKioqHZ2dkRERP///yHIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9 (略) qDAViAOAMjSAtpGwSVpVtD96saMAipNqtg44AIszWxhuJfiQSyFu4rsnEgwXgYELob+OtiiTHzgl74BGhAgklbw1UiHCkcOAQZkGIHgpRBlsdAwDTJIicquSplcvLlix4PfkCFXCJqyyZGtEjADgRAAA7"; //data:image/jpg;base64,
が検索にかかります。
この値をコピーし、Terminalを開き、base64デコードし、画像ファイルとして保存します。
画像ファイルを開くと・・・!
(モザイクしてあります)
おわり。
総評
なんでもかんでもクライアントサイドでやろうとするな。
ちなみに結局応募してません。