Плагин для шифровки пакетов.

Дополнения к OpenKore, расширяющиее её функциональность, называются плагинами.

Модератор: 4epT

Shwarzwalde
Новичок
Сообщения: 9
Зарегистрирован: Вс сен 14, 2008 1:37 pm

Плагин для шифровки пакетов.

Сообщение Shwarzwalde »

Я знаю что на сервере идёт шифровка ксором 4х битным ключом. К сожаления я не силён в perl. Почитал гайды по нему, но как внести изменения в OK пока не понял.
Т.е. для того что сформировать кодированный пакет нужно выполнить вот такое преобразование:
(если бы это писалось на С++)

Код: Выделить всё

for(int i=0;i<length;i++){
 message[i]^=cod[i%4];
}
где message[length] это сообщение,
cod[4] - ключ.
А как реализовать такой же код в perl?
Очевидно нужно дописать в эту функцию подобие такой обработки.

Код: Выделить всё

sub serverSend {
	my $self = shift;
	my $msg = shift;
#сюда нужно дописать шифровку ?)
	if ($self->serverAlive) {
		if (Plugins::hasHook("Network::serverSend/pre")) {
			Plugins::callHook("Network::serverSend/pre", { msg => \$msg });
		}
		if (defined $msg) {
			$self->{remote_socket}->send($msg);
			if (Plugins::hasHook("Network::serverSend")) {
				Plugins::callHook("Network::serverSend", { msg => $msg });
			}
		}
	}
}
Т.е. вопросы такие...
а) как работать с строковой переменной perl как с массивом, т.е. как обработать её посимвольно.
б) как ксорить?

Код: Выделить всё

 $message^=$cod; 
будет соотвествовать сишному

Код: Выделить всё

message^=cod;
???
в)Там ли я пытаюсь шифровать пакеты?
г)Не плохо было бы это оформить ввиде плагина... Я думаю на многих пиратках пригодилось бы.
Аватара пользователя
Kissa2k
Профессионал
Сообщения: 1304
Зарегистрирован: Пн дек 04, 2006 8:33 pm

Сообщение Kissa2k »

Думаю нужно сделать плагин с хуком Network::serverSend/pre, который будет шифровать пакеты от OpenKore.
По поводу xor - я тоже не знаю как работать с отдельными битами в Perl.. Можно попробовать сделать DLL на си, которая будет экспортировать функцию шифровки и её использовать в плагине.
Аватара пользователя
Aib0
Бывалый
Сообщения: 961
Зарегистрирован: Чт ноя 16, 2006 12:50 am
Контактная информация:

Сообщение Aib0 »

М.. ^= должно работать
Для разделения юзай функцию split (Ex:

Код: Выделить всё

@array = split(//, $string);
)
Имхо там, но лучше сделать в виде плага, благо хук есть
Wtf is "OpenKore"?

"What we're dealing with here is a total lack of respect for the law"
Shwarzwalde
Новичок
Сообщения: 9
Зарегистрирован: Вс сен 14, 2008 1:37 pm

Сообщение Shwarzwalde »

О_о спасибо за split().. а то я это писал через substring в цикле :lol:
Написал саму логику шифровки -

Код: Выделить всё

#ключик
$s_key="ABCD";
#текст
$s_text="Hello World! I love u!!!!!!!!!";
#буфер для результата
$s_text2;
#функция шифровки
sub Encrypt{
	#внутренние буферы -  текстовый, ключ, длинна текста, длинна ключа
	my @n_text = split(//, $s_text);
	my @n_key = split(//, $s_key);
	my $n_text_len = length($s_text);
	my $n_key_len = length($s_key);
	#ксорим текст ключом
	for($i=0;$i<$n_text_len;$i++){
		@n_text[$i]=@n_text[$i]^@n_key[$i%$n_key_len];
	}
	# сшиваем наксореное в переменную для результата(возможно есть функция обратная сплиту, но чегото я её ненагулил)
	for($i=0;$i<$n_text_len;$i++){
		$s_text2.=@n_text[$i];
	}
}
#тестовый запуск шифровки
Encrypt();
print "$s_text\n";
print "$s_text2\n";
Теперь нужно оформить это ввиде плагина... очевидно нужно сделать текст и ключ передающимися параметрами и както это подключить к OK
vit
Бывалый
Сообщения: 624
Зарегистрирован: Вс мар 25, 2007 9:18 pm
Сервер RO:: localhost
Откуда: Санкт-Петербург

Сообщение vit »

Shwarzwalde, посмотри тему про РусРо. Там rusro_botter где-то ближе к концу выкладывал плагин. Там именно то, что тебе нужно(или первую версию его плагина в разделе сервис посмотри).
Бадум
Энтузиаст
Сообщения: 149
Зарегистрирован: Сб фев 10, 2007 12:51 am

Сообщение Бадум »

Плагин был бы очень в тему =)
А то оказалось что в коре нет поддержки автоспелла у сагов. Там после каста надо выбрать во всплывающем окошке тип спелла (фаерболт,колдболт и тп), так вот кора это окно конечно не видит и пакеты на выбор заряда не знает )
Надо вручную слать макросом
Shwarzwalde
Новичок
Сообщения: 9
Зарегистрирован: Вс сен 14, 2008 1:37 pm

Сообщение Shwarzwalde »

Результаты вчерашних изысканий:
а) Делать на перле с помощью побитовых операций чтото сложнее чем a^b невозможно, т.к. начинаются проблемы с разбиранием Perl'ом где строка/где число.
б) Подключение внешней длл - было бы идеальным решением, т.к. не нужно лезть в perl код. Проблема в том, что вчера так и не смог подключить никакую свою длл. Написал dll-ку с функцией

Код: Выделить всё

int Crypt(int a){
return a*a;
}
подключить так и не вышло... вечером выложу длл может кто разберётся как её подключить.
в) Есть ещё XS в перле, но это не вариант для больших объёмов кода, лучше имхо реализовать пункт "б"
Аватара пользователя
kLabMouse
Профессионал
Сообщения: 4776
Зарегистрирован: Вс ноя 05, 2006 4:32 pm

Сообщение kLabMouse »

ем... чтобы всё было красиво, посмотрите как пашет ЕПП (Encrypted Packet Prefixes).
там всё очень красиво и грамотно написано.
Аватара пользователя
4epT
macro-маньячина
Сообщения: 2792
Зарегистрирован: Чт дек 21, 2006 1:23 pm
Сервер RO:: 4game
Discord: ya4ept#8494
Контактная информация:

Сообщение 4epT »

боюсь, что ОФФтоп
Бадум, а ты так пробовал? :twisted:
Быстро и качественно напишу конфиг (макрос)! Стучи!
¤ Свежий бот ¤ Config checker ¤ Manual ¤
Изображение
Изображение
Аватара пользователя
Kissa2k
Профессионал
Сообщения: 1304
Зарегистрирован: Пн дек 04, 2006 8:33 pm

Сообщение Kissa2k »

Shwarzwalde, используй WinAPI, чтобы вызывать DLL.
Бадум
Энтузиаст
Сообщения: 149
Зарегистрирован: Сб фев 10, 2007 12:51 am

Сообщение Бадум »

4epT писал(а):боюсь, что ОФФтоп
Бадум, а ты так пробовал? :twisted:
[offtop] :lol: :lol: Спасибо)) ВОт я слепая курица [/offtop]
Ответить