Логотип игрового форума RF-Cheats.ru    
Новости онлайн игр Правила форума Чёрный рынок Реклама и привилегии Гаранты Арбитраж

Регистрация Бан-лист Сообщество ПОПУЛЯРНОЕ
Вернуться   RF-Cheats.ru - форум читеров и ботоводов > > > >

Пакетный уровень RFO / WPF-скрипты

: Обсуждение пакетов, способа отсылки/редактирования пакетов и багов на их основе. Технически говоря - обсуждение сетевого протокола RF.
Читы и обход фроста для RF Online без хайдаБоты и читы для Perfect World бесплатно без хайдаМоды и читы для World of Tanks (WoT) бесплатно без хайдаМоды и читы для Armored Warfare бесплатно без хайдаБоты и читы для DOTA 2 бесплатно без хайдаБоты и читы для Black Desert Online бесплатно без хайдаЧиты на ArcheAge бесплатно без хайдаЧиты для Warface бесплатно без хайдаВзлом ВКонтакте и ОдноклассниковСписок разделов со всеми играмиЧиты для онлайн игр




Ответ
 
Опции темы
Старый 14.10.2011, 00:52   #1
Likelihood
Подпольщик AA
Аватар для Likelihood
OFFLINE
Регистрация: 09.10.2009
Сообщений: 590
Благодарностей:
39 всего
Мнения: + 312
Репутация: 118
Отправить сообщение для Likelihood с помощью Skype™

[WPF] Пишем скрипт на фильтр лута [Hide=0]



Пишем скрипт на фильтр лута.

Информация, данная в данном топике, пригодится не только для написания фильтра лута.

Пояснять работу с ВПФ (он же WPF, он же WP PPC) я не буду - все это есть на форуме.

1. Разбор пакета.

Прежде всего разберем пакет на лут. Данный пакет идет от сервера к клиенту и информирует клиент о том какой лут, в каком количестве, по каким координатам, а также его принадлежность. Для простого фильтра нужно получить только что за лут появился.

Пример пакетов на лут без обвязки (без ФГ):

1D00 0314 146901 01 0400 FFFFFFFF00 0200 F0350000 01 4B13 F506 EF03 00
1D00 0314 146901 02 0600 FFFFFFFF00 0200 F0350000 01 4413 F506 ED03 00
1D00 0314 146901 03 3300 FFFFFFFF00 0200 F0350000 01 4513 F506 F203 00
1D00 0314 146901 19 4900 FFFFFFFF00 0200 F0350000 01 4A13 F506 F003 00
1D00 0314 146901 19 C200 FFFFFFFF00 0200 F0350000 01 4513 F506 ED03 00
1D00 0314 146901 19 1100 FFFFFFFF00 0200 F0350000 01 4613 F506 EA03 00


Пример пакетов на лут с обвязкой (с ФГ) - в начале пакета добавляется два байта размера пакета и в конце 4 байта '04000000':

2300 1D00 0314 146901 01 0400 FFFFFFFF00 0200 F0350000 01 4B13 F506 EF03 00 04000000
2300 1D00 0314 146901 02 0600 FFFFFFFF00 0200 F0350000 01 4413 F506 ED03 00 04000000
2300 1D00 0314 146901 03 3300 FFFFFFFF00 0200 F0350000 01 4513 F506 F203 00 04000000
2300 1D00 0314 146901 19 4900 FFFFFFFF00 0200 F0350000 01 4A13 F506 F003 00 04000000
2300 1D00 0314 146901 19 C200 FFFFFFFF00 0200 F0350000 01 4513 F506 ED03 00 04000000
2300 1D00 0314 146901 19 1100 FFFFFFFF00 0200 F0350000 01 4613 F506 EA03 00 04000000


Иногда концовка '04000000' может отличатся, но это крайне редко.

ВАЖНО: Далее разбор и написание скрипта будет основываться на пакетах без ФГ (без обвязки). Но суть написания абсолюно идентична для обоих типов пакетов.

Для удобства работы с пакетом напишем строку перед строкой с пакетом с указаем "адреса" (порядковый номер байта).

0102 0304 050607 08 0910 1112131415 1617 18192021 22 2324 2526 2728 29
1D00 0314 146901 01 0400 FFFFFFFF00 0200 F0350000 01 4B13 F506 EF03 00


Байты по адресам 0102 - 1D00 - размер пакета 29 байт. Размер пакета всегда пишется в перевернутом хекс виде, т.е. 1D00 следует читать как число 001D и переводится в десятичное 29. Данное правило часто используется в числах, используемых в пакетах. Например, расовая валюта и платина в пакетах тоже пишуться в перевернутом виде.

Байты по адресам 0304 - 0314 - указание что за пакет пришел. В данном случае пакет с информацией о луте.

Байты по адресам 050607 - 146901 - это так называемый ID лута, т.е. идентификационный номер вещи по базе игры. По нему клиент и узнает ЧТО именно показать этим пакетом. Из этих трех байтов первый - 14 - это так называемая группа вещи. А второй и третий - так называемый номер вещи в этой группе. Видимо, это сделано для удобства. Я, к примеру, не разбиваю ID на группы и номер вещи, а использую в фильтрах ID целиком.

Байты по адресам 08 - количество предметов в пачке лута (если эта вещь пакетируется). Для простого фильтра несущественно.

Байты по адресам 0910 - SID текущего лута - номер лута. Это типа порядкового номера лута. Одна и та же вещь может быть выкинута неоднократно. ID при этом у нее ПОСТОЯННО (оно и определяет, что это за вещь), а вот SID у вещи (точнее, у лута) каждый раз новый.

Байты по адресам с 11 по 22 определяют принадлежность лута (с кого, кем, и т.д.).

Байты по адресам с 23 по 28 - координаты лута.

Байт по адресу 29 я не определил для чего.

2. Что требуется знать для написания скрипта на фильтр лута.

От скрипта требуется, чтобы он фильтровал лут, а именно:
- пропускал пакеты с нужным лутом;
- не пропускал пакеты с ненужным лутом.

Для этого в написании будут использованы следующие операторы (команды) и переменные:

Операторы в скрипт-языке WPS должны разделяться символом ';' (точка с запятой), а скрипт заканчиваться '.' (точкой).

Двойные слеши '//' и текст после них не читаются скрипт-движком как операторы и никак не выполняются, а считаются пояснением для написанного скрипта. Служит для удобства - типа не забыть что для чего.

Begin ... End - составной оператор. Должен начинаться со слова Begin и заканчиваться словом End. Эти два слова можно сравнить со "скобками", ограничивающими несколько операторов в так называемом блоке операторов. Блок операторов может состоять из одного оператора (в этом случае он ничем не отличается от обычного оператора) или из нескольких операторов. Блоки операторов, состоящие из нескольких операторов, также называют составными операторами. В скрипт-языке WPS основной скрипт также считается блоком операторов и начинается словом Begin и заканчивается словом End.

If ... Then ... [Else] - условный оператор. Проверяет истинность (истинно или ложно) логическое выражение. Заместо или в комбинации с логическим выражением возможно использование переменных типа булево, т.е. тех, которые в себе уже несут информацию об истинности/ложности.

Возможно еще такая конструкция:
If ... Then ... [End Else If ... Then ...] [End Else If ... Then ...] ... ... [End Else ...]

Или даже такая громозская с использованием составного оператора Begin ... End:
If ... Then
[Begin
...
End;]
[End Else If ... Then]
[Begin
...
End;]
[End Else If ... Then]
[Begin
...
End;]
...
...
[End Else]
[Begin
...
End;]


