SA:MP Открытый исходный код ARZ Market 3.55

Pinel

Активный
Автор темы
112
44
Не знаю, кому это нужно будет, но мне нейронка декомпилировала за пару промтов это. Если кому-то нужно отредактировать какие-то функции в этом скрипте, либо вы хотите сделать с ним вообще что-либо - пишите в этой теме, нейронка всё за вас сделает. Может кому-то расширить текст надо, поменять цвет арз маркета или еще что-то

Что АРЗ Маркет собирает о вас:
  • ник игрока;
  • сервер Arizona, на котором он играет;
  • номер своей лавки LavkaUid;
  • список предметов на продаже;
  • количество каждого предмета;
  • цены продажи;
  • список предметов на скупке;
  • количество и цены скупки;
  • версию ArzMarket;
  • данные авторизации API: authKey, authToken, authClient, myServerId;
  • торговую статистику: предмет, цена, количество, действие покупка/продажа, сервер;
  • некоторые данные аккаунта ArzMarket/премиума и UID, связанные с авторизацией и опытом;
  • beta-ключ при проверке Beta-версии.


Также список уязвимостей, большинство из них невозможно пофиксить, в том числе и заход с забаненного ИП с заменёнными данными, чтобы заблокировать любого из игроков в скрипте:

  • Marketplace доверяет данным клиента. Клиент сам формирует username, serverId, LavkaUid, товары, количество и цены, после чего отправляет JSON на /api/insertMarketplace. В самом запросе не видно отдельной подписи этих данных. Если backend не перепроверяет их, возможны поддельные или испорченные записи Marketplace.
  • Идентичность игрока частично строится на данных клиента. UID извлекается из обычного сообщения /id, сохраняется локально в info_user_uid.txt, а затем используется вместе с ником в запросах ArzMarket. Это опасная архитектура, если сервер считает присланный nickname[UID] доказательством личности без дополнительной проверки.
  • Привязка аккаунта также отправляет клиентские gameNickname и UID:
    gameNickname = realPlayerName .. "[" .. myUid .. "]".
    Защита здесь зависит от того, насколько надёжно backend проверяет keyAccept, одноразовость токена и соответствие игрового аккаунта.
  • Авторизация Marketplace находится в клиенте. При GET отправляются authKey, authToken, serverId, authClient и версия скрипта. Всё, что хранится и формируется на клиенте, пользователь технически может изменить. Поэтому backend не должен доверять этим значениям без серверной проверки.
  • Блокировка/обход RKN частично управляется локальным флагом bannedByRkn. Его можно даже переключить командой /rknfix. Этот флаг также меняет HTTP-поведение клиента. Если какая-то серверная безопасность зависит от этого локального значения, это слабое место. Пока похоже, что это скорее сетевой fallback, а не настоящий бан пользователя.
  • Marketplace имеет несколько backend/fallback-хостов. При проблемах клиент переключается между основным API, reserve API и Vercel-вариантом. Это увеличивает поверхность атаки: у всех зеркал должны быть одинаковые правила авторизации, фильтрации и блокировок. Иначе более слабый резервный endpoint может обходить защиту основного.
  • Очистка Marketplace тоже инициируется клиентом. Клиент отправляет пустой объект лавки на тот же /api/insertMarketplace. Если backend недостаточно жёстко связывает запись лавки с её настоящим владельцем, теоретически возникает риск удаления/перезаписи чужих данных.
  • Статистика формируется на клиенте. В коде есть отдельная отправка торговой статистики с сервером, действием, количеством и версией. Если backend использует её для рейтингов, опыта или аналитики и не валидирует независимо, она потенциально недостоверна.
  • addExp выглядит особенно интересно с точки зрения доверия. Клиент сам формирует URL из realPlayerName и локально сохранённого UID и отправляет POST на reserve-api.arz.market/api/addExp/.... По клиенту невозможно понять, какие дополнительные проверки выполняет сервер. Это один из первых endpoint'ов, которые стоило бы проверять владельцу сервиса.
  • Автообновление не показывает проверки цифровой подписи скачанного Lua. Loader получает JSON с updateurl, скачивает новый файл, выгружает старый и запускает скачанный. Если источник обновлений или цепочка доставки будет скомпрометирована, последствия значительно серьёзнее обычной ошибки Marketplace. HTTPS помогает при передаче, но это не замена подписи обновления.
  • Beta-ключ хранится обычным текстовым файлом на диске. Loader читает его и использует для запросов к серверу разработчика. Это не обязательно критическая уязвимость, но секрет, доступный клиенту, нельзя считать по-настоящему секретным.
  • Любые client-side premium/feature flags нельзя считать защитой. Пользователь полностью контролирует Lua и локальный INI. Настоящая проверка Premium, банов и доступа должна происходить на backend. По коду видно, что часть Premium действительно проверяется сервером, но насколько полно, без серверного кода определить невозможно.


    Ну и да, можно спокойно регулировать вообще весь рынок цен какого-либо из товаров лишь при помощи подмена цен. Это хоть и долго будет, но очень-очень даже просто. Тем самым вы можете взвинтить ценник любого из предметов
 

