Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Страница 1 из 3 1 2 3 ПоследняяПоследняя
Показано с 1 по 10 из 29
  1. #1
    Аватар для Daniel_Cortez
    "Это не хак, это фича"

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,192
    Репутация:
    2589 ±

    Об исходниках Open SA-MP

    Всем привет.

    Возможно, некоторые из вас уже слышали о таком проекте, как Open SA-MP. Этот проект задумывался, как своего рода замена для SA-MP. В какой-то момент разработчики Open SA-MP оказались неспособны заниматься его развитием, но в сети так и остались исходники проекта.
    Собственно, сами эти исходники можно найти по следующей ссылке:
    Многие утверждают, что исходники Open SA-MP получены на основе обратной разработки SA-MP, но это не совсем так.
    Да, отчасти это правда, что можно понять по некоторым комментариям в коде:
    А здесь, судя по названиям переменных и комментариям к ним, работали декомпилятором Hex-Rays Decompiler:
    Тем не менее, есть косвенные доказательства и того факта, что за основу были взяты оригинальные исходники SA-MP.
    Например, если открыть файл "Open SAMP/amx/amx.h", то можно найти в нём следующий комментарий:Разработчик Pawn изначально пользовался системой контроля версий SVN, которая автоматически добавляла в редактируемые файлы исходного кода дату и время регистрации изменений, а также номер ревизии. Очевидно, что в SA-MP Team тоже использовали SVN.


    Ещё можно кое-что найти в файле "amx.c":
    PHP код:
    op_jump_pri:
            
    // Kye SA-MP Team 9/9/2009 Unsecure opcode
        //PUSH((unsigned char *)cip-code);
        //cip=(cell *)(code+(int)pri);
        //NEXT(cip);
        
    assert(0);
        
    ABORT(amx,AMX_ERR_INVINSTR); 
    Примерно такой текст можно найти в обработчиках для опкодов CALL.PRI и JUMP.PRI. Вместо них поставлены заглушки, поднимающие ошибку времени выполнения в абстрактной машине, что делает эти опкоды нерабочими.
    В комментариях указано, что причина таких заглушек - якобы уязвимость опкодов.
    Действительно, такая уязвимость имела место - лично я не слышал ни об одном случае её применения на практике, но в теории опкоды CALL.PRI и JUMP.PRI могли использоваться для совершения атак (переход на специально подготовленный байт-код за пределами секции кода скрипта).
    Уязвимость была обнаружена после релиза Pawn 3.2 и исправлена в Pawn 3.3 (коммит от 08.12.2008) - уязвимые опкоды исключены из набора инструкций и добавлена статическая проверка байт-кода при его загрузке (в функции VerifyPCode). Похоже, Kalcor тоже решил удалить эти опкоды, поставив на их место заглушки, хотя проверку байт-кода добавить не удосужился (типично), тем самым оставив множество других потенциальных уязвимостей, которые до сих пор используются в сообществе SA-MP как "фичи".
    Если верить комментариям в коде Open SA-MP, исправление было совершено "9/9/2009", т.е. это было после выхода SA-MP 0.2x (20.11.2008) и перед релизом 0.3a (19.10.2009). Всё это подтверждает предположение о том, что Open SA-MP основывается на исходниках SA-MP позднее 0.2x (т.е. 0.3a или одной из бета-версий).

    Что интересно, в сервере SA-MP 0.2x CALL.PRI и JUMP.PRI тоже не работают, но это можно объяснить тем, что Kalcor просто подменил архив на files.sa-mp.com, не меняя дату. Подобная подмена уже имела место после релиза 0.3.7 R2-1.


    Ещё одна интересная деталь:
    PHP код:
        "GetPlayerInterior",                    funcGetPlayerInterior },                    // 105
        
    "SetPlayerAttachedObject",                    funcSetPlayerAttachedObject },                    // 106
        
    "RemovePlayerAttachedObject",                    funcRemovePlayerAttachedObject },                    // 107
        
    "SetPlayerAttachedObject",                    funcSetPlayerAttachedObject },                    // 108
        
    "IsPlayerAttachedObjectSlotUsed"funcIsPlayerAttachedObjectSlotUsed }, 
    Это отрывок таблицы нативных функций в Open SA-MP. Обратите внимание: запись для функции SetPlayerAttachedObject продублирована. Очевидно, это баг, связанный с невнимательностью при copy-paste.
    Если верить SA-MP wiki, функция SetPlayerAttachedObject была добавлена в 0.3c.
    И вот что можно найти, дизассемблировав сервер SA-MP 0.3c R1:
    Всё те же дублирующиеся записи.
    Скорее всего, эта ошибка была допущена кем-то из SA-MP Team ещё до того, как исходники попали в руки к разработчикам Open SA-MP, что говорит о том, что в Open SA-MP за основу были взяты исходники, как минимум, от 0.3c R1 (либо, опять же, одной из предрелизных версий).
    Конечно же, есть возможность того, что проект Open SA-MP на самом деле основывается на исходниках более ранней версии (0.3b или 0.3a), а функция SetPlayerAttachedObject была добавлена методом обратной разработки. Но зачем тогда нужно было повторять баг в "своей реализации"? Всё равно никакого эффекта от этого не будет, виртуальная машина AMX просто проигнорирует попытку повторной регистрации функции. Случайно же повторить точно такую же ошибку практически нереально. Остаётся только один вариант: разработчики Open SA-MP не заметили той опечатки, поскольку код регистрации нативных функций был взят из оригинала SA-MP и к нему особо не присматривались. Либо опечатку заметили, но забыли её исправить - или же просто проигнорировали в силу её незначительности. Кстати говоря, она не исправлена даже в последних версиях SA-MP.


    Подведём итоги. Прямые доказательства вряд ли возможны здесь в принципе, но всё же есть несколько косвенных зацепок, в итоге указывающих на то, что Open SA-MP основывается на оригинальных исходниках SA-MP, как минимум, версии 0.3c или одной из бета-версий.

    В этой теме я привёл исключительно своё мнение, но меня также интересует и ваше.
    Можно ли по исходникам Open SA-MP судить о качестве кода в самом SA-MP? Можно ли на их основе делать какие-либо выводы о работе тех или иных систем - PVar'ов, например? Или, возможно, я в чём-то ошибаюсь в этой статье?
    В любом случае буду рад услышать ваше мнение в комментариях.
    Последний раз редактировалось Daniel_Cortez; 03.01.2017 в 16:27. Причина: update
    Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

  2. 11 пользователя(ей) сказали cпасибо:
    $continue$ (04.08.2016) Desulaid (04.08.2016) JohnConor (19.06.2017) MacMailler (05.08.2016) Osetin (05.08.2016) Processing (11.08.2016) Profyan (04.08.2016) TheMallard (07.08.2016) VeFriger (04.08.2016) [ForD] (12.08.2016) _lizard (04.08.2016)
  3. #2
    Аватар для Profyan
    Пользователь

    Статус
    Оффлайн
    Регистрация
    23.12.2013
    Адрес
    Омск
    Сообщений
    196
    Репутация:
    22 ±
    Если даже он и на основе 0.3c,то какой смысл на основе него судить о коде и принципе работы SA:MP? Есть же в сети исходники более новой версии 0.3d. Смысл копаться в Open SA:MP,кстати с возможно сильно измененным кодом, если можно открыть оригинал(хотя в интернете много лжи)?
    или я что-то не понял и мне стоит прочитать все заново?



    Любой дурак может написать код, понятный компьютеру. Хороший программист пишет код, понятный человеку
    Мартин Фаулер


    Skype
    profan99
    VK
    click




  4. #3
    Аватар для Daniel_Cortez
    "Это не хак, это фича"

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,192
    Репутация:
    2589 ±
    Цитата Сообщение от Profyan Посмотреть сообщение
    Есть же в сети исходники более новой версии 0.3d.
    Это и есть Open SA-MP. Суть в том, что были взяты исходники SA-MP 0.3c, а обратной разработкой добавлены только функции из 0.3d (их можно найти в func_amx.cpp, в самом конце таблицы нативных функций).

    UPD: Только что проверил, там добавлены не все функции 0.3d. Нет функций AttachObjectToObject, IsObjectMoving, IsPlayerObjectMoving, а также отсутствует коллбэк OnPlayerGiveDamage.
    Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

  5. Пользователь сказал cпасибо:
    Profyan (04.08.2016)
  6. #4
    Аватар для $continue$
    Пользователь

    Статус
    Оффлайн
    Регистрация
    02.08.2014
    Адрес
    г. Киров (aka Вятка)
    Сообщений
    1,487
    Репутация:
    276 ±
    0.3d не официальная версия. Скорее всего полученная реверс-инжинирингом. Ну или люди присели, покурили и написали с нуля копию SA-MP
    Официальная версия слитых исходников - 0.2.2x (или что то в этом вроде)

    Цитата Сообщение от Profyan Посмотреть сообщение
    Есть же в сети исходники более новой версии 0.3d
    А, вообще Кую давно пара "вскрыть" исходный код SA-MP. Ибо многие баги бы фиксились pull request'ами.
    Последний раз редактировалось $continue$; 04.08.2016 в 21:11.
    Value your freedom or you will lose it, teaches history. "Don't bother us with politics," respond those who don't want to learn. (c) Richard Stallman

  7. #5
    Аватар для Daniel_Cortez
    "Это не хак, это фича"

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,192
    Репутация:
    2589 ±
    Цитата Сообщение от $continue$ Посмотреть сообщение
    0.3d не официальная версия. Скорее всего полученная реверс-инжинирингом. Ну или люди присели, покурили и написали с нуля копию SA-MP
    Официальная версия слитых исходников - 0.2.2x (или что то в этом вроде)
    Была утечка исходников 0.2x, их тогда adamix продавал. Но это ещё не значит, что не было других утечек и Open SA-MP не основывается на исходниках SA-MP 0.3*.



    Цитата Сообщение от $continue$ Посмотреть сообщение
    А, вообще Кую давно пара "вскрыть" исходный код SA-MP. Ибо многие баги бы фиксились pull request'ами.
    И тогда кто-нибудь форкнет проект, начнёт его активно развивать/продвигать и вся прибыль с проекта пойдёт к нему. Куй ленивый, но не дурак (ну или хотя бы не настолько дурак).
    Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

  8. #6
    Аватар для ziggi
    Проверенный

    Статус
    Оффлайн
    Регистрация
    14.05.2015
    Сообщений
    1,181
    Репутация:
    790 ±
    Если бы основа была 0.3c, то тогда бы им не пришлось реверсить 3D текст. Также в этих исходниках не хватает некоторых функций, реализации ShowPlayerDialog, например.

    Да и вообще, есть ли смысл в знании версии основы Open SA-MP? Исходники есть и кому-то они помогают (например они очень сильно помогают мне в разработке FCNPC).

    Надо понимать, что SA-MP начал разрабатываться более десяти лет назад и, как в любом проекте такого возраста, код и некоторые решения смотрятся довольно странно. Kye сам это понимает, о чём он дал понять в своём сообщении о 0.4. Хотя я не понимаю, почему 0.4 обязательно должна быть полностью переписана, ведь назвать так можно ту версию, в которой будет значительное количество нововведений, как это было с 0.2 и 0.3a.

  9. #7
    Аватар для VVWVV
    ?

    Статус
    Оффлайн
    Регистрация
    09.07.2015
    Сообщений
    731
    Репутация:
    353 ±
    Цитата Сообщение от ziggi Посмотреть сообщение
    Если бы основа была 0.3c, то тогда бы им не пришлось реверсить 3D текст. Также в этих исходниках не хватает некоторых функций, реализации ShowPlayerDialog, например.

    Да и вообще, есть ли смысл в знании версии основы Open SA-MP? Исходники есть и кому-то они помогают (например они очень сильно помогают мне в разработке FCNPC).

    Надо понимать, что SA-MP начал разрабатываться более десяти лет назад и, как в любом проекте такого возраста, код и некоторые решения смотрятся довольно странно. Kye сам это понимает, о чём он дал понять в своём сообщении о 0.4. Хотя я не понимаю, почему 0.4 обязательно должна быть полностью переписана, ведь назвать так можно ту версию, в которой будет значительное количество нововведений, как это было с 0.2 и 0.3a.
    Вы же сами на свой вопрос ответили, говоря о том, что SA-MP разрабатывался 10 лет. Вполне возможно, что его код написан так, что он сам не может разобраться в нём, поэтому и хочет переписать все заново. Вы же знаете его, о его ошибках и недочётах, которые он совершает уже очень длинный срок. Впрочем, не исключаю тот факт, что действительно существует какой-то "комитет", который решает о жизни новых версий.

    Данные исходники действительно помогают, но из-за недостатка некоторых функций приходится самому заглядывать в код.
    Последний раз редактировалось VVWVV; 06.08.2016 в 23:43.

  10. #8
    Аватар для ziggi
    Проверенный

    Статус
    Оффлайн
    Регистрация
    14.05.2015
    Сообщений
    1,181
    Репутация:
    790 ±
    Цитата Сообщение от VVWVV Посмотреть сообщение
    Вы же сами на свой вопрос ответили, говоря о том, что SA-MP разрабатывался 10 лет назад. Вполне возможно, что его код написан так, что он сам не может разобраться в нём, поэтому и хочет переписать все заново. Вы же знаете его, о его ошибках и недочётах, которые он совершает уже очень длинный срок. Впрочем, не исключаю тот факт, что действительно существует какой-то "комитет", который решает о жизни новых версий.
    Не думаю, что есть проблема в непонимании собственного кода, ибо весь код выглядит очень простым.

  11. #9
    Аватар для Daniel_Cortez
    "Это не хак, это фича"

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,192
    Репутация:
    2589 ±
    Цитата Сообщение от ziggi Посмотреть сообщение
    Если бы основа была 0.3c, то тогда бы им не пришлось реверсить 3D текст.
    Да, действительно. Я проверил тот листинг в class_text3dlabels.cpp, функция C3DTextLabels::Create3DTextLabel располагается по адресу 0047ABE0, что соответствует версии 0.3c R2-2.
    Тем не менее, факт воссоздания с нуля это ещё не доказывает. Скорее всего, у них были исходники от 0.3c R1 и они просто синхронизировали изменения в реализации 3D-текста, произошедшие в R2. Вполне сходится с фактом дублирования SetPlayerAttachedObject - этот баг появился как раз в 0.3c R1 и, как я уже говорил ранее, если бы эта функция тоже добавлялась в Open SA-MP реверсингом, разработчики не могли бы не заметить то дублирование и у них не было бы ни одной причины намеренно повторять тот же самый баг в своей реализации.


    Цитата Сообщение от ziggi Посмотреть сообщение
    Также в этих исходниках не хватает некоторых функций, реализации ShowPlayerDialog, например.
    А это что?
    Btw, я уже говорил об отсутствующих функциях, но только из 0.3d.


    Цитата Сообщение от ziggi Посмотреть сообщение
    Да и вообще, есть ли смысл в знании версии основы Open SA-MP? Исходники есть и кому-то они помогают (например они очень сильно помогают мне в разработке FCNPC).
    Есть, чтобы знать, какие части исходников относятся к оригиналу (SA-MP), а какие были воссозданы.
    Иначе, если написать статью о том или ином функционале SA-MP, опираясь на исходники Open SA-MP, найдутся те, кто попытается поставить весь материал статьи под сомнение, аргументируя тем, что описываемый функционал добавлен разрабами Open SA-MP и нет никакой гарантии того, что он реализован точно так же, как в оригинале.
    Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

  12. #10
    Аватар для Nexius_Tailer
    Пользователь

    Статус
    Оффлайн
    Регистрация
    04.01.2015
    Адрес
    Гомель, Беларусь
    Сообщений
    547
    Репутация:
    158 ±
    Цитата Сообщение от Daniel_Cortez Посмотреть сообщение
    Есть, чтобы знать, какие части исходников относятся к оригиналу (SA-MP), а какие были воссозданы.
    Иначе, если написать статью о том или ином функционале SA-MP, опираясь на исходники Open SA-MP, найдутся те, кто попытается поставить весь материал статьи под сомнение, аргументируя тем, что описываемый функционал добавлен разрабами Open SA-MP и нет никакой гарантии того, что он реализован точно так же, как в оригинале.
    Ну так выяснить это наверняка всё равно невозможно
    Не хотите постоянно проверять обновления моих скриптов?
    Подключите его последним, после всех остальных
    Nexius's Update Checker

 

 
Страница 1 из 3 1 2 3 ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

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