Для комбинации логических выражений и/или переменных булево используются операторы And (И), Or (Или), Not (Не):
- And (И) - оператор логического умножения.
- Or (Или) - оператор логического сложения.
- Not (Не) - оператор логического отрицания.

Copy(S:Str,I:Int,C:Int):Str - функция скрипт-языка WPS. Возвращает подстроку из сткроки S начиная с I номера символа количеством C. Так же, возвращает из бинарного буфера S начиная с I байта/символа количеством C байт/символов.

_gFromServ:Bool - переменная скрипт-языка WPS. Возвращает True (Истина), если скрипт получил пакет с сервера на клиент, False (Ложь) - если с клиента на сервер.

_gBuff:Str - переменная скрипт-языка WPS. Содержит текущий пакет (буфер/строку). С ним-то и работает скрипт. Изменять ее нельзя. Для этого служит следующая переменная.

_gOutBuff:Str - переменная скрипт-языка WPS.Содержит пакет, который уйдет дальше по назначению. С ним тоже работает скрипт. Можно изменять по необходимости.

HStr(S:Str,[,Len:Int]):Buf - функция скрипт-языка WPS. Собирает пакет из строки S и добавляет нулевые байти до необходимой длины Len.

gBlockPacket - функция скрипт-языка WPS. Блокирует текущий пакет (дальше он никуда не уйдет). Работает в оба направления (клиент-сервер и сервер-клиент).

3. Сам процесс написания скрипта фильтра.

3.1. Начало написания скрипта.

Писать скрипт удобно прямо в скрипт-тестере программы WPF.

Прежде всего создаим блок операторов самого скрипта:

Код:
BEGIN

END.
В теле данного блока и будет писаться текст скрипта.

Далее нам необходимо сделать проверку пакета на на направление (клиент-сервер или сервер-клиент).

По-русски код будет выглядеть так:

Код:
НАЧАТЬ_БЛОК                            // начало блока скрипта
Если ПАКЕТ_ОТ_СЕРВЕРА Тогда            // проверяем условие в переменной откуда-куда пакет
  Начать_Блок                          // начало блока_1 если пакет от сервера (нумерация блоков в поснениях чисто виртуальна и необходиа для удобства)
	                               // тело блока_1 - сюда будем писать операторы блока_1
  Конец;                               // конец блока_1 (конец оператора блока_1), поэтому ставим в конце ';'
КОНЕЦ.                                 // конец блока скрипта, в конце ставим '.'
То же самое на языке скрипта:

Код:
BEGIN                                  // начало скрипта
If _gFromServ Then                     // проверяем что пакет от сервера
  Begin                                // если пакет от сервера, то начинаем
                                       // здесь пишем необходимые команды (см.далее про '0314')
  End;                                 // конец блока
END.                                   // конец скрипта
Проверяем в скрипт-тестере написанное (при условии что пишем именно там) - жмем кнопку "Script Run".
Если написано без ошибок, выдаст текст такого типа:

Код:
________________________________________________________________________________________________________________
.compiling {FS text script} 13.10.2011 22:43:30
.compiled (time: 16 ms.)
.
.'OnCreate' not found...
.running Script {FS text script} 13.10.2011 22:43:30

.var's:
 
.
.end Script ( >>> SCRIPT TIME: 0 ms. <<< )
.'OnDestroy' not found...
.end;
Текст (скрипт) скомпилирован за 16 миллисекунд. Функции OnCreate и OnDestroy не найдены (они для данного скрипта не обязательны). Время выполнения скрипта 0 миллисекунд.

Если при написании допущены синтаксические ошибки, то проверка остановится на месте ошибки.


3.2. Про '0314'.

Далее нам необходимо из всех пакетов от сервера выбрать для работы необходимый нам, а именно содержащий информациию о том, что это пакет о луте, т.е. байты по адресам 0304 содержат строку '0314'. Код, написанный ниже, для сокращения объема написан не целиком, а вписывается в тело блока_1, о котором говорилось чуть выше.