Вложения

  • #ArzMarket[3_55].lua
    1.4 MB · Просмотры: 44
Последнее редактирование:

.Makarov.

Известный
200
37
А что мешало сделать нормальную кодировку русских букавок, как это делает обычный декомпилятор? 🤔
 

Вложения

  • #ArzMarket[3_55].lua
    1.2 MB · Просмотры: 25

.Makarov.

Известный
200
37
та у меня вроде нормаьно там всё
Лишь вроде. На русский алфавит не очень похоже 🤔
1787413477609.png
 

Pinel

Активный
Автор темы
112
44
Лишь вроде. На русский алфавит не очень похоже 🤔Посмотреть вложение 299236
ну так это ж нейронка делала. Факт в том, что оно работает. Если хочешь, закинь в любую нейронку бесплатную, она исправит. Не особо критично как-то

Лишь вроде. На русский алфавит не очень похоже 🤔Посмотреть вложение 299236
я это делал кодексом лишь для того, чтобы понять, в чем причина моего бана и как работает бан. Причину я не нашел. Решил вам закинуть.

Не у всех есть платный кодекс, поэтому декомпилировать без него будет трудно. А вот гвен или дип сик есть у всех, и они бесплатные, и они запросто могут исправить это недоразумение.

Публиковал для тех, кто хочет изменить свой арз маркет, но не хочет тратить долго времени на декомпиляцию. Это как обычный исходник, объект для опытов
 
Последнее редактирование:
  • Ха-ха
  • Нравится
Реакции: Tema05 и 0x18d036

xor

Активный
252
95
Идентичность игрока частично строится на данных клиента. UID извлекается из обычного сообщения /id, сохраняется локально в info_user_uid.txt, а затем используется вместе с ником в запросах ArzMarket. Это опасная архитектура, если сервер считает присланный nickname[UID] доказательством личности без дополнительной проверки.
Это получается можно банить доступ к маркетплейсу другим людям? Удобно
 

ToruHonda

Известный
36
14
ну так это ж нейронка делала. Факт в том, что оно работает. Если хочешь, закинь в любую нейронку бесплатную, она исправит. Не особо критично как-то


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

Не у всех есть платный кодекс, поэтому декомпилировать без него будет трудно. А вот гвен или дип сик есть у всех, и они бесплатные, и они запросто могут исправить это недоразумение.

Публиковал для тех, кто хочет изменить свой арз маркет, но не хочет тратить долго времени на декомпиляцию. Это как обычный исходник, объект для опытов
Как бан смог обойти в лс написать можешь? Либо сюда в тему
 

elyrin

Известный
302
189
Не знаю, кому это нужно будет, но мне нейронка декомпилировала за пару промтов это. Если кому-то нужно отредактировать какие-то функции в этом скрипте, либо вы хотите сделать с ним вообще что-либо - пишите в этой теме, нейронка всё за вас сделает. Может кому-то расширить текст надо, поменять цвет арз маркета или еще что-то

Что АРЗ Маркет собирает о вас:
  • ник игрока;
  • сервер Arizona, на котором он играет;
  • номер своей лавки LavkaUid;
  • список предметов на продаже;
  • количество каждого предмета;
  • цены продажи;
  • список предметов на скупке;
  • количество и цены скупки;
  • версию ArzMarket;
  • данные авторизации API: authKey, authToken, authClient, myServerId;
  • торговую статистику: предмет, цена, количество, действие покупка/продажа, сервер;
  • некоторые данные аккаунта ArzMarket/премиума и UID, связанные с авторизацией и опытом;
  • beta-ключ при проверке Beta-версии.


