понедельник, 20 февраля 2012 г.

Anonymizer для Encounter


Что это?
Простенький инструмент для того, чтобы обойти ограничение количества активных участников в играх Encounter.

Как это работает?
Вы общаетесь с Анонимайзером, а он общается с движком Encounter. При этом вас может быть много, а Анонимайзер один. Поэтому движок Encounter считает, что читает задания и вводит коды только один игрок. А вы в это время видите в браузере привычный интерфейс и не замечаете разницы (кроме разницы в скорости отклика движка).

Как это совмещается с принципом FairPlay?
Моя позиция такова, что ограничение количества активных участников в играх Encounter является глупым, вредным и неэффективным. Глупым - потому что никак не ограничивает число фактических участников игры, а всего лишь затрудняет им доступ к движку. Вредным - потому что провоцирует команды искать окольные пути. Неэффективным - потому что большинство регулярно играющих команд уже проложили и утоптали эти окольные дорожки.
Пожалуй, единственная цель, которая успешно достигается этим ограничением, - это насильственное дробление команд с целью повышения доходов авторов игр.
Таким образом, настоящий FairPlay в играх Encounter возможен только при отмене ограничения количества активных участников. Именно эту цель (отмену ограничения) я и преследую.


Установка(upd: 29.10.2013).
1) Качаем инсталлятор отсюда
2) Устанавливаем
3) В папке, куда оно поставилось, редактируем файл settings.ini
там заполняем:
username - существующий логин под которым будет играть команда.
password - пароль
domain - домен, на котором мы будем играть.

Например, есть игра с ограничением состава на домене msk.en.cx
Наш файл должен иметь примерно такой вид:
username=air
password=airpassword
domain=msk.en.cx
По-умолчанию, сервер будет работать на порту 8001. Если он у вас чем-то занят - то необходимо поменять его в последней строке файла anonymizer.py на любой открытый порт на вашем компьютере.

ВНИМАНИЕ. Домен вводим именно в формате "xxx.en.cx", а не "www.xxx.en.cx" или "http://xxx.en.cx/" Будьте внимательны.

Запуск.(upd: 29.10.2013)
Кликаем на ярлычке.
Если у вас при запуске была следующая ошибка:
socket.error: [Errno 98] Address already in use
значит 8001 порт у вас занят. нужно либо освободить его либо указать другой в скрипте.
Теперь все. Сервер готов к использованию.

Открываем в браузере http://<ваш внешний айпишник>:8001/
Cвой внешний айпишник можно определить зайдя сюда
То есть если у вас айпи 79.125.20.11 и порт указан по-умолчанию, открывать будем
http://79.125.20.11:8001/
В открывшемся окне смотрим залогинены ли мы. Если нет - снова редактируем файл и вводим правильные логин и пароль еще раз. сохраняем файл, перезапускаем сервер, обновляем страницу в браузере.
Если залогинены - кидаем ссылку в чат остальной команде. Приятной игры.

ВНИМАНИЕ. Если вы выходите в сеть через роутер то в браузере вы увидите что страница не найдена. В этом случае вам нужно единоразово "пробросить порты": 
смотрим свой локальный айпишник, идем в настройки роутера, находим там port forwarding и указываем forwarding для определенного порта на свой айпишник, сохраняем настройки, обновляем страничку в браузере. все.


Нюансы.
Анонимайзер "запоминает" все введенные ответы всеми игроками которые его используют в данный момент и не дает повторно вводить одно и тоже в систему - для того что бы было меньше палева в мониторинге.
Сбросить память ему можно введя в качестве ответа слово "ап". Само слово на сервер отправляться не будет но теперь он начнет запоминать ответы игроков с нуля. Это полезно при переходе на следующий уровень в играх линейного типа.

Советы.
1) Рекомендую не играть с помощью анонимайзера в игры типа брутфорс или гх ибо быстродействия вашего компьютера и скорости интернет-соединения может не хватить для того что-бы быстро обрабатывать кучу запросов в секунду. В этом случае анонимайзер может подлагивать.
2) Рекомендую обновлять задания при помощи кнопки "Обновить" в меню игры.
3) Рекомендую использовать анонимайзер исключительно по прямому назначению - то есть смотреть задания и бить ответы. Не нужно там ф5тить статистику или писать посты на форум или делать денежные переводы и тд и тп. Это все лишние запросы к серверу, что может привести к лагам и тормозам.

Исходник.
anonymizer.py
# -*- coding: utf8 -*-
import urllib
import random

from flask import Flask, request
app = Flask(__name__)

from MozillaEmulator import *
dl = MozillaEmulator()

username = ""
password = ""
domain = ""

answers = ['ап']
answer = ""

def do_login():
    login_url = "http://%s/Login.aspx?return=/" % domain
    page = dl.download(login_url, postdata=urllib.urlencode({"Login": username,
                                                             "Password": password}))
    print "******** READY ********"

@app.route('/')
def home():
    url = "http://%s/" % domain
    page = dl.download(url)
    return page

@app.route('/', methods=['GET', 'POST'])
def index(link):
    url = "http://%s/%s?%s&lol=%s" % (domain, link, request.query_string, random.random())
    if request.method == 'GET':
        page = dl.download(url)
    if request.method == 'POST':
        post_data = {}
        for k, v in request.form.to_dict().items():
            post_data[k] = v.encode('utf-8')
            if k == 'Answer':
                answer = post_data[k]
        if answer in answers:
            page = dl.download(url)
            if answer == 'ап':
                global answers
                answers = ['ап']
        else:
            answers.append(answer)
            page = dl.download(url, postdata=urllib.urlencode(post_data))
    return page

if __name__ == "__main__":
    do_login()
    app.run(port=8001, host='0.0.0.0')

Если есть вопросы по установке-настройке-использованию - пишите прям тут в комментах.

8 комментариев:

  1. Все установил работает все замечательно, но появился маленький вопрос можно ли как-то привязать собственную авторизацию. Чтобы человек прежде чем попасть в Анонимайзер ввел какой нить пароль? просто в программирование не силен. А функция у больно нужная.

    ОтветитьУдалить
    Ответы
    1. Добавить то можно. и можно еще много чего добавить.
      Я специально выкладывал минимально-простой вариант приложения.
      Далее - каждый волен модифицировать его как угодно.
      Если вы боитесь что вас будут "прослушивать" зная уже Ваш айпишник - поиграйтесь с портами.
      По-моему, самый простой вариант защиты без написания дополнительного кода - это указывать в последней строке скрипта произвольный порт типа 23232 и все. Не зная его - ваше приложение будет довольно сложно отследить снаружи.

      Удалить
    2. С портами я уже думал, но как вариант не подходит, так как роутер подвязан к службе ddns и проброшен определенный порт. Каждый раз не очень удобно менять порт на роутере. Может подскажите хоть в какую сторону копать, чтобы попробовать сделать хотя бы предварительный запрос пароля.

      Удалить
  2. 2) Flask
    Качаем этот файл.
    нет файлика :(

    ОтветитьУдалить
  3. и этих тоже нету
    3) Скрипты.
    Берем здесь.

    ОтветитьУдалить
  4. Может кто подскажет?
    Настроил, всё поднялось.
    При заходе на анонимайзер, сайт грузится, но при нажатии на любую ссылку (будь-то календарь или редактирование профиля) - вылетает ошибка в браузере.
    Вот скриншоты.

    http://ipic.su/img/img3/fs/kiss_29kb.1373920915.jpg

    http://ipic.su/img/img3/fs/kiss_25kb.1373921175.jpg

    ОтветитьУдалить