- 19 May 2020
- 238
- 84
Merhaba,
browser tabanlı bir oyun için bot yazmaya başladım. siteye bağlandığımda cors poltikası gereki istekte bulunamıyorum, curl ile get veya post istekleri dahil. ayrıca giriş sayfasında arkaplanda gizli olarak çalışan hcaptcha mevcut, recaptcha değil "h"captcha. javascript ile trigger methoduyla kullanıcı taklidi veya elle doğrulama bile yapsanız, farklı bir sunucudan erişim sağladığım için, tüm istekleri daha yapmadan yok sayıyor. neyse doğrudan sunucuyla etkileşime geçtim bende, üst bilgi de doğrulama tokenlerini ve kendi kullandığı çeşitli anahtarlarla birlikte session bilgisini ileterek kalıcı olarak oturum elde ederek giriş yapmayı başardım.
bir noktada sorun yaşıyorum ama. oyun 2 ana dosyadan meydana geliyor, çalışan kısım php üzerine kurulu, istekleri yöneten ve arkaplanda çalışan hizmet ise javascript. bağlanılan oyun sunucuna göre 8080 portlu bir socket hizmetine istekte bulunuyor. örneğin enventer'ıma bakmak istedim;
öncesinde bir istek gönderiyor ve json olarak sonuç döndürüyor
ardından sırasıyla 8080 portlu bir socket bağlantısı gerçekleştiriyor ve farklı isteklerde bulunuyor
sonuç:
2. istek ise
sonuç:
sonuç:
son olarak
sonuç: 1:6
oyun motor niteliğinde javascript dosyasıda aşağıda, parametreleri ve istekleri otomatik olarak anlık kendisi oluşturuyor.
socket'e yapılan ilk istekte diğer bağlantılar için gerekli olan sid değerini alıyoruz önce arkasından gerisi geliyorda... bütün trafiği bir yerden sonra game.js dosyası yönetiyor. obusfactor işlemi yapılmamış kodlara gerçi, ama ihtiyaçta yok düzenleyenin bile belli bir noktadan sonra kafası dağılır yani. bu da çok önemli değil gerçi. mantığı ve işleyişi belli bir noktaya kadar kafamda tasarladım, ara istekler ile yanıtları geçerli hale getirebilirim. bir nevi istemci ve port arasında istekleri takip edip işleyecek bir kontrolcü yazabilirim. buraya kadar da sorun yok. ama game.js dosyasındaki istekleri takip edemiyorum. bu dosya içerisinde yapılan post ve get isteklerini takip edebileceğim bir yöntem düşünebilen var mı? game.js'yi düzenlemek istemiyorum.
browser tabanlı bir oyun için bot yazmaya başladım. siteye bağlandığımda cors poltikası gereki istekte bulunamıyorum, curl ile get veya post istekleri dahil. ayrıca giriş sayfasında arkaplanda gizli olarak çalışan hcaptcha mevcut, recaptcha değil "h"captcha. javascript ile trigger methoduyla kullanıcı taklidi veya elle doğrulama bile yapsanız, farklı bir sunucudan erişim sağladığım için, tüm istekleri daha yapmadan yok sayıyor. neyse doğrudan sunucuyla etkileşime geçtim bende, üst bilgi de doğrulama tokenlerini ve kendi kullandığı çeşitli anahtarlarla birlikte session bilgisini ileterek kalıcı olarak oturum elde ederek giriş yapmayı başardım.
bir noktada sorun yaşıyorum ama. oyun 2 ana dosyadan meydana geliyor, çalışan kısım php üzerine kurulu, istekleri yöneten ve arkaplanda çalışan hizmet ise javascript. bağlanılan oyun sunucuna göre 8080 portlu bir socket hizmetine istekte bulunuyor. örneğin enventer'ıma bakmak istedim;
öncesinde bir istek gönderiyor ve json olarak sonuç döndürüyor
JSON:
{
"inventory": {
"200_0": {
"player_id": "848935444",
"item_id": "200",
"instance_id": "0",
"item_key": "200_0",
"amount": "1",
"instance_data": null,
"new": "0"
},
"1001_0": {
"player_id": "848935444",
"item_id": "1001",
"instance_id": "0",
"item_key": "1001_0",
"amount": "1",
"instance_data": null,
"new": "0"
}
},
"data": {
"200_0": {
"item_id": 200,
"instance_id": 0,
"name": "Yeniden yerle\u015ftir",
"admin_name": "Yeniden yerle\u015ftir",
"image": "https:\/\/dstr.innogamescdn.com\/asset\/5a33db0f\/graphic\/items\/relocate.png",
"image_info": {
"hash": "e3653",
"width": 92,
"height": 92,
"has_retina": true,
"src": "items\/relocate.png"
},
"type": 2,
"category": 5,
"color": null,
"actions": [
{
"name": "Kullan",
"link": "javascript:Inventory.openItemDialog('%item_key%', 'choose_location')",
"allow_sitter": true
}
],
"links": [],
"tags": [
{
"type": "use_type",
"tag": 1
}
],
"descriptions": [
{
"text": "Mevcut k\u00f6y\u00fcn\u00fc yeni bir yere veya arkada\u015f\u0131n\u0131 yan\u0131na ta\u015f\u0131! Bu sadece tek k\u00f6y\u00fcn oldu\u011funda kullan\u0131labilir.",
"color": null,
"image": null
}
],
"new_count": "0"
},
"1001_0": {
"item_id": 1001,
"instance_id": 0,
"name": "Envanter ho\u015fgeldin paketi",
"admin_name": "Envanter ho\u015fgeldin paketi",
"image": "https:\/\/dstr.innogamescdn.com\/asset\/5a33db0f\/graphic\/items\/resources_percent.png",
"image_info": {
"hash": "a5ea1",
"width": 92,
"height": 92,
"has_retina": true,
"src": "items\/resources_percent.png"
},
"type": 2,
"category": 2,
"color": null,
"actions": [
{
"name": "Kullan",
"link": "javascript:Inventory.consumeItem('%item_key%')",
"allow_sitter": true
}
],
"links": [],
"tags": [
{
"type": "use_type",
"tag": 1
}
],
"descriptions": [
{
"text": "Envanterine ho\u015f geldin! Burada hediye edilebilir premium \u00f6zellikleri ve etkinlik bonuslar\u0131 gibi \u00f6\u011feleri bulabilirsin.",
"color": null,
"image": null
},
{
"text": "Depo kapasitesinin 10% kadar\u0131n\u0131 t\u00fcm k\u00f6ylerde kaynak olarak ekler.",
"color": null,
"image": null
}
],
"new_count": "0"
}
},
"expire": {
"200_0": [
"1631061497"
]
}
}
ardından sırasıyla 8080 portlu bir socket bağlantısı gerçekleştiriyor ve farklı isteklerde bulunuyor
Kod:
curl 'https://tr66.klanlar.org:8080/socket.io/?player_id=&village_id=27539&screen=inventory&EIO=3&transport=polling&t=NkwqhqM' \
-H 'Connection: keep-alive' \
-H 'sec-ch-ua: " Not A;Brand";v="99", "Chromium";v="92", "Opera";v="78"' \
-H 'Accept: */*' \
-H 'sec-ch-ua-mobile: ?0' \
-H 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36 OPR/78.0.4093.184' \
-H 'Origin: https://tr66.klanlar.org' \
-H 'Sec-Fetch-Site: same-site' \
-H 'Sec-Fetch-Mode: cors' \
-H 'Sec-Fetch-Dest: empty' \
-H 'Referer: https://tr66.klanlar.org/' \
-H 'Accept-Language: tr-TR,tr;q=0.9,en-US;q=0.8,en;q=0.7' \
-H 'Cookie: cid=1826746381; locale=tr_TR; tr_auth=938e6209f8e5:dad3b2e1745cbd59c17e2c3020ded2f8b095d75d8bde7d8e27a45a83b0249aa7; sid=0%3Ad0b730fc253c599ffdbc5f906ef6bb20e8a78e65114610165426eb1836969868383ea2e9e1fde93bba1758bc6b7c6fd36ec4c9536462ddfcd4939772e68a1926; global_village_id=27539; websocket_available=true; io=pl7c9jdvJuIdddR4BaZu' \
--compressed
JSON:
96:0{"sid":"QSMvZBp_GrQqUE-OBbar","upgrades":["websocket"],"pingInterval":25000,"pingTimeout":5000}2:40
2. istek ise
Kod:
curl 'https://tr66.klanlar.org:8080/socket.io/?player_id=&village_id=27539&screen=inventory&EIO=3&transport=polling&t=Nkwqhu0&sid=QSMvZBp_GrQqUE-OBbar' \
-H 'Connection: keep-alive' \
-H 'sec-ch-ua: " Not A;Brand";v="99", "Chromium";v="92", "Opera";v="78"' \
-H 'Accept: */*' \
-H 'sec-ch-ua-mobile: ?0' \
-H 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36 OPR/78.0.4093.184' \
-H 'Content-type: text/plain;charset=UTF-8' \
-H 'Origin: https://tr66.klanlar.org' \
-H 'Sec-Fetch-Site: same-site' \
-H 'Sec-Fetch-Mode: cors' \
-H 'Sec-Fetch-Dest: empty' \
-H 'Referer: https://tr66.klanlar.org/' \
-H 'Accept-Language: tr-TR,tr;q=0.9,en-US;q=0.8,en;q=0.7' \
-H 'Cookie: cid=1826746381; locale=tr_TR; tr_auth=938e6209f8e5:dad3b2e1745cbd59c17e2c3020ded2f8b095d75d8bde7d8e27a45a83b0249aa7; sid=0%3Ad0b730fc253c599ffdbc5f906ef6bb20e8a78e65114610165426eb1836969868383ea2e9e1fde93bba1758bc6b7c6fd36ec4c9536462ddfcd4939772e68a1926; global_village_id=27539; websocket_available=true; io=QSMvZBp_GrQqUE-OBbar' \
--data-raw '53:40/game?player_id=&village_id=27539&screen=inventory,' \
--compressed
JSON:
ok
Kod:
curl 'https://tr66.klanlar.org:8080/socket.io/?player_id=&village_id=27539&screen=inventory&EIO=3&transport=polling&t=Nkwqhu6&sid=QSMvZBp_GrQqUE-OBbar' \
-H 'Connection: keep-alive' \
-H 'sec-ch-ua: " Not A;Brand";v="99", "Chromium";v="92", "Opera";v="78"' \
-H 'Accept: */*' \
-H 'sec-ch-ua-mobile: ?0' \
-H 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36 OPR/78.0.4093.184' \
-H 'Origin: https://tr66.klanlar.org' \
-H 'Sec-Fetch-Site: same-site' \
-H 'Sec-Fetch-Mode: cors' \
-H 'Sec-Fetch-Dest: empty' \
-H 'Referer: https://tr66.klanlar.org/' \
-H 'Accept-Language: tr-TR,tr;q=0.9,en-US;q=0.8,en;q=0.7' \
-H 'Cookie: cid=1826746381; locale=tr_TR; tr_auth=938e6209f8e5:dad3b2e1745cbd59c17e2c3020ded2f8b095d75d8bde7d8e27a45a83b0249aa7; sid=0%3Ad0b730fc253c599ffdbc5f906ef6bb20e8a78e65114610165426eb1836969868383ea2e9e1fde93bba1758bc6b7c6fd36ec4c9536462ddfcd4939772e68a1926; global_village_id=27539; websocket_available=true; io=QSMvZBp_GrQqUE-OBbar' \
--compressed
JSON:
8:40/game,28:42/game,["chat/contacts", {}]
0: "chat/contacts"
1: {}
son olarak
Kod:
curl 'https://tr66.klanlar.org:8080/socket.io/?player_id=&village_id=27539&screen=inventory&EIO=3&transport=polling&t=NkwqhwE&sid=QSMvZBp_GrQqUE-OBbar' \
-H 'Connection: keep-alive' \
-H 'sec-ch-ua: " Not A;Brand";v="99", "Chromium";v="92", "Opera";v="78"' \
-H 'Accept: */*' \
-H 'sec-ch-ua-mobile: ?0' \
-H 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36 OPR/78.0.4093.184' \
-H 'Origin: https://tr66.klanlar.org' \
-H 'Sec-Fetch-Site: same-site' \
-H 'Sec-Fetch-Mode: cors' \
-H 'Sec-Fetch-Dest: empty' \
-H 'Referer: https://tr66.klanlar.org/' \
-H 'Accept-Language: tr-TR,tr;q=0.9,en-US;q=0.8,en;q=0.7' \
-H 'Cookie: cid=1826746381; locale=tr_TR; tr_auth=938e6209f8e5:dad3b2e1745cbd59c17e2c3020ded2f8b095d75d8bde7d8e27a45a83b0249aa7; sid=0%3Ad0b730fc253c599ffdbc5f906ef6bb20e8a78e65114610165426eb1836969868383ea2e9e1fde93bba1758bc6b7c6fd36ec4c9536462ddfcd4939772e68a1926; global_village_id=27539; websocket_available=true; io=QSMvZBp_GrQqUE-OBbar' \
--compressed
oyun motor niteliğinde javascript dosyasıda aşağıda, parametreleri ve istekleri otomatik olarak anlık kendisi oluşturuyor.
socket'e yapılan ilk istekte diğer bağlantılar için gerekli olan sid değerini alıyoruz önce arkasından gerisi geliyorda... bütün trafiği bir yerden sonra game.js dosyası yönetiyor. obusfactor işlemi yapılmamış kodlara gerçi, ama ihtiyaçta yok düzenleyenin bile belli bir noktadan sonra kafası dağılır yani. bu da çok önemli değil gerçi. mantığı ve işleyişi belli bir noktaya kadar kafamda tasarladım, ara istekler ile yanıtları geçerli hale getirebilirim. bir nevi istemci ve port arasında istekleri takip edip işleyecek bir kontrolcü yazabilirim. buraya kadar da sorun yok. ama game.js dosyasındaki istekleri takip edemiyorum. bu dosya içerisinde yapılan post ve get isteklerini takip edebileceğim bir yöntem düşünebilen var mı? game.js'yi düzenlemek istemiyorum.