В первой части мы с вами вооружились инструментом WP, рассмотрели интерфейс редактора ScriptTester,
научились запускать скрипты, загружать их и сохранять в нужном формате. теперь пора научиться
добывать исходники скриптов для игры darkorbit, ведь пока собственных скриптов мы писать не
научились. Наверняка каждый из вас успел скачать файлы в формате .xml такие как:
autorocket.xml
antistealth.xml
Ship_Info.xml
PVPHunter_Titule.xml
Ship_Change.xml
DO_Lokator.xml
DO_Tool_UFO.xml
DO_Tool_USA.xml
wpbox.xml
ibot.xml
Если у вас нет этих файлов, то можете пробежаться по соответствующим темам форума и скачать их.
Если же лазить по темам лень, то можете скачать эти файлы отсюда:
[Ссылки могут видеть только зарегистрированные пользователи. ]
Все эти файлы понадобятся нам для дальнейшего обучения. Но проблема в том, что это компилированные
файлы (т.е. их нельзя редактировать). Конечно же данный факт нас не устроит. Было бы хорошо если бы
авторы создавшие данные скрипты сами выложили исходники. Но они жадничают и категорически отказываются
выкладывать исходники. Ну чтож, флаг им руки, мы пойдём другим путём и сами раздобудем исходники.
Сразу скажу, будет сложно, но настоящих хакеров ведь ничто не остановит.
В качестве примера рассмотрим файл ibot.xml. Кто не помнит, это кряк для бота IBot 2.34. Спросите
почему именно этот файл выбран в качестве примера, отвечу. Во-первых, за выкладывание исходника
данного скрипта я уже получил люлей, а как известно из уголовного кодекса, дважды за одно и то же
преступление не наказывают. Кроме того данный скрипт меньше других по объёму (количеству строк в коде).
Итак, вот содержание компилируемого файла ibot.xml:
----------------------------------------------------------------
<?xml version="1.0"?><program><var pos="1:5"><ident text="i" pos="1:6"/><type text="string" pos="1:14"/>
</var><compoundstmt pos="2:1"><ifstmt pos="3:1"><expr pos="3:4" pos1="3:18"><dsgn pos="3:4">
<node text="_gAbsNumPkt" pos="3:15"/></dsgn><op text="=" pos="3:17"/><number text="1" pos="3:18"/>
</expr><thenstmt pos="3:25"><assignstmt pos="3:25"><dsgn pos="3:25"><node text="i" pos="3:26"/></dsgn>
<expr pos="3:30" pos1="3:36"><dsgn pos="3:30"><node text="_gBuff" pos="3:36"/></dsgn></expr></assignstmt>
</thenstmt><elsestmt pos="3:42"><assignstmt pos="3:42"><dsgn pos="3:42">
<node text="_gOutBuff" pos="3:51"/></dsgn><expr pos="3:54" pos1="3:62"><dsgn pos="3:54">
<node text="Hstr" pos="3:58"/><expr pos="3:59" pos1="3:61"><string text="''" pos="3:61"/>
</expr></dsgn></expr></assignstmt></elsestmt></ifstmt><callstmt pos="5:1"><dsgn pos="5:1">
<node text="delete" pos="5:7"/><expr pos="5:8" pos1="5:9"><dsgn pos="5:8"><node text="i" pos="5:9"/>
</dsgn></expr><expr pos="5:10" pos1="5:11"><number text="1" pos="5:11"/></expr>
<expr pos="5:12" pos1="5:13"><number text="8" pos="5:13"/></expr></dsgn></callstmt>
<callstmt pos="6:1"><dsgn pos="6:1"><node text="insert" pos="6:7"/><expr pos="6:8" pos1="6:18">
<string text="'52799452'" pos="6:18"/></expr><expr pos="6:19" pos1="6:20"><dsgn pos="6:19">
<node text="i" pos="6:20"/></dsgn></expr><expr pos="6:21" pos1="6:22"><number text="1" pos="6:22"/>
</expr></dsgn></callstmt><ifstmt pos="7:1"><expr pos="7:4" pos1="7:18"><dsgn pos="7:4">
<node text="_gAbsNumPkt" pos="7:15"/></dsgn><op text="=" pos="7:17"/><number text="1" pos="7:18"/>
</expr><thenstmt pos="7:24"><assignstmt pos="7:24"><dsgn pos="7:24"><node text="_gOutBuff" pos="7:33"/>
</dsgn><expr pos="7:37" pos1="7:38"><dsgn pos="7:37"><node text="i" pos="7:38"/></dsgn>
</expr></assignstmt></thenstmt></ifstmt></compoundstmt><types/></program>67EA1B887A592C02
-------------------------------------------------------------------
Ну чтож наши мучения начинаются. Начинаем двигаться от начала кода и до конца.
Строчку
<?xml version="1.0"?><program>
мы пропускаем, т.к. она стандартная во всех компилируемых файлах .xml и в составлении исходного кода
не участвует.
Далее идёт уже знакомое нам служебное слово var. Вот именно отсюда и начинается составление исходного
кода. Pos означает положение курсора по горизонтали и вертикали в исходном коде. Т.е. в данном случае
переменная i будет расположена в исходном коде в первой строчке и будет пятым символом по счёту.
Ident text как вы уже поняли означает название переменной в исходном коде. Type text - тип переменной
в исходном коде.
Таким образом первую строчку исходного кода мы расшифровали, она будет выглядеть следующим образом:
1) var i:string;
Тип string означает что это строка. Т.е. мы завели переменную i строкового типа.
С первой строчкой мы разобрались, здесь нет ничего сложного. Продолжим составлять исходник.
<compoundstmt pos="2:1">
Как видим вторая строчка исходника состоит всего из одного слова begin. Это опять же знакомое нам
служебное слово, которое означает начало блок-кода. Запомните, что слово begin является парным, т.е.
у каждого открывающего слова begin, должно быть закрывающее слово end.
2) begin
<ifstmt pos="3:1">
"ifstmt" означает условный оператор if (на русский язык переводится "если")
<op text="=" pos="3:17"/>
"ор" означает логическую операцию, в нашем случае операцию сравнения.
<thenstmt pos="3:25">
"thenstmt" означает условный оператор then (на русский язык переводится "тогда")
<elsestmt pos="3:42">
"elsetmt" озачает условный оператор else (на русский язык переводится "иначе")
<node text="Hstr" pos="3:58"/>
Hstr - это новая для нас функция. Ок, залезем в справочник ../wpfnew/doc и посмотрим что она
обозначает. Вот выписка:
HStr(str,[,len]) : buf; - аналогично 'HStr' в WPS;
собрать пакет из ascii шестнадцатеричного вида.
пакет задается в виде шестнадцатеричных литер с пробелом либо без него
второй аргумент это длина пакета, неуказанные литеры дополняются нулями.
Ок, пополним свой багаж знаний данной функцией и продолжим обучение.
Мы собрали достаточно данных, чтобы расшифровать 3-ю строчку исходного кода:
3) if _gAbsNumPkt = 1 then i:=_gBuff else _gOutBuff:=Hstr('');
Что следует объяснить в этой строчке? Во-первых нужно отличать операции "=" и ":=".
"=" - это логическая операция сравнения
":=" - это математическая операция присваивания (аналог в математике с=15)
Описание незнакомых для нас функций скрипта берём из справочника:
_gBuff : str - входящий буфер (строка) , в нем приходит пакет в скрипты.
_gOutBuff : str - исходящий буфер, это пакет который уйдет дальше по назначению.
_gAbsNumPkt :int - абсолютный номер пакета, нумеруется с 1.
Третью строчку можно расшифровать так: если абсолютный номер пакета равен 1, то переменной i
мы присваиваем содержание входящего буфера, иначе выходящий буфер формируем из пустых значений.
С третьей строчкой разобрались. Продолжаем расшифровку.
<callstmt pos="5:1">
Как видим четвёртая сточка исходного кода это просто пробел, ну чтож, нам же проще, расшифровываем
пятую строчку.
"callstmt" означает вызов функции. Какая именно функция вызывается смотрим далее по коду.
<node text="delete" pos="5:7"/>
А вот и она. Думаю функцию delete все знают. Здесь лишь отмечу её особенности. Она имеет три
параметра:
1-ый параметр это строка, которую нужно отредактировать
2-ой параметр указывает с какого именно символа нужно начать удаление
3-ий параметр указывает сколько символов нужно удалить
Таким образом 5-ая строка исходного кода будет выглядеть следующим образом:
5) delete(i,1,8);
Шестую строчку расшифровываем аналогично пятой.
<node text="insert" pos="6:7"/>
Вот описание функции insert из справочника:
Insert(sub, s, idx); - Вставляет подстроку 'sub' в строку 's' начиная с 'idx' позиции.
Строка и субстрока могут быть бинарным буфером/пакетом.
Пример:
s := '123456';
Insert('zz',s,3);
//теперь s = '12zz3456';
Ну что ж, пополнили свой багаж знаний новой функцией insert и продолжим обучение.
6) insert('52799452',i,1);
В седьмой строчке нам не встречается ничего нового, поэтому просто приведу её расшифровку:
7) if _gAbsNumPkt=1 then _gOutBuff:=i;
В восьмой (последней строчке) будет всего лишь одно служебное слово end (означающее конец программы).
8) end.
Ну вот мы декомпилировали .xml файл и получили исходник, который можно будет в дальнейшем редактировать.
Вот результат нашей работы:
-------------------------------------------------------
var i: string;
begin
if _gAbsNumPkt = 1 then i:=_gBuff else _gOutBuff:=Hstr('');
delete(i,1,8);
insert('52799452',i,1);
if _gAbsNumPkt=1 then _gOutBuff:=i
end.
-------------------------------------------------------
Теперь самое время проверить работоспособность нашего скрипта. Вставляем полученный исходник
в ScriptTester. Сохраняем скрипт в формате .fsc и цепляем наш скрипт к боту IBot 2.34. Настройки
уже обсуждались в соответствующей теме, но на всякий случай приведу настройки ещё раз:
вот скрины по настройке
[Ссылки могут видеть только зарегистрированные пользователи. ]
[Ссылки могут видеть только зарегистрированные пользователи. ]
На втором скрине в пункте 3 нужно указать путь к скрипту. Удалить посторонние скрипты.
Проверить файл hosts (C:\WINDOWS\system32\drivers\etc), если есть
строка 127.0.0.1 profibot.net - удалить её.
И не забывайте что антивирусы не дружат с WP.
На этом вторую часть заканчиваю. И даю вам домашнее задание. Да, да, а вы как хотели. В качестве
домашнего задания будет получение исходника для файла wpbox.xml. Оценок 1,2,3 и 4 у нас не будет,
так что радуйтесь двоичники. Однако оценка пять будет реализована в качестве спасибки.
Т.е. как только вы выполните домашнее задание, вам нужно будет отписаться в теме:
"домашнее задание выполнил, ответ скинул в личку". Я проверю ваше творение. И если домашнее задание
выполнено без ошибок вы дорогой мой ученик, получаете от меня наивысшую оценку (спасибку).
Ну вот вроде бы и всё что я хотел сказать в данной главе. Изучайте, экспериментируйте и ждите следующих глав.
Было бы хорошо если бы
авторы создавшие данные скрипты сами выложили исходники. Но они жадничают и категорически отказываются
выкладывать исходники. Ну чтож, флаг им руки, мы пойдём другим путём и сами раздобудем исходники.
У нас исходники даже никто не просил
В любом случае - дерзайте
Ничего особо трудного нет.
Ну если так хотите, может и выложу один исходничек Подумать надо
________________
Я - часть той силы, что вечно хочет зла и вечно совершает благо.
Если вы думаете, что став модером, вы не сможете тролить,вы ошибаетесь, теперь вы тролите всех своим существованием
случайность - визитная карточка бога.
Жизнь слишком коротка, чтобы волноваться о том, что о тебе подумают или скажут люди
Кстати совсем забыл сказать о сроках выполнения домашнего задания. Код оказался немножко сложнее чем я предполагал. Т.е. там используются не только функции из справочника, но функции delphi, которых в справочнике нет. Отсутствующие функции вам придётся искать в интернете, а это дополнительные затраты времени. Поэтому на выполнение задания даю вам неделю, этого времени достаточно чтобы получить исходник. В любом случае, даже если вы не сможете/не захотите выполнить домашнее задание, через неделю я опубликую третью часть серии "Изучаем скрипты WP" и там будет всё объяснено.
Кстати совсем забыл сказать о сроках выполнения домашнего задания. Код оказался немножко сложнее чем я предполагал. Т.е. там используются не только функции из справочника, но функции delphi, которых в справочнике нет. Отсутствующие функции вам придётся искать в интернете, а это дополнительные затраты времени. Поэтому на выполнение задания даю вам неделю, этого времени достаточно чтобы получить исходник. В любом случае, даже если вы не сможете/не захотите выполнить домашнее задание, через неделю я опубликую третью часть серии "Изучаем скрипты WP" и там будет всё объяснено.
лучше дай дз на скрипт со старого ибота! 185 или другой