принудительная синхронизация / проблемы синхронизации / PP

Официальный сервер Ragnarok On-Line в России - https://ru.4game.com/ro/install/

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

Правила форума
ВНИМАНИЕ: реклама сторонних ботов запрещена! Всякие плюшки - можно :)
Аватара пользователя
Jerry
Профессионал
Сообщения: 1047
Зарегистрирован: Сб ноя 04, 2006 12:26 pm
Контактная информация:

Сообщение Jerry » Вт дек 19, 2006 10:30 pm

и что, помогает ?:)

Аватара пользователя
kLabMouse
Профессионал
Сообщения: 4776
Зарегистрирован: Вс ноя 05, 2006 4:32 pm

Сообщение kLabMouse » Вт дек 19, 2006 11:38 pm

Только ета строчка
$func = 0x89 * 0x89;
На сегодняшний день поменялась. Ето префикс пакета :)

DInvalid
Грамотный
Сообщения: 368
Зарегистрирован: Вт ноя 14, 2006 4:54 pm

Сообщение DInvalid » Вт дек 19, 2006 11:50 pm

kLabMouse писал(а):Только ета строчка
$func = 0x89 * 0x89;
На сегодняшний день поменялась. Ето префикс пакета :)
Ребят, очень смешно.
Я конечно понимаю что вы знаете все гораздо лучше меня.
И знаете как решить эту проблему.
А я нуп, который ничего не понимает.

КМ, если вам НЕ СЛОЖНО, приведите пример как вычисляется номер ф-ции на данный момент времени.
Jerry писал(а):и что, помогает ?:)
Пока ничего сказать не могу, бот пробегал с этим исправлением достаточно долго, что я могу сказать, набранные логи бесполезны, так как там неверно показываются номера функций, и правится не та функция, так что о том, ПОМОГАЕТ это или нет, сказать не могу.

Аватара пользователя
kLabMouse
Профессионал
Сообщения: 4776
Зарегистрирован: Вс ноя 05, 2006 4:32 pm

Сообщение kLabMouse » Вт дек 19, 2006 11:59 pm

Для Атаки:

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

$func = 0x85 * 0x85;
$func &= 0xFFFFFFFF;
$func += unpack("L1",$syncMapSync);
$func &= 0xFFFFFFFF;
$func += unpack("L1",$syncSync);
$func &= 0xFFFFFFFF;
$func += unpack("L1",$accountID);
$func &= 0xFFFFFFFF;
$func &= 0xF;
Для Скиллов:

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

$func = 0xA2 * 0xA2;
$func &= 0xFFFFFFFF;
$func += unpack("L1",$syncMapSync);
$func &= 0xFFFFFFFF;
$func += unpack("L1",$syncSync);
$func &= 0xFFFFFFFF;
$func += unpack("L1",$accountID);
$func &= 0xFFFFFFFF;
$func &= 0xF;
Где
0x85 -- Префикс Пакета Аттаки
0xA2 -- Префикс Пакета Скилла

В случае Если они поменяют Префиксы, то нужно будет так-же префиксы поменять в соостветвующих местах.

Так-же такой Код не прокатит:
if ($func==0xE) { $syncSync = pack("V", getTickCount()+1);}

Во первых Сервер тоже должен знать Теперешнее значение Синка. Для етого мы можем Вызвать Соостветвующюю функцию с Send.pm и Повторить попытку через нобольшую задержку.

DInvalid
Грамотный
Сообщения: 368
Зарегистрирован: Вт ноя 14, 2006 4:54 pm

Сообщение DInvalid » Ср дек 20, 2006 12:46 am

kLabMouse писал(а):
Так-же такой Код не прокатит:
if ($func==0xE) { $syncSync = pack("V", getTickCount()+1);}

Во первых Сервер тоже должен знать Теперешнее значение Синка. Для етого мы можем Вызвать Соостветвующюю функцию с Send.pm и Повторить попытку через нобольшую задержку.
Спасибо.
Почему не прокатит.
Мы находимся в Send.pm, в функции sendSync

sub sendSync {
my $r_net = shift;
my $initialSync = shift;
my $msg;
# XKore mode 1 lets the client take care of syncing.
return if ($r_net->version == 1);

$syncSync = pack("V", getTickCount()); ### сначала мы нормально берем getTickCount
####Добавляем
$func = 0x85 * 0x85;
$func &= 0xFFFFFFFF;
$func += unpack("L1",$syncMapSync);
$func &= 0xFFFFFFFF;

## $func += unpack("L1",$syncSync)+3; - откуда я тут +3 написал? хз, может когда проверял что-нить ))) но должно быть так, конечно %)
$func += unpack("L1",$syncSync);
$func &= 0xFFFFFFFF;
$func += unpack("L1",$accountID);
$func &= 0xFFFFFFFF;
$func &= 0xF;
#### Вычислили №ф-ции, которая будет использоваться при данном синке.

if ($func==0xE) { ### мы не хотим ф-ю 0E
$syncSync = pack("V", getTickCount()+1); ### корркетируем $syncSync
}

#### Которое далее посылается и т.п.

П.С. Что я хотел сказать.
<skip>Погрызено злым сусликом<skip>
Да, глупо было писать тут ЭТО =)

С уважением.
Последний раз редактировалось DInvalid Ср дек 20, 2006 1:12 am, всего редактировалось 2 раза.

