「先着1000名様!ゲームクリアで必ずFun!Fun!ピンク缶!プレゼント!」を"必ず"ゲームクリアしてみる

f:id:shutingrz:20131107225241p:plain

柔軟剤入り洗剤【ボールド】公式サイト-Fundry Town-

普通に何回スロット回しても全然クリアできなかったので本気出してみた。

まず、Fundryスロットについての説明をします。

概要

  • 期間は2013年11月30日まで。
  • スロットを試行するためのコインは3枚配られます。1回のスロット試行で1枚消費します。つまり初期状態で連続3回までスロットが試行できます。
  • リーチの際は10秒ほどの広告アニメーションが流れた後、3つ目のロールが止まります。
  • スロットのロールが揃った時、つまり当たった場合、「ヒミツの番号」が表示され、応募ページに「ヒミツの番号」を入力することにより、当たったと判断されます。

技術的な説明

  • コインの枚数はCookieに保存されます。(coin)
  • スロットのシステムは全てJavascript(+PHP)で書かれています(ヒミツの番号も)
  • スロットが当たる確率は1/2000で、リーチの確率は350/1500(約1/4)です。
  • 「ヒミツの番号」は定数です。

解析攻略してみる

それでは上記を利用して攻略してみます。
考えられる方法は、

  • Cookie操作で無限回ゲーム試行

です。どの方法を使うかは自分の得意な分野で決めてください。

Cookie操作で無限回ゲーム試行

Firefoxプラグインなどを使用し、coinの値を増やし、2000回やれば理論的に当たります。
おわり。



ソースコードに含まれる確率を操作し100%当てる

Firebugを開き、スロットを呼び出すファイルを調べます。URLは

http://vip.myrepi.com/bold/slot.php

と判明します。

f:id:shutingrz:20131107231232p:plain
ソースを見ます。

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デコードし、画像ファイルとして保存します。
f:id:shutingrz:20131107233046p:plain

画像ファイルを開くと・・・!
f:id:shutingrz:20131107233104j:plain
(モザイクしてあります)

おわり。


総評

なんでもかんでもクライアントサイドでやろうとするな。
ちなみに結局応募してません。