Код по-русски:

Код:
    Если (Пакет начиная с 3 байта длиной 2 байта)=(Пакету со строкой '0314') Тогда   // проверка условия на наличие '0314'
      Начать_Блок                                                                    // начало блока_2
                                                                                     // здесь пишем необходимые команды
      Конец;                                                                         // конец блока_2
Код по-скрипту:

Код:
    If Copy(_gBuff,3,2)=HStr('0314') Then   // проверка условия на наличие '0314'
      Begin                                 // начало блока_2
                                            // здесь пишем необходимые команды (см.далее про ID)
                                            // здесь пишем необходимые команды
      End;                                  // конец блока_2
3.3. Про ID.

В этом блоке нам необходимо из полученного пакета на лут выделить ID предмета (вещи) и сравнить его с требуемым нам, тем самым отсеять ненужные и пропустить нужные. Для примера используем ID редкой руды (далее РР) (она фигурирует с самого начала в примерах) - '146901'. Как говорилось выше, можно выделить группу предметов, в которую входит РР, - группа 14, а номер предмета 6901. В некоторых скриптах часто используют это разделение, а также преобразуют их в десятичную форму. В моем примере ни того, ни другого не будет. Так вот, нам необходимо отсеять пакеты с ненужными ID и пропустить с РР.
Сравнивать нужный ID с полученным в пакете можно по разному. Самый простой способ аналогичен вышеописанному сравнению для '0314'.

Код по-русски:

Код:
Если Не ((Пакет начиная с 5 байта длиной 3 байта)=(Пакету со строкой '146901')) Тогда  // проверка условия на наличие ID '146901' с его отрицанием, т.е. выполнить блокирование пакета если ID не равен требуемому ID РР
  Блокировать_Пакет;
Код по-скрипту:

Код:
        If Not (Copy(_gBuff,5,3)=HStr('146901')) Then     // проверка условия на наличие ID '146901' с его отрицанием, т.е. выполнить блокирование пакета если ID не равен требуемому ID РР
          gBlockPacket;
[/HIDE]


3.3. Итог

Соединяем те строки, что написаны выше и получаем:

Код по-русски:
Код:
НАЧАТЬ_БЛОК
  Если ПАКЕТ_ОТ_СЕРВЕРА Тогда
    Начать_Блок
      Если (Пакет начиная с 3 байта длиной 2 байта)=(Пакету со строкой '0314') Тогда
        Начать_Блок
          Если Не ((Пакет начиная с 5 байта длиной 3 байта)=(Пакету со строкой '146901')) Тогда
          Блокировать_Пакет;
        Конец;
    Конец;
КОНЕЦ.
Код по-скрипту:
Код:
BEGIN
  If _gFromServ Then
    Begin
      If Copy(_gBuff,3,2)=HStr('0314') Then
        Begin
          If Not (Copy(_gBuff,5,3)=HStr('146901')) Then
          gBlockPacket;
        End;
    End;
END.
[/HIDE]


PS

Для добавления новых предметов (вещей) в фильтр необходимо добавить строки с проверкой ID. Для удаления ненужного предмета (вещи) достаточно в начале строки с ненужным ID поставить двойной слеш '//' и строка читаться не будет.

Код по-русски:

Код:
НАЧАТЬ_БЛОК
  Если ПАКЕТ_ОТ_СЕРВЕРА Тогда
    Начать_Блок
      Если (Пакет начиная с 3 байта длиной 2 байта)=(Пакету со строкой '0314') Тогда
        Начать_Блок
          Если Не ((Пакет начиная с 5 байта длиной 3 байта)=(Пакету со строкой '146901')) Тогда
          Если Не ((Пакет начиная с 5 байта длиной 3 байта)=(Пакету со строкой '146902')) Тогда
