29/11/16

Mình đã hack game Vòng Số như thế nào?

Mở đầu: 

Hôm nay ngồi lướt lướt fb thì được mời chơi một game khá hay nằm tại link https://www.funstart.net/game/3

Luật chơi đơn giản:

Có ít nhất 2 người chơi, từng người sẽ tìm số trên màn hình và click nhớ phải theo thứ tự từ 1 -> 100 ai nhiều số hơn sẽ thắng !

Tò mò: 

Lúc đầu thì mình chơi bình thường và chẳng nghĩ gì về nó đâu nhưng gặp một bạn chơi cùng khoanh lẹ quá mình khoanh không kịp nên thua 😜 thế là ngồi nghĩ cách "hack" cái trò này.

Đầu tiên F12:


Thì ra là nó dùng javascript để chạy trò này và các Div có attribute "value" sẽ tương ứng với số cần chọn !


Nghĩ ngay tới cách:

1. Cho 1 vòng lặp từ 1->100 để tìm các div có số tương ứng và click !

Thế là autoWin version 1.0 ra đời =))


for(var i = 1; i<= 100;i++)
{
   $("div[value="+i+"]").trigger("click");
}
Nhưng có 1 vẩn đề lớn ! cách hoạt động của trò này là khi người dùng click vào 1 ô thì sẽ update lại giá trị max và điểm người dùng nên nó có 1 khoảng thời gian delay là khoảng 0.2s

nên khi vòng lặp trên nó chạy thì nó click từ box 1 -> box 100 nhưng không hề ngưng nghỉ nên khi chưa kịp update lại giá trị thì box tiếp theo đã được click ! -> phải chạy nhiều lần !

Hừm vậy cho nó chạy nhiều lần luôn ? 
Lúc đó không hề suy nghĩ nữa mà "tay nhanh hơn não" bay vào thêm hàm setInterval để lặp liên tục:
version 1.2 ra đời 

setInterval(function(){
    for(var i = 1; i<= 100;i++)
    {
        $("div[value="+i+"]").trigger("click");
    }
},300);
Ok nó chạy đc nhưng mà như vậy thì lag browser với lại nó sẽ chạy liên túc không nghỉ kể cả khi đã thắng game ! máy có 2GB à :'( chạy thế thì die sớm !
nên nghĩ là mình nên cải tiến ! thế là nghĩ ra cách hay hơn:
Để ý khi 1 ô được khoanh tròn thì nó sẽ có thêm 1 class nữa là active:

Oh có thể lợi dụng điều này và làm như sau:
dùng đệ quy lặp đi lặp lại việc bấm box nếu box thứ 100 có class active thì ngưng việc đệ quy và xuất thông báo !
và thế là tiếp tục là version 1.3 hehe:


function autoWin()
{
    if($("div[value=100]").hasClass("active"))
    {
        alert("Win !");
    }
    else
    {
        for(var i = 1; i<= 100;i++)
        {
            $("div[value="+i+"]").trigger("click");
        }
        setTimeout(function(){autoWin();},500);
    }
}
OK vậy là xong. Lúc chơi các bạn bấm F12 sau đó chuyển sang Tab Console rồi dán function trên vào -> Enter và auto Win thôi
Áp dụng cho bạn nào troll gái nhé :))) Thấy hay thì Chia sẽ bài viết này nhé...
Cảm ơn các bạn đã xem bài viết này. 
Zerox 😜