Codeby Games Writeup: "Автокража" (codeby.games)

  • Название: Автокража
  • Категория: Разное
  • Платформа: codeby.games

Добрый день друзья. Хочу поделиться с вами решением таска "Автокража".

Автокража.PNG


На первый взгляд не очень понятно что надо сделать и где начинать искать. Но давайте начнем по порядку. В тексте задания упоминается какая то локация Bone Country, если погуглить, то станет понятно что это локация из игры Grand Theft Auto: San Andreas.

BoneCounty-GTASA-Map.jpg


У GTA:SA есть мультиплеерная составляющая - SAMP. Неужели это отдельный игровой сервер где надо найти ctf флаг? Да, это он
samp codeby.PNG


И так, у нас есть игровой сервер с кучей машин, но нам надо найти одну единственную. Из описания задания у нас есть подсказка, что машина имеет инфернальное название. Если посмотреть список техники из GTA:SA, то можно найти машину с названием Infernus, ну собственно она нам и нужна.

infernus.PNG


Теперь остается вопрос, где ее искать на такой большой площади? Если вы вдруг знакомы с лором и пасхалками из GTA:SA, то наверняка поняли эту отсылку про инопланетян.

image.jpg


Собственно в Bone Country только 2 места связанных с НЛО, это военная база и придорожная закусочная с летающей тарелкой. Ну собственно место для поиска понятно. Но это слишком просто, а задание помечено как среднее, значит давайте решим его более сложным способом.

Представим, что вы нормальный, адекватный человек и никогда не играли в GTA и все это время тратили с пользой для общества. Мы можем написать скрипт, который будет опрашивать всю технику в поле загрузки игрока и искать необходимую машину.
Благо, за все это время в для GTA:SA был разработан мод MoonLoader, который позволяет загружать свои lua-скрипты.

И так, нам понадобится, сам MoonLoader, библиотека SAMPFUNC, версия SAMP 0.3.7-R3(Это важно) и версия GTA:SA v1.0.0 US(Это тоже важно)

И если после установки вы видите такой загрузочный экран, значит все установлено верно
2024-07-22_21-56-20.png


Пишем скрипт такого содержания (Не смотрите что у код оформлен как Perl, просто для lua нет оформления. А так хотя бы красочнее)

Perl:
wm = require 'windows.message'
font_flag = require('moonloader').font_flag

font = renderCreateFont('Arial', 11, font_flag.SHADOW + font_flag.BOLD)
local infernusModelId = 411 -- ID модели Infernus в GTA:SA
local vrender = false  -- переменная для переключения отображения

function main()
    if not isSampLoaded() or not isSampfuncsLoaded() then return end
    while not isSampAvailable() do wait(0) end

    addEventHandler('onWindowMessage', function(msg, wparam, lparam)
        if msg == wm.WM_KEYDOWN or msg == wm.WM_SYSKEYDOWN then
            if wparam == VK_F3 then
                vrender = not vrender
            end
        end
    end)

    while true do
        wait(0)
        if vrender then
            local vehicles = getAllVehicles()  -- Получаем список всех транспортных средств в игре
            for i, vehicle in ipairs(vehicles) do
                if getCarModel(vehicle) == infernusModelId and isCarOnScreen(vehicle) then
                    displayInfernusInfo(vehicle)  -- Отображение информации о Infernus
                end
            end
        end
    end
end

function displayInfernusInfo(vehicle)
    -- Получаем координаты транспортного средства
    local cx, cy, cz = getCarCoordinates(vehicle)
    -- Конвертируем координаты в позицию на экране
    local x, y = convert3DCoordsToScreen(cx, cy, cz)
    -- Строка, которую хотим отобразить
    local model = "Infernus (" .. tostring(getCarModel(vehicle)) .. ')'
    -- Получаем длину и высоту текста для отрисовки
    local length = renderGetFontDrawTextLength(font, model, true)
    local height = renderGetFontDrawHeight(font)
    -- Установим цвет текста
    local textcolor = 0xFF00B811 -- Зелёный
    if getCarDoorLockStatus(vehicle) == 2 then
        textcolor = 0xFFEC0000 -- Красный, если двери заблокированы
    end
    -- Отрисовываем текст
    renderFontDrawText(font, model, x - (length + 5) / 2, y - (height + 7) / 2, textcolor, true)
end


И так, скрипт готов. Скрипт активируется на клавишу F3. Сохраняем его в папку и заходим на сервер. Быстрее всего будет найти машину с воздуха, поэтому отправляемся в аэропорт Las Venturas и садимся в вертолет. Убеждаемся что наш скрипт работает, так как Infernus рядом с аэропортом прекрасно виден.

2024-07-23_21-50-29.png


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

2024-07-23_21-53-42.png


Похоже это наш пациент. Подходим к нему ближе и да, это он, а сверху флаг. Осталось только вбить его в форму и задание выполнено

2024-07-23_21-54-14.png
 
Последнее редактирование:

yetiraki

Green Team
07.02.2023
60
105
BIT
373
Офигенно, а я просто докатил до туда =))
Кстати, на wmware отлично запускается Win7 вместе с GTA:SA =)
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!