Аватара пользователя
Jerry
Профессионал
Сообщения: 1047
Зарегистрирован: Сб ноя 04, 2006 12:26 pm
Контактная информация:

Сообщение Jerry » Ср дек 20, 2006 12:53 am

DInvalid писал(а):
Jerry писал(а):и что, помогает ?:)
Пока ничего сказать не могу, бот пробегал с этим исправлением достаточно долго, что я могу сказать, набранные логи бесполезны, так как там неверно показываются номера функций, и правится не та функция, так что о том, ПОМОГАЕТ это или нет, сказать не могу.
ну эт типа не ирония была, а любопытство. логи, кстати, полезны, они или показывают что исправление неээфективно, или то, что оно ээфективно по третьей причине :)

Аватара пользователя
Jerry
Профессионал
Сообщения: 1047
Зарегистрирован: Сб ноя 04, 2006 12:26 pm
Контактная информация:

Сообщение Jerry » Ср дек 20, 2006 12:55 am

DInvalid писал(а):А так же преподавал x86 асм в вузе, так что какие то представления о нем имею.
С уважением.
не надо так напрягаться, все свои, можешь даже послать когонть если не нравится :)

Аватара пользователя
Jerry
Профессионал
Сообщения: 1047
Зарегистрирован: Сб ноя 04, 2006 12:26 pm
Контактная информация:

Сообщение Jerry » Ср дек 20, 2006 1:00 am

я, кстати, не знаю, откуда ты взял код с этими &= 0xFFFFFFFF, это совершенно бесполезная операция, достаточно просто сложения.

и что должно означать вот это "3" в
$func += unpack("L1",$syncSync)+3;
?

зы номер считается вот так
(packet * packet + map_sync + sync + acc_id) & 0xF
packet это соответственно ID пакета

Аватара пользователя
Jerry
Профессионал
Сообщения: 1047
Зарегистрирован: Сб ноя 04, 2006 12:26 pm
Контактная информация:

Сообщение Jerry » Ср дек 20, 2006 1:05 am

а, хотя может смысл в & и есть, я не в курсе сколькобитная арифметика в перле ...

DInvalid
Грамотный
Сообщения: 368
Зарегистрирован: Вт ноя 14, 2006 4:54 pm

Сообщение DInvalid » Ср дек 20, 2006 1:10 am

Jerry писал(а):я, кстати, не знаю, откуда ты взял код с этими &= 0xFFFFFFFF, это совершенно бесполезная операция, достаточно просто сложения.

и что должно означать вот это "3" в
$func += unpack("L1",$syncSync)+3; ?
Это ГЛЮК :evil:
$func += unpack("L1",$syncSync);

Код мне любезно дал КМ, для отладки, еще давно. что бы выводить в лог, какая ф-я выбрана.
Jerry писал(а): зы номер считается вот так
(packet * packet + map_sync + sync + acc_id) & 0xF
packet это соответственно ID пакета
Это на С, как в перле будет округлятся... хз

Аватара пользователя
Jerry
Профессионал
Сообщения: 1047
Зарегистрирован: Сб ноя 04, 2006 12:26 pm
Контактная информация:

Сообщение Jerry » Ср дек 20, 2006 1:14 am

ну вот для этого наверно и придумано &= 0xFFFFFFFF

Аватара пользователя
Jerry
Профессионал
Сообщения: 1047
Зарегистрирован: Сб ноя 04, 2006 12:26 pm
Контактная информация:

Сообщение Jerry » Ср дек 20, 2006 1:16 am

так может у вас и раньше функция неправильно считалась ?:)

DInvalid
Грамотный
Сообщения: 368
Зарегистрирован: Вт ноя 14, 2006 4:54 pm

Сообщение DInvalid » Ср дек 20, 2006 1:19 am

Jerry писал(а):так может у вас и раньше функция неправильно считалась ?:)
Нед...
sub SetHashData {
SetAccountId(unpack("L1",$accountID));
SetMapSync(unpack("L1",$syncMapSync));
SetSync(unpack("L1",$syncSync));
my $func;
$func = 0x85 * 0x85;
$func &= 0xFFFFFFFF;
$func += unpack("L1",$syncMapSync);
$func &= 0xFFFFFFFF;
$func += unpack("L1",$syncSync);
$func &= 0xFFFFFFFF;
$func += unpack("L1",$accountID);
$func &= 0xFFFFFFFF;
$func &= 0xF;
message "Using Function [".getHex(pack("C", $func))."] AccID: [".getHex($accountID)."] MapSync: [".getHex($syncMapSync)."] Sync: [".getHex($syncSync)."]\n","dumpROPP";

Это я на форум запостил не из Send.pm a из test.pl :crazy:

Аватара пользователя
kLabMouse
Профессионал
Сообщения: 4776
Зарегистрирован: Вс ноя 05, 2006 4:32 pm

Сообщение kLabMouse » Ср дек 20, 2006 1:19 am

Jerry
ХЗ. Я ето відрал Ещё со старіх нароботок ДаркФейта. Когда ещё Паддинги только Появились. Всегда верно пахала. Ни разу не сглючила :)

Driver
Энтузиаст
Сообщения: 104
Зарегистрирован: Вс ноя 18, 2007 9:47 pm

Сообщение Driver » Ср дек 20, 2006 2:08 am

Мыша а ты ведь добавишь все это в очередной вариант Коре, правда ведь :roll:

Ответить