//          Если Не ((Пакет начиная с 5 байта длиной 3 байта)=(Пакету со строкой '206922')) Тогда // строка не читается
          Если Не ((Пакет начиная с 5 байта длиной 3 байта)=(Пакету со строкой '146904')) Тогда
          Если Не ((Пакет начиная с 5 байта длиной 3 байта)=(Пакету со строкой '146907')) Тогда
          Блокировать_Пакет;
        Конец;
    Конец;
КОНЕЦ.
Код по-скрипту:

Код:
BEGIN
  If _gFromServ Then
    Begin
      If Copy(_gBuff,3,2)=HStr('0314') Then
        Begin
          If Not (Copy(_gBuff,5,3)=HStr('146901')) Then
          If Not (Copy(_gBuff,5,3)=HStr('146902')) Then
//          If Not (Copy(_gBuff,5,3)=HStr('206922')) Then // строка не читается
          If Not (Copy(_gBuff,5,3)=HStr('146904')) Then
          If Not (Copy(_gBuff,5,3)=HStr('146907')) Then
          gBlockPacket;
        End;
    End;
END.
PPS

Да, чуть не забыл. Пакеты на лут в разных апдейтах отличаются по длине и расположению байтов. Поэтому проверяйте апдейт. Мой пример сделан на ап 2.2.3 и аналогичные.[/HIDE]

Последний раз редактировалось Likelihood; 14.10.2011 в 13:06.
 
Ответить с цитированием
Сказали спасибо:
Недоступно (03.10.2012), Peskarr (13.04.2012), !BleaK! (19.02.2012), teris (28.11.2011), brrrrb (02.11.2011), Недоступно (24.10.2011), Недоступно (22.10.2011), FaceOff (16.10.2011), бгг (16.10.2011), Недоступно (15.10.2011), Fream4ik (14.10.2011), Ivan200 (14.10.2011), Alineware (14.10.2011), mazila (14.10.2011), Jlo6aH (14.10.2011)


Старый 14.10.2011, 21:36   #2
Ivan200
Нуб
Аватар для Ivan200
OFFLINE
Регистрация: 23.02.2009
Сообщений: 0
Благодарностей:
22 всего
Мнения: + 1658
Репутация: 67

После такого гайда уж точно следует банить тех, кто просит фильтр лута, ибо всё разжёвано настолько подробно, что не нужно никаких навыков для написания скрипта.
 
Ответить с цитированием
Старый 14.01.2012, 14:45   #3
iliamir
Постоялец
Аватар для iliamir
OFFLINE
Регистрация: 01.01.2010
Сообщений: 120
Благодарностей:
180 всего
Мнения: + 4255
Репутация: 541
Отправить сообщение для iliamir с помощью Skype™

На сегодня актуален ещё фильтр?
 
Ответить с цитированием
Старый 19.02.2012, 15:09   #4
андрей1995
Нуб
Аватар для андрей1995
OFFLINE
Регистрация: 21.02.2009
Сообщений: 0
Благодарностей:
2 всего
Репутация: 7

Дарк, разберись пожалуйста с WpF. Я не пойму никак, то ли новый дэф поставили на PwPWaR, что прога процесс хайдит, меняет нейм процесса, то ли просто скрипт устарел для нынешней защиты.
 
Ответить с цитированием
Старый 19.02.2012, 15:26   #5
Тигрь
Крестный отец всех читеров
Аватар для Тигрь
OFFLINE
Регистрация: 02.04.2008
Сообщений: 4,027
Благодарностей:
37,693 всего
Мнения: + 29194
Репутация: 106451

Вот дарку больше заняться нечем как разбираться с WpF.


Я летаю снаружи всех измерений.



 
Ответить с цитированием
Сказали спасибо:
андрей1995 (19.02.2012)
Старый 19.02.2012, 15:46   #6
Nightshade2
Эксперт
Аватар для Nightshade2
OFFLINE
Регистрация: 06.11.2010
Возраст: 40
Сообщений: 1,336
Благодарностей:
738 всего
Мнения: + 4588
Репутация: 2215
Отправить сообщение для Nightshade2 с помощью ICQ Отправить сообщение для Nightshade2 с помощью Skype™

