|
Zombot (Клиент для игры Зомби ферма) [Обсуждение] - Свободное обсуждение - Ваши идеи, вопросы и ответы на тему браузерных игр и социальных сетей |
29.07.2014, 11:00
|
#2821
|
|
|
|
Пехотинец
|
Регистрация: 01.08.2012
Сообщений: 95
Популярность: 255
Сказал(а) спасибо: 28
Поблагодарили 54 раз(а) в 38 сообщениях
|
Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
По поводу вот этого поста: http://zhyk.ru/forum/showpost.php?p=...postcount=2814
У всех так или здесь есть секрет? Пока не авторизован пост виден так (Скрин1), если авторизован, ссылок нет, всё пусто (скрин2).
.........
Всё. Подсказали, увидел.
Последний раз редактировалось vintets; 29.07.2014 в 11:38.
|
|
|
29.07.2014, 11:53
|
#2822
|
|
|
|
Разведчик
|
Регистрация: 12.01.2013
Сообщений: 4
Популярность: -604
Сказал(а) спасибо: 0
Поблагодарили 8 раз(а) в 8 сообщениях
|
Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
подскажите что с этим делать,что не правильно?
2014-07-29 13:52:52,607 Выбираем пользователя...
2014-07-29 13:52:57,598 Логинимся...
2014-07-29 13:52:58,651 Загружаем остров...
2014-07-29 13:53:00,881 user is not valid
2014-07-29 13:53:00,881 Загружаем остров...
2014-07-29 13:53:01,765 user is not valid
2014-07-29 13:53:01,765 Загружаем остров...
2014-07-29 13:53:02,720 user is not valid
2014-07-29 13:53:02,721 Загружаем остров...
2014-07-29 13:53:03,619 user is not valid
2014-07-29 13:53:03,621 Загружаем остров...
2014-07-29 13:53:05,483 user is not valid
2014-07-29 13:53:05,484 Загружаем остров.
|
|
|
29.07.2014, 14:55
|
#2823
|
|
|
|
Разведчик
|
Регистрация: 29.07.2014
Сообщений: 0
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
|
Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
Спасибо vhyrix за поправки первого этапа Auth. осталось перевести код формирования sig на lng Python.
|
|
|
29.07.2014, 16:30
|
#2824
|
|
|
|
Разведчик
|
Регистрация: 12.09.2010
Сообщений: 0
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
|
Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
|
Цитата: |
|
|
|
|
|
У меня также на мозиле, на гугл хроме зайди.
|
|
|
29.07.2014, 17:08
|
#2825
|
|
|
|
Разведчик
|
Регистрация: 17.04.2014
Сообщений: 0
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
|
Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
|
|
|
29.07.2014, 18:58
|
#2826
|
|
|
|
Разведчик
|
Регистрация: 29.07.2014
Сообщений: 0
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 8 раз(а) в 5 сообщениях
|
Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
Что-то нытьё пошло "а даайтее боота, аа попраавьте мне". Вот, тут под катом чуть чуть теории.
теория Есть 3 степени защиты отсылаемого пакета на сервер, ну вообщет больше, но поменяли только эти.
Авторизация - поле "auth" первого запроса, в ответе отдаётся key.
Дальше все посылаемые на сервер пакеты зависят от этого key,
поле crc,
и поле sig.
Они поменяли метод генерации auth и crc, он вычитывается в их swf глазками и правится в питоне. это сделано :)
А функцию, вспомогательную для генерации sig - sigSaltFunc - они отдают при каждом заходе каждый раз разную.
s = Key + str(Id) + authKey
sig = md5 ( s + sigSaltFunc(s))
auth генерится от authkey, выдаваемого вконтактом и id, которое ты сам придумываешь в начале (они ставят просто миллисекунды от запуска).
crc генерится от всего сообщения,
sig генерится от authKey, id, key . при этом id идут начиная с отданного сервером (в первом ответе, вместе с key), подряд, по возрастанию на 1.
Проблема в генерации sig - что saltfunc нам отдают в формате swf. То есть питоном её не скушать так просто.
Что я хочу сделать - сделать на флеше прожку, которая ест saltfunc и генерит мне скажем 1000 штук sig подряд, начиная от текущего (key и authkey не меняются вообще). Это недолго, ну, она будет работать в смысле. И просто класть в текстовый файл, который я съем питоном :)
Есть и второе решение - взять саму swfку, распаковать zlibом, прочитать названия пользуемых функций и с'эмулировать байт-код на самом питоне. Это лучше, тем, что всё остаётся на питоне, чуть надёжнее и гораздо нитереснее.
saltFunc генерится сервером из 5 строчек, каждая из которых может быть любой из:
_loc2_ = _loc2_;
_loc2_ = _loc2_ + _loc2_;
_loc2_ = _loc2_.toUpperCase();
_loc2_ = _loc2_.toLowerCase();
_loc2_ = _loc2_.replace(new RegExp("0","gi"),"1");
_loc2_ = String(_loc2_.length * 13);
_loc2_ = _loc2_.substring(0,_loc2_.length / 2);
Перед ними идёт _loc2_ = param1, после, понятно, return _loc2_.
Сама флешка с этой функцией лежит на сервере толи минут 15, толи пару обращений, вообщем, перехваченных key хватает, чтобы загрузить, посмотреть и сверить sig.
Дальше - что я сделал. Минус этого метода в том, что если Вы это прочитаете, соберёте и запустите, то Вы могли бы это сделать и без меня. Тем более уважаемый vhyrix уже раздал работающего бота тем, кто хотел, как я вижу. Так что от этих сообщений толку ноль, можете дальше не читать :) Всё равно его метод лучше, хоть я этого метода и не знаю. :)
Итак, берём flashdevelop, потому что бесплатный, ставим, при установке ставим AIR SDK, остальное вроде не нужно. Создаём новый AIR AS3 Projector (это важно, остальной флеш не умеет писать на диск, как я понял). Вместо Main пишем вот это
Код:
package
{
import flash.display.Sprite;
import flash.events.Event;
import flash.filesystem.*;
import class_314;
public class Main extends Sprite
{
public function Main():void
{
if (stage) init();
else addEventListener(Event.ADDED_TO_STAGE, init);
}
private function init(e:Event = null):void
{
removeEventListener(Event.ADDED_TO_STAGE, init);
this.serverUrl = "http://java.shadowlands.ru/zombievk";
var file:File = new File("D:\\install\\Zombot\\sig\\bin\\keys.txt");
var stream:FileStream = new FileStream();
stream.open(file, FileMode.READ);
var contents:Array = stream.readUTFBytes(file.size).split(" ");
stream.close();
this.authKey = contents[0];
this.var_290 = new Number(contents[1]);
this.sessionKey = contents[2];
getSalt();
}
private var serverUrl:String;
private var sessionKey:String;
public var sigSaltFunc:Function;
private var var_290:Number;
private var authKey:String;
private function getSalt():void
{
var loadSaltComplete:Function = null;
loadSaltComplete = function(param1:class_314):void
{
sigSaltFunc = param1.saltFunc;
timeGetOk();
};
var postfix:String = sessionKey.substring(sessionKey.indexOf(":") + 1);
new class_314(serverUrl,postfix,loadSaltComplete);
};
private function timeGetOk():void
{
var file:File = new File("D:\\install\\Zombot\\sig\\bin\\sig.txt");
var stream:FileStream = new FileStream();
stream.open(file, FileMode.WRITE);
var output:Array = new Array();
var id:Number;
var sig:String;
for (var i:Number = 0; i < 1000; i++) {
id = var_290 + i;
sig = this.sessionKey + id.toString() + this.authKey;
sig = sig + this.sigSaltFunc(sig);
output[i]= new String("\""+id.toString()+"\":\""+sig+"\"")
}
stream.writeUTFBytes("{"+output.join(",\n")+"}");
stream.close();
stage.nativeWindow.close();
}
}
}
И создаём ещё class_314, в который пихаем вот это, беззастенчиво выдранное из декомпилированной swfки после деобфускатора
Код:
package
{
import flash.display.Loader;
import flash.net.URLRequest;
import flash.events.IOErrorEvent;
import flash.events.Event;
public class class_314 extends Loader
{
public function class_314(param1:String, param2:String, param3:Function, param4:Function = null)
{
super();
this.url = param1 + "/salt?postfix=" + param2;
this.completeHandler = param3;
this.failHandler = param4;
this.contentLoaderInfo.addEventListener(Event.COMPLETE,this.method_533);
this.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR,this.method_1684);
this.request = new URLRequest(param1);
load(this.request);
}
private static var var_1767:int = 3;
public var url:String;
public var completeHandler:Function;
private var failHandler:Function;
private var request:URLRequest;
private var var_1152:int = 0;
public var loaded:Boolean = false;
public var saltFunc:Function;
private function method_1684(param1:IOErrorEvent) : void
{
if(this.var_1152 < var_1767)
{
this.var_1152++;
this.request = new URLRequest(this.url);
load(this.request);
}
else
{
this.loaded = false;
this.contentLoaderInfo.removeEventListener(Event.COMPLETE,this.method_533);
this.contentLoaderInfo.removeEventListener(IOErrorEvent.IO_ERROR,this.method_1684);
if(this.failHandler != null)
{
this.failHandler(this);
}
}
}
private function method_533(param1:Event) : void
{
var _loc2_:Object = param1.target.content;
this.saltFunc = _loc2_.saltFunc;
this.loaded = true;
this.contentLoaderInfo.removeEventListener(Event.COMPLETE,this.method_533);
this.contentLoaderInfo.removeEventListener(IOErrorEvent.IO_ERROR,this.method_1684);
this.completeHandler(this);
}
}
}
С минимальными изменениями, как видите. Мне и так понятно, что как называлось до обфускации.
Компиляем, делаем keys.txt, запускаем: коннектится, генерит sig.txt, всё замечательно. Дальше - правим message_factory.py, что совсем просто.
Правим calcSig(sessionKey, self.__request_id, auth_key) на
self.calcSig(sessionKey, self.__request_id, auth_key) и включаем в класс фукцию calcSig (почему не поправить имеющуюся - ну, мне ж ключи хранить где-то надо, вот и буду в Factory их хранить :) )
Код:
def calcSig(self,sessionKey, requestId, authKey):
if hasattr(self,'sig') and isinstance(self.sig,dict) and \
self.sig.has_key(str(requestId)):
return hashsum._md5hash(self.sig[str(requestId)])
with open("sig\\bin\\keys.txt",'wt') as f:
f.write(" ".join([authKey,str(requestId),sessionKey]))
cwd = os.getcwd()
os.chdir("sig")
subprocess.call(["Run.bat"])
os.chdir(cwd)
with open("sig\\bin\\sig.txt",'rt') as f:
data=f.read()
self.sig=eval(data)
return hashsum._md5hash(self.sig[str(requestId)])
raise GameError("No sig for %s"%(" ".join([authKey,str(requestId),sessionKey])))
У меня всё работает. Если Вы, даже прочитав теорию, не понимаете, что происходит, лучше возьмите готового бота у vhyrix, пока раздаёт :) Никому скомпиленных swf не дам и помогать компилить не буду. Выше всё описано. :)
|
|
|
Пользователь сказал cпасибо:
|
|
29.07.2014, 20:22
|
#2827
|
|
|
|
Пехотинец
|
Регистрация: 01.08.2012
Сообщений: 95
Популярность: 255
Сказал(а) спасибо: 28
Поблагодарили 54 раз(а) в 38 сообщениях
|
Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
О спасибо, гуру. Будем пробовать.
Теория была ясна и так. Что, где высчитывается и куда передаётся. Весь затык был вызвать функцию из salt на флэше.
Флеш я так понял здесь не знает ни кто.
Последний раз редактировалось vintets; 29.07.2014 в 20:48.
|
|
|
29.07.2014, 22:27
|
#2828
|
|
|
|
Разведчик
|
Регистрация: 14.02.2014
Сообщений: 0
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 1 раз в 1 сообщении
|
Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
|
|
|
29.07.2014, 22:27
|
#2829
|
|
|
|
Разведчик
|
Регистрация: 23.08.2013
Сообщений: 1
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 2 раз(а) в 2 сообщениях
|
Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
|
Цитата: |
|
|
|
|
|
|
|
|
|
У меня всё работает. Если Вы, даже прочитав теорию, не понимаете, что происходит, лучше возьмите готового бота у vhyrix, пока раздаёт Никому скомпиленных swf не дам и помогать компилить не буду. Выше всё описано.
|
|
|
|
|
|
Ты не разбррался, есть ли готовый модуль для Питона, оозовлдяющий или вытащить оттуда скрипт, или аапустить АкшенСкрипт Симулятор? Я не уверен, насколько "универсальнО" твое решение со скомпилированным SWF файлом, так как я видел как минимум десяток разныx алгоритмов в файле "соли".
|
|
|
29.07.2014, 22:30
|
#2830
|
|
|
|
Разведчик
|
Регистрация: 14.02.2014
Сообщений: 0
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 1 раз в 1 сообщении
|
Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
|
|
|
29.07.2014, 22:42
|
#2831
|
|
|
|
Разведчик
|
Регистрация: 23.08.2013
Сообщений: 1
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 2 раз(а) в 2 сообщениях
|
Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
Так проблема в том, что нужен только один "ключ", тогда как в файле будет тысяча. Если пробовтть из все перебирать, то вероятнее всего забанят еще на взлете...
Я нашел swftools, кгторые позволяют вытаскивать объекты из SWF, однако не будет совместимости между платформами (я кручу все на Линуксе). Поэтмму пока разбираюсь, как сделать "универсальную" вытаскивалку кода. Например pyxswf. Если будет просто пакет (не бинарный), который позволит устанавливать его на любой Питон, это будет нормальное решение. Без компиляции...
|
|
|
29.07.2014, 22:47
|
#2832
|
|
|
|
Разведчик
|
Регистрация: 14.02.2014
Сообщений: 0
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 1 раз в 1 сообщении
|
Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
|
Цитата: |
|
|
|
|
|
|
|
|
|
Так проблема в том, что нужен только один "ключ", тогда как в файле будет тысяча. Если пробовтть из все перебирать, то вероятнее всего забанят еще на взлете...
Я нашел swftools, кгторые позволяют вытаскивать объекты из SWF, однако не будет совместимости между платформами (я кручу все на Линуксе). Поэтмму пока разбираюсь, как сделать "универсальную" вытаскивалку кода. Например pyxswf. Если будет просто пакет (не бинарный), который позволит устанавливать его на любой Питон, это будет нормальное решение. Без компиляции...
|
|
|
|
|
|
Дело-то в том,что из зф просто так код не вытащить,а если и вытащить-то он будет обфусцирован (все названия классов,пакетов,функций,переменных будут кривыми и перемешанными)
|
|
|
30.07.2014, 02:30
|
#2833
|
|
|
|
Разведчик
|
Регистрация: 23.08.2013
Сообщений: 1
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 2 раз(а) в 2 сообщениях
|
Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
|
Цитата: |
|
|
|
|
|
|
|
|
|
Дело-то в том,что из зф просто так код не вытащить,а если и вытащить-то он будет обфусцирован (все названия классов,пакетов,функций,переменных будут кривыми и перемешанными)
|
|
|
|
|
|
Я нашел, что общая структура SWF файла достаточно легко разбирается на Питоне (поищите файлы типа swf.py или swfparset.py для примера). Сейчас пытаюсь разобраться с тем, что по максимуму можно вытащить из данных (нужно смотреть на тэг 82 (или 0х52 в шестнадцатеричном виде). По идее текстовые названия функций видны, так что по ним можно предположить, какой вариант скрипта используется... Правда возможны варианты (например если параметр идет цифровой, и придется анализировать побайтно). Но в принципе возможно...
PS. Я говорю только о файле salt, в нем содержится только одна функция, и она не зашифрована.
PPS. Да, не все так радужно... Вытащить данные скрипта можно, причем достаточно легко. Но скрипт идет в скомпилированном виде, то есть нужен декомпилятор. А "мультиплатформного" я пока не нашел (особенно на Питоне). Есть swftools, он, вроде, подключается в Питон, но он должен компилироваться на платформу, то есть "переносимости" уже не будет.
Последний раз редактировалось mike4kz; 30.07.2014 в 03:11.
|
|
|
30.07.2014, 14:26
|
#2834
|
|
|
|
Разведчик
|
Регистрация: 04.02.2013
Сообщений: 1
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
|
Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
|
|
|
30.07.2014, 14:57
|
#2835
|
|
|
|
Пехотинец
|
Регистрация: 01.08.2012
Сообщений: 95
Популярность: 255
Сказал(а) спасибо: 28
Поблагодарили 54 раз(а) в 38 сообщениях
|
Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
Скомпилил... пути поправил на укороченные (так можно?). Но ничего не вычисляет. Чем его запускать? Что должно быть в Run.bat ? Пробовал через Standalone FlashPlayer, ничего.
|
|
|
Пользователь сказал cпасибо:
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Заявление об ответственности / Список мошенников
Часовой пояс GMT +4, время: 15:43.
|
|