Также список уязвимостей, большинство из них невозможно пофиксить, в том числе и заход с забаненного ИП с заменёнными данными, чтобы заблокировать любого из игроков в скрипте:

  • Marketplace доверяет данным клиента. Клиент сам формирует username, serverId, LavkaUid, товары, количество и цены, после чего отправляет JSON на /api/insertMarketplace. В самом запросе не видно отдельной подписи этих данных. Если backend не перепроверяет их, возможны поддельные или испорченные записи Marketplace.
  • Идентичность игрока частично строится на данных клиента. UID извлекается из обычного сообщения /id, сохраняется локально в info_user_uid.txt, а затем используется вместе с ником в запросах ArzMarket. Это опасная архитектура, если сервер считает присланный nickname[UID] доказательством личности без дополнительной проверки.
  • Привязка аккаунта также отправляет клиентские gameNickname и UID:
    gameNickname = realPlayerName .. "[" .. myUid .. "]".
    Защита здесь зависит от того, насколько надёжно backend проверяет keyAccept, одноразовость токена и соответствие игрового аккаунта.
  • Авторизация Marketplace находится в клиенте. При GET отправляются authKey, authToken, serverId, authClient и версия скрипта. Всё, что хранится и формируется на клиенте, пользователь технически может изменить. Поэтому backend не должен доверять этим значениям без серверной проверки.
  • Блокировка/обход RKN частично управляется локальным флагом bannedByRkn. Его можно даже переключить командой /rknfix. Этот флаг также меняет HTTP-поведение клиента. Если какая-то серверная безопасность зависит от этого локального значения, это слабое место. Пока похоже, что это скорее сетевой fallback, а не настоящий бан пользователя.
  • Marketplace имеет несколько backend/fallback-хостов. При проблемах клиент переключается между основным API, reserve API и Vercel-вариантом. Это увеличивает поверхность атаки: у всех зеркал должны быть одинаковые правила авторизации, фильтрации и блокировок. Иначе более слабый резервный endpoint может обходить защиту основного.
  • Очистка Marketplace тоже инициируется клиентом. Клиент отправляет пустой объект лавки на тот же /api/insertMarketplace. Если backend недостаточно жёстко связывает запись лавки с её настоящим владельцем, теоретически возникает риск удаления/перезаписи чужих данных.
  • Статистика формируется на клиенте. В коде есть отдельная отправка торговой статистики с сервером, действием, количеством и версией. Если backend использует её для рейтингов, опыта или аналитики и не валидирует независимо, она потенциально недостоверна.
  • addExp выглядит особенно интересно с точки зрения доверия. Клиент сам формирует URL из realPlayerName и локально сохранённого UID и отправляет POST на reserve-api.arz.market/api/addExp/.... По клиенту невозможно понять, какие дополнительные проверки выполняет сервер. Это один из первых endpoint'ов, которые стоило бы проверять владельцу сервиса.
  • Автообновление не показывает проверки цифровой подписи скачанного Lua. Loader получает JSON с updateurl, скачивает новый файл, выгружает старый и запускает скачанный. Если источник обновлений или цепочка доставки будет скомпрометирована, последствия значительно серьёзнее обычной ошибки Marketplace. HTTPS помогает при передаче, но это не замена подписи обновления.
  • Beta-ключ хранится обычным текстовым файлом на диске. Loader читает его и использует для запросов к серверу разработчика. Это не обязательно критическая уязвимость, но секрет, доступный клиенту, нельзя считать по-настоящему секретным.
  • Любые client-side premium/feature flags нельзя считать защитой. Пользователь полностью контролирует Lua и локальный INI. Настоящая проверка Premium, банов и доступа должна происходить на backend. По коду видно, что часть Premium действительно проверяется сервером, но насколько полно, без серверного кода определить невозможно.


    Ну и да, можно спокойно регулировать вообще весь рынок цен какого-либо из товаров лишь при помощи подмена цен. Это хоть и долго будет, но очень-очень даже просто. Тем самым вы можете взвинтить ценник любого из предметов
а зачем это нужно
 

pewpewpewpew

Известный
Модератор
817
259
типы жуков и смех ставят, вот пусть сами в коде ответ и ищут. Я никому говорить не буду
ну правильно, зачем объяснять решение, когда можно загадочно молчать и делать вид, будто там технология уровня наса. великие знания должны оставаться у великих людей. мы тебя не потревожим, ты только никому не рассказывай, а то такое интеллектуальное ноу-хау нельзя просто так раздавать направо и налево.
 
  • Нравится
Реакции: Sargon

Pinel

Активный
Автор темы
112
44
ну правильно, зачем объяснять решение, когда можно загадочно молчать и делать вид, будто там технология уровня наса. великие знания должны оставаться у великих людей. мы тебя не потревожим, ты только никому не рассказывай, а то такое интеллектуальное ноу-хау нельзя просто так раздавать направо и налево.
да
 

elyrin

Известный
302
189
нет конечно
типы жуков и смех ставят, вот пусть сами в коде ответ и ищут. Я никому говорить не буду
я думаю у каждого есть доступ к нейросети чтобы это узнать, или если у тебя хотяб двухзначное iq, то это также будет не сложно
да и там копать даже нечего, просто фрейм долбаеб делает костыли вместо встроенных функций в луашке