Ща Дарк все разрулит. Возьмет биту, приедет к админам пвпвара и все будет работать работать. Жди

Передаю вещи между расами на фри серверах( phenix, binaris и др). Подробнее в пм.
Антимины, антиинвиз, фильтр и др для пвпвара и других фришек здесь
 
Ответить с цитированием
Старый 19.02.2012, 15:58   #7
андрей1995
Нуб
Аватар для андрей1995
OFFLINE
Регистрация: 21.02.2009
Сообщений: 0
Благодарностей:
2 всего
Репутация: 7

Ну знаешь, с его мозгами, это пяти-минутка. Для него мелочи, а для меня счастье. А если скажет что он именно сделал, то вообще буду в неоплатном долгу...

Ну или помогите хоть кто нибудь... По человечески прошу...
 
Ответить с цитированием
Старый 19.02.2012, 16:11   #8
Nightshade2
Эксперт
Аватар для Nightshade2
OFFLINE
Регистрация: 06.11.2010
Возраст: 40
Сообщений: 1,336
Благодарностей:
738 всего
Мнения: + 4588
Репутация: 2215
Отправить сообщение для Nightshade2 с помощью ICQ Отправить сообщение для Nightshade2 с помощью Skype™

по-человечески:
Там висит новый вмпрот на модуле шифровки траффика. Разобрать его стоит от 3к рублей и выше. Ты хочешь, чтобы Дарк заплатил за тебя? Ему это нахрен не нужно. Не можешь сделать сам - покупай готовые вещи. https://www.rf-cheats.ru/forum/showthread.php?t=124106

Передаю вещи между расами на фри серверах( phenix, binaris и др). Подробнее в пм.
Антимины, антиинвиз, фильтр и др для пвпвара и других фришек здесь
 
Ответить с цитированием
Старый 19.02.2012, 16:14   #9
андрей1995
Нуб
Аватар для андрей1995
OFFLINE
Регистрация: 21.02.2009
Сообщений: 0
Благодарностей:
2 всего
Репутация: 7

Ну вот хотя бы так разъяснили ситуацию. Я просто предполагал что есть просто обход...

Только вот не кажется ли тебе странным, обойти защиту стоит 3к.р а сам логин уже почти с готовым фильтром, скажем грубо, 500р?

Последний раз редактировалось андрей1995; 19.02.2012 в 16:17.
 
Ответить с цитированием
Старый 19.02.2012, 16:26   #10
Тигрь
Крестный отец всех читеров
Аватар для Тигрь
OFFLINE
Регистрация: 02.04.2008
Сообщений: 4,027
Благодарностей:
37,693 всего
Мнения: + 29194
Репутация: 106451

Во первых логин без фильтра, фильтр продается отдельно и о цене ты ничего не знаешь. А во вторых логин купили к примеру 10 человек по 500 рублей, получается 5000 а обойти защиту стоит 3к.р, не кажется ли тебе это странным?

Добавлено через 1 минуту
P.S. синуация была разъяснена еще над твоим глупым постом https://www.rf-cheats.ru/forum/showp...80&postcount=4

Последний раз редактировалось Тигрь; 19.02.2012 в 16:27. Причина: Добавлено сообщение


Я летаю снаружи всех измерений.



 
Ответить с цитированием
Ответ



Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Мир танков | Проект "Армата" | ArcheAge | Black Desert | РФ Онлайн | Айон | Майнкрафт | Браузерные игры
Элдер скролс | Р2 Онлайн | Реквием Онлайн | ПУБГ | Роял Квест | ГТА Санадреас | Контра | Дота 2
Мир кораблей | Лост Арк | Arma2 DayZ mod | The War Z | Карос: Начало | Tera Online
Читы для всех Онлайн-игр