logic 51 Опубликовано: 15 июня, 2022 (изменено) как пользоваться: для входа в меню bios нажмите alt при загрузке для установки пароля bios>password(текущий пароль)>set password вводите пароль два раза пароль можно выключить и он будет нужен только для входа в меню password он может блокировать меню или загрузку в цело пароль захеширован хоть и храниться в nbt, владельцы варпов могут быть спокойны также вы можете перезагрузить компьютер без появления надписи bios menu(computer.shutdown("fast")) или сразу в меню (computer.shutdown("bios")) если у вас стоит мод для openOS() то вы можете использовать reboot fast и reboot bios прямо в shell также из под функций присутствует: url boot (Internet>Url boot) возможность запуска openOS через интернет(Internet>openOSonline) так же биос умеет подгружать утилиты с github репозитория, которых в скором времени там будет много password возможность загрузки в разные файлы на одном диске например - openOS и mineOS что может быть непонятно: если вы вводите пароль а поле просто очищается значит вы ввели его неправильна если вы вводите в буквы не вводиться убедитесь что у вас включен английский язык если вы поставили пароль в он не подставился и не было окна pleas wait значит два пароля не совпадают примечания: поддерживаются все тиры железа обязательно установить архитектуру процессора в lua 5.3(начиная с новой версии биос меняет ее автоматически(как Cyan Bios)) начиная с новой версии загрузка в mineOS работать не будет, это проблема ос, так как она использует getData вместо getBootAddress, и я больше не собираюсь поддерживать этот костыль(поддержка mineOS была полностью удалена) команда для установки: wget https://raw.githubusercontent.com/igorkll/microBios/main/compressed.bin /tmp/bios.lua -f;echo "" > /dev/eeprom-data;flash /tmp/bios.lua microBios -q;echo "require('computer').setArchitecture('lua 5.3')" > "/tmp/architecture.lua" /tmp/architecture.lua;reboot Изменено 11 июля, 2022 пользователем rootmaster 1 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
ProgramCrafter 545 Опубликовано: 15 июня, 2022 Is it time to analyze code? Скрытый текст biosname="microBios" statusAllow=1; local b=function()error("no bootable medium found",0)end; do local type,c,d=type,true,computer.getDeviceInfo() local function e(f) local g,h,i,j,k=126,1671,7124,"",{} for l=1,#f do table.insert(k,f:byte(l))end; for l=1,#f do local m,n,o=f:byte(l-1),f:byte(l+1),f:byte(l) if not m then m=f:byte(#f)end; if not n then n=f:byte(1)end; local p=m*g+n*h+o*i;p=p+l*h;p=p*(i-(#f-l)) for q,r in ipairs(k)do p=p+r-l*q*(g-h)end; p=math.abs(p)p=p%256;j=j..string.char(p) if#j==16 then local s=j:byte(1)g=g+s;h=h*s;i=i*s;j=j:sub(2,#j) end end; while#j<16 do j=string.char(math.abs(i+h*#j)%256)..j end; return j end; local function t(u)return component.proxy(component.list(u)()or"*")end; local v=t("eeprom") local function w(f,x) local y,z,l={},1,1; while 1 do if l>#f then break end; local s=f:sub(l,#x+l-1) if not y[z]then y[z]=""end; if s==x then z=z+1;l=l+#x else y[z]=y[z]..f:sub(l,l)l=l+1 end end; if f:sub(#f-(#x-1),#f)==x then table.insert(y,"")end; return y end; local function A(B) return w(v.getData(),"\n")[B]or"" end; local function C(B,D) if A(B)==D then return end; if D:find("\n")then error("\\n char")end; local y=w(v.getData(),"\n") for l=B,1,-1 do if not y[l]then y[l]=""end end; y[B]=D; v.setData(table.concat(y,"\n")) end; local function E(F) local G,H,I; for J in component.list(F)do I=tonumber(d[J].width) if component.type(F)=="screen"then if#component.invoke(J,"getKeyboards")>0 then I=I+10 end end; if not H or I>H then G,H=J,I end end; return G end; local function K(L,M) local N=computer.uptime() while computer.uptime()-N<L do M()end end; local O,P,Q,R=t("internet"),component.proxy(E("gpu")or""),a,{} if P then Q=A(2) if component.type(Q)~="screen"then Q=E("screen") if Q then C(2,Q)end end; if Q then R=component.invoke(Q,"getKeyboards")P.bind(Q)end end; local function S(T) return function()return T end end; computer.getBootGpu=S(P and P.address) computer.getBootFile=function()return A(3)end; computer.getBootScreen=S(Q) computer.getBootAddress=function()return A(1)end; function computer.setBootFile(U)C(3,U)end; function computer.setBootScreen(Q)C(2,Q)end; function computer.setBootAddress(J)C(1,J)end; local V=computer.shutdown; function computer.shutdown(W) if type(W)=="string"then C(6,W)end;V(W) end; local function X(J) for l,p in ipairs(R)do if p==J then return 1 end end end; local function Y(J) local Z=component.proxy(J) return Z.getLabel()and Z.address:sub(1,4)..":"..Z.getLabel()or Z.address:sub(1,4) end; local function _(a0) local a1,a2,a3,a4=O.request(a0),"" if a1 then while 1 do a3,a4=a1.read(math.huge) if a3 then a2=a2 ..a3 else a1.close() if a4 then return a,a4 else return a2 end end end else return a,"Unvalid Address" end end; local a5,a6,a7,a8; local function a9() if not Q then return end; local aa={[8]={0xf0f0f0,0x1e1e1e,0x2d2d2d,0x3c3c3c,0x4b4b4b,0x5a5a5a,0x696969,0x787878,0x878787,0x969696,0xa5a5a5,0xb4b4b4,0xc3c3c3,0xd2d2d2,0xe1e1e1,0},[4]={0xffffff,0xffcc33,0xcc66cc,0x6699ff,0xffff33,0x33cc33,0xff6699,0x333333,0xcccccc,0x336699,0x9933cc,0x333399,0x663300,3368448,0xff3333,0}}aa=aa[a5] if aa then a8=c; for l,p in ipairs(aa)do P.setPaletteColor(l-1,p)end end end; if Q then a5=math.floor(P.getDepth()) a6,a7=P.getResolution() a9() if a8 then P.setPaletteColor(1,0x7B68EE)P.setPaletteColor(2,0x1E90FF)P.setPaletteColor(3,0x6B8E23)P.setPaletteColor(4,0x8B0000)P.setPaletteColor(5,0xDAA520)P.setPaletteColor(6,0)P.setPaletteColor(7,0xFFFFFF) end end; local function ab(f,ac,ad) P.set((ac or 0)+math.floor(a6/2-(#f-1)/2+0.5),ad or math.floor(a7/2+0.5),f) end; local function ae() P.setBackground(0)P.setForeground(0xFFFFFF)P.fill(1,1,a6,a7," ") end; local function af(f,ag,L,ah,ai) if not Q then if ah then error(ah,0)end;return end; ae() P.setForeground(ag or 1,not ai and a8) ab(f) if L==c then ab("Press Enter To Continue",a,math.floor(a7/2+0.5)+1) while 1 do local aj={computer.pullSignal()} if aj[1]=="key_down"and X(aj[2])and aj[4]==28 then break end end elseif L then K(L,function()computer.pullSignal(0)end) end; return 1 end; _G.status=function(f)af(f,0xFFFFFF,a,a,1)end; local function ak(f,al) local am="" local function an() af(f..": "..(al and string.rep("*",#am)or am).."_",5) end; an() while 1 do local aj={computer.pullSignal()} if X(aj[2])then if aj[1]=="key_down"then if aj[4]==28 then return am elseif aj[3]>=32 and aj[3]<=126 then am=am..string.char(aj[3])an() elseif aj[4]==14 then if#am>0 then am=am:sub(1,#am-1)an()end elseif aj[4]==46 then break end elseif aj[1]=="clipboard"then am=am..aj[3]an() if am:byte(#am)==13 then return am end end end end end; local function ao(ap,aq,ar) local as,at,au={},{},ar or 1; function as.a(...) table.insert(at,{...}) end; local function av() ae() P.setForeground(aq,a8) ab(ap,a,a7//3) local m,o,n=at[au-1],at[au],at[au+1] P.setBackground(0) if m then P.setForeground(m[2],a8)ab(m[1],-a6//3,a7//3*2) end; if n then P.setForeground(n[2],a8)ab(n[1],a6//3,a7//3*2) end; P.setBackground(o[2],a8)P.setForeground(0)ab(o[1],a,a7//3*2) end; function as.l() av() while 1 do local aj={computer.pullSignal()} if aj[1]=="key_down"and X(aj[2])then if aj[4]==28 then if not at[au][3]then break end; local aw=at[au][3]() if aw then return aw end; av() elseif aj[4]==205 then if au<#at then au=au+1;av()end elseif aj[4]==203 then if au>1 then au=au-1;av()end end end end end; return as end; local ax=A(6)C(6,"") local function ay(J) local Z=component.proxy(J) if Z.exists("/boot/kernel/pipes")then return"/boot/kernel/pipes" elseif Q then if Z.exists("/OS.lua")then return"/OS.lua" elseif Z.exists("/init.lua")then return"/init.lua" end else if Z.exists("/init.lua")then return"/init.lua" elseif Z.exists("/OS.lua")then return"/OS.lua" end end end; local function az() af("Please Wait",5) end; local function aA() if A(4)==""then return 1 end; while 1 do local aB=ak("Enter Password",1) if not aB then break end; if e(aB)==A(4)then return 1 end end end; local function aC() if A(5)==""and not aA()then V()end; local aD=ao("micro bios",2) aD.a("Back",4) aD.a("Reboot",4,function()V(1)end) aD.a("Shutdown",4,V) if O then aD.a("Url Boot",3,function() local a0=ak("Url") if a0 then local a2,ah=_(a0) if a2 then local M,ah=load(a2,"=urlboot") if M then a9() local aE,ah=pcall(M) if not aE then af(ah or"unknown error",0xFFFFFF,c,a,1)end else af(ah,4,c) end else af(ah,4,c)end end end) end; aD.a("Password",5,function() if aA()then local aD=ao("Password",3) aD.a("Set Password",5,function() local aF=ak("Enter New Password",1) if aF and aF~=""and aF==ak("Confirm New Password",1)then az()C(4,e(aF))end end) aD.a("Set Password Mode",5,function() local aD=ao("Select Mode",2) aD.a("Menu",5,function()az()C(5,"")end) aD.a("Boot",5,function()az()C(5,"1")end) aD.a("Disable",5,function()az()C(5,"2")end) aD.a("Back",4)aD.l() end) aD.a("Clear Password",5,function() az()C(4,"")C(5,"") end) aD.a("Back",4) aD.l() end end) for J in component.list("filesystem")do local ap=Y(J) aD.a(ap,1,function() local aD=ao("Drive "..ap,2) local Z=component.proxy(J) local aG={"/init.lua","/OS.lua"} for l=2,1,-1 do if not Z.exists(aG[l])then table.remove(aG,l)end end; local aH="/boot/kernel/" for aI,U in ipairs(Z.list(aH)or{})do table.insert(aG,aH..U) end; if#aG>0 then aD.a("boot",1,function() local U=ay(J) if U then az()C(1,J)C(3,U)return 1 end; af("Boot File Is Not Found",a,c) end) end; local function aJ(U) if component.invoke(J,"exists",U)then aD.a(U,1,function()az()C(1,J)C(3,U)return 1 end) end end; for l,p in ipairs(aG)do aJ(p)end; aD.a("Back",4) return aD.l() end) end; aD.l() end; if ax~="fast"and A(5)=="1"and(not Q or not aA())then V()end; if Q then if ax=="bios"then aC() elseif ax~="fast"and#R>0 and af("Press Alt To Open The Bios Menu")then K(1,function() local aj={computer.pullSignal(0.1)} if aj[1]=="key_down"and X(aj[2])and aj[4]==56 then aC()end end) end end; local aK,U=A(1),A(3) local aL=component.proxy(aK) if not aL or not aL.exists(U)then af("Search For A Bootable Filesystem") U=a; if aL then U=ay(aK)end; if not U then for aM in component.list("filesystem")do local aN=ay(aM) if aN then aK=aM;U=aN;break end end end; if U then az()C(1,aK)C(3,U) aL=component.proxy(aK) else af("Bootable Filesystem Is Not Found",a,c,1)V() end end; if Q then a9()end; af("Boot To Drive "..Y(aK).." To File "..U,0xFFFFFF,a,a,1) local U,am=assert(aL.open(U,"rb")),"" while 1 do local aB=aL.read(U,math.huge) if not aB then break end; am=am..aB end; aL.close(U) if U=="/OS.lua"then v.getData=function()return aK end end; b=load(am,"=init") end; b() 2 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Fingercomp 4 409 Опубликовано: 15 июня, 2022 (изменено) Здесь заявляется, что пароли хэшируются. Хотя это определённо прогресс по сравнению с плейнтекстом, мне кажется, готовую хэш-функцию в силу религиозных убеждений ты юзать побоялся и сделал свою. Можешь ли тогда выложить не избитую минификатором используемую тобой функцию хэширования? Кроме того, солишь ли ты пароль перед хэшированием? Изменено 15 июня, 2022 пользователем Fingercomp запрос кода функции уже неактуален Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
logic Автор темы 51 Опубликовано: 23 июня, 2022 В 15.06.2022 в 17:41, ProgramCrafter сказал: Is it time to analyze code? Скрыть содержимое biosname="microBios" statusAllow=1; local b=function()error("no bootable medium found",0)end; do local type,c,d=type,true,computer.getDeviceInfo() local function e(f) local g,h,i,j,k=126,1671,7124,"",{} for l=1,#f do table.insert(k,f:byte(l))end; for l=1,#f do local m,n,o=f:byte(l-1),f:byte(l+1),f:byte(l) if not m then m=f:byte(#f)end; if not n then n=f:byte(1)end; local p=m*g+n*h+o*i;p=p+l*h;p=p*(i-(#f-l)) for q,r in ipairs(k)do p=p+r-l*q*(g-h)end; p=math.abs(p)p=p%256;j=j..string.char(p) if#j==16 then local s=j:byte(1)g=g+s;h=h*s;i=i*s;j=j:sub(2,#j) end end; while#j<16 do j=string.char(math.abs(i+h*#j)%256)..j end; return j end; local function t(u)return component.proxy(component.list(u)()or"*")end; local v=t("eeprom") local function w(f,x) local y,z,l={},1,1; while 1 do if l>#f then break end; local s=f:sub(l,#x+l-1) if not y[z]then y[z]=""end; if s==x then z=z+1;l=l+#x else y[z]=y[z]..f:sub(l,l)l=l+1 end end; if f:sub(#f-(#x-1),#f)==x then table.insert(y,"")end; return y end; local function A(B) return w(v.getData(),"\n")[B]or"" end; local function C(B,D) if A(B)==D then return end; if D:find("\n")then error("\\n char")end; local y=w(v.getData(),"\n") for l=B,1,-1 do if not y[l]then y[l]=""end end; y[B]=D; v.setData(table.concat(y,"\n")) end; local function E(F) local G,H,I; for J in component.list(F)do I=tonumber(d[J].width) if component.type(F)=="screen"then if#component.invoke(J,"getKeyboards")>0 then I=I+10 end end; if not H or I>H then G,H=J,I end end; return G end; local function K(L,M) local N=computer.uptime() while computer.uptime()-N<L do M()end end; local O,P,Q,R=t("internet"),component.proxy(E("gpu")or""),a,{} if P then Q=A(2) if component.type(Q)~="screen"then Q=E("screen") if Q then C(2,Q)end end; if Q then R=component.invoke(Q,"getKeyboards")P.bind(Q)end end; local function S(T) return function()return T end end; computer.getBootGpu=S(P and P.address) computer.getBootFile=function()return A(3)end; computer.getBootScreen=S(Q) computer.getBootAddress=function()return A(1)end; function computer.setBootFile(U)C(3,U)end; function computer.setBootScreen(Q)C(2,Q)end; function computer.setBootAddress(J)C(1,J)end; local V=computer.shutdown; function computer.shutdown(W) if type(W)=="string"then C(6,W)end;V(W) end; local function X(J) for l,p in ipairs(R)do if p==J then return 1 end end end; local function Y(J) local Z=component.proxy(J) return Z.getLabel()and Z.address:sub(1,4)..":"..Z.getLabel()or Z.address:sub(1,4) end; local function _(a0) local a1,a2,a3,a4=O.request(a0),"" if a1 then while 1 do a3,a4=a1.read(math.huge) if a3 then a2=a2 ..a3 else a1.close() if a4 then return a,a4 else return a2 end end end else return a,"Unvalid Address" end end; local a5,a6,a7,a8; local function a9() if not Q then return end; local aa={[8]={0xf0f0f0,0x1e1e1e,0x2d2d2d,0x3c3c3c,0x4b4b4b,0x5a5a5a,0x696969,0x787878,0x878787,0x969696,0xa5a5a5,0xb4b4b4,0xc3c3c3,0xd2d2d2,0xe1e1e1,0},[4]={0xffffff,0xffcc33,0xcc66cc,0x6699ff,0xffff33,0x33cc33,0xff6699,0x333333,0xcccccc,0x336699,0x9933cc,0x333399,0x663300,3368448,0xff3333,0}}aa=aa[a5] if aa then a8=c; for l,p in ipairs(aa)do P.setPaletteColor(l-1,p)end end end; if Q then a5=math.floor(P.getDepth()) a6,a7=P.getResolution() a9() if a8 then P.setPaletteColor(1,0x7B68EE)P.setPaletteColor(2,0x1E90FF)P.setPaletteColor(3,0x6B8E23)P.setPaletteColor(4,0x8B0000)P.setPaletteColor(5,0xDAA520)P.setPaletteColor(6,0)P.setPaletteColor(7,0xFFFFFF) end end; local function ab(f,ac,ad) P.set((ac or 0)+math.floor(a6/2-(#f-1)/2+0.5),ad or math.floor(a7/2+0.5),f) end; local function ae() P.setBackground(0)P.setForeground(0xFFFFFF)P.fill(1,1,a6,a7," ") end; local function af(f,ag,L,ah,ai) if not Q then if ah then error(ah,0)end;return end; ae() P.setForeground(ag or 1,not ai and a8) ab(f) if L==c then ab("Press Enter To Continue",a,math.floor(a7/2+0.5)+1) while 1 do local aj={computer.pullSignal()} if aj[1]=="key_down"and X(aj[2])and aj[4]==28 then break end end elseif L then K(L,function()computer.pullSignal(0)end) end; return 1 end; _G.status=function(f)af(f,0xFFFFFF,a,a,1)end; local function ak(f,al) local am="" local function an() af(f..": "..(al and string.rep("*",#am)or am).."_",5) end; an() while 1 do local aj={computer.pullSignal()} if X(aj[2])then if aj[1]=="key_down"then if aj[4]==28 then return am elseif aj[3]>=32 and aj[3]<=126 then am=am..string.char(aj[3])an() elseif aj[4]==14 then if#am>0 then am=am:sub(1,#am-1)an()end elseif aj[4]==46 then break end elseif aj[1]=="clipboard"then am=am..aj[3]an() if am:byte(#am)==13 then return am end end end end end; local function ao(ap,aq,ar) local as,at,au={},{},ar or 1; function as.a(...) table.insert(at,{...}) end; local function av() ae() P.setForeground(aq,a8) ab(ap,a,a7//3) local m,o,n=at[au-1],at[au],at[au+1] P.setBackground(0) if m then P.setForeground(m[2],a8)ab(m[1],-a6//3,a7//3*2) end; if n then P.setForeground(n[2],a8)ab(n[1],a6//3,a7//3*2) end; P.setBackground(o[2],a8)P.setForeground(0)ab(o[1],a,a7//3*2) end; function as.l() av() while 1 do local aj={computer.pullSignal()} if aj[1]=="key_down"and X(aj[2])then if aj[4]==28 then if not at[au][3]then break end; local aw=at[au][3]() if aw then return aw end; av() elseif aj[4]==205 then if au<#at then au=au+1;av()end elseif aj[4]==203 then if au>1 then au=au-1;av()end end end end end; return as end; local ax=A(6)C(6,"") local function ay(J) local Z=component.proxy(J) if Z.exists("/boot/kernel/pipes")then return"/boot/kernel/pipes" elseif Q then if Z.exists("/OS.lua")then return"/OS.lua" elseif Z.exists("/init.lua")then return"/init.lua" end else if Z.exists("/init.lua")then return"/init.lua" elseif Z.exists("/OS.lua")then return"/OS.lua" end end end; local function az() af("Please Wait",5) end; local function aA() if A(4)==""then return 1 end; while 1 do local aB=ak("Enter Password",1) if not aB then break end; if e(aB)==A(4)then return 1 end end end; local function aC() if A(5)==""and not aA()then V()end; local aD=ao("micro bios",2) aD.a("Back",4) aD.a("Reboot",4,function()V(1)end) aD.a("Shutdown",4,V) if O then aD.a("Url Boot",3,function() local a0=ak("Url") if a0 then local a2,ah=_(a0) if a2 then local M,ah=load(a2,"=urlboot") if M then a9() local aE,ah=pcall(M) if not aE then af(ah or"unknown error",0xFFFFFF,c,a,1)end else af(ah,4,c) end else af(ah,4,c)end end end) end; aD.a("Password",5,function() if aA()then local aD=ao("Password",3) aD.a("Set Password",5,function() local aF=ak("Enter New Password",1) if aF and aF~=""and aF==ak("Confirm New Password",1)then az()C(4,e(aF))end end) aD.a("Set Password Mode",5,function() local aD=ao("Select Mode",2) aD.a("Menu",5,function()az()C(5,"")end) aD.a("Boot",5,function()az()C(5,"1")end) aD.a("Disable",5,function()az()C(5,"2")end) aD.a("Back",4)aD.l() end) aD.a("Clear Password",5,function() az()C(4,"")C(5,"") end) aD.a("Back",4) aD.l() end end) for J in component.list("filesystem")do local ap=Y(J) aD.a(ap,1,function() local aD=ao("Drive "..ap,2) local Z=component.proxy(J) local aG={"/init.lua","/OS.lua"} for l=2,1,-1 do if not Z.exists(aG[l])then table.remove(aG,l)end end; local aH="/boot/kernel/" for aI,U in ipairs(Z.list(aH)or{})do table.insert(aG,aH..U) end; if#aG>0 then aD.a("boot",1,function() local U=ay(J) if U then az()C(1,J)C(3,U)return 1 end; af("Boot File Is Not Found",a,c) end) end; local function aJ(U) if component.invoke(J,"exists",U)then aD.a(U,1,function()az()C(1,J)C(3,U)return 1 end) end end; for l,p in ipairs(aG)do aJ(p)end; aD.a("Back",4) return aD.l() end) end; aD.l() end; if ax~="fast"and A(5)=="1"and(not Q or not aA())then V()end; if Q then if ax=="bios"then aC() elseif ax~="fast"and#R>0 and af("Press Alt To Open The Bios Menu")then K(1,function() local aj={computer.pullSignal(0.1)} if aj[1]=="key_down"and X(aj[2])and aj[4]==56 then aC()end end) end end; local aK,U=A(1),A(3) local aL=component.proxy(aK) if not aL or not aL.exists(U)then af("Search For A Bootable Filesystem") U=a; if aL then U=ay(aK)end; if not U then for aM in component.list("filesystem")do local aN=ay(aM) if aN then aK=aM;U=aN;break end end end; if U then az()C(1,aK)C(3,U) aL=component.proxy(aK) else af("Bootable Filesystem Is Not Found",a,c,1)V() end end; if Q then a9()end; af("Boot To Drive "..Y(aK).." To File "..U,0xFFFFFF,a,a,1) local U,am=assert(aL.open(U,"rb")),"" while 1 do local aB=aL.read(U,math.huge) if not aB then break end; am=am..aB end; aL.close(U) if U=="/OS.lua"then v.getData=function()return aK end end; b=load(am,"=init") end; b() исходник же в репозитории есть, зачем? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
logic Автор темы 51 Опубликовано: 23 июня, 2022 (изменено) В 15.06.2022 в 18:21, Fingercomp сказал: Здесь заявляется, что пароли хэшируются. Хотя это определённо прогресс по сравнению с плейнтекстом, мне кажется, готовую хэш-функцию в силу религиозных убеждений ты юзать побоялся и сделал свою. Можешь ли тогда выложить не избитую минификатором используемую тобой функцию хэширования? Кроме того, солишь ли ты пароль перед хэшированием? нет пароль не солю хотя стоило бы но вот 30 байт свободного места которых даже не хватило на переключения архитектуры так не считают, а hesh функцию можеш посмотреть в исходнике https://raw.githubusercontent.com/igorkll/topBiosV5/main/microBios.lua Изменено 23 июня, 2022 пользователем rootmaster Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах