function Main() menu = gg.choice({ '主功能', '未开发', '退出脚本'}, 2018,'这里可以填QQ号') if menu == 1 then A() end if menu == 2 then B() end if menu == 3 then Exit() end XGCK=-1 end function A() menu1 = gg.choice({ '选择进程', '范围', 'LOGO防闪退', '过检测', '副功能名称5', '副功能名称6', '副功能名称7', '副功能名称8', '副功能名称9', '副功能名称10', '返回上一页'}, 2018,'这里也可以随便填') if menu1 == 1 then a1() end if menu1 == 2 then a2() end if menu1 == 3 then a3() end if menu1 == 4 then a4() end if menu1 == 5 then a5() end if menu1 == 6 then a6() end if menu1 == 7 then a7() end if menu1 == 8 then a8() end if menu1 == 9 then a9() end if menu1 == 10 then a10() end if menu1 == 11 then HOME() end GLWW=-1 end function B() menu1 = gg.choice({ '副功能名称1', '副功能名称2', '副功能名称3', '副功能名称4', '副功能名称5', '副功能名称6', '副功能名称7', '副功能名称8', '副功能名称9', '副功能名称10', '返回上一页'}, 2018,'这里也可以随便填') if menu1 == 1 then b1() end if menu1 == 2 then b2() end if menu1 == 3 then b3() end if menu1 == 4 then b4() end if menu1 == 5 then b5() end if menu1 == 6 then b6() end if menu1 == 7 then b7() end if menu1 == 8 then b8() end if menu1 == 9 then b9() end if menu1 == 10 then b10() end if menu1 == 11 then HOME() end GLWW=-1 end function a1() gg.setProcessX() gg.toast("开启成功") end function a2() function S_Pointer(t_So, t_Offset, _bit) local function getRanges() local ranges = {} local t = gg.getRangesList('^/data/*.so*$') for i, v in pairs(t) do if v.type:sub(2, 2) == 'w' then table.insert(ranges, v) end end return ranges end local function Get_Address(N_So, Offset, ti_bit) local ti = gg.getTargetInfo() local S_list = getRanges() local _t = ti_bit and 32 or 4 local _S = nil for i in pairs(S_list) do local _N = S_list[i].internalName:gsub('^.*/', '') if N_So[1] == _N and N_So[2] == S_list[i].state then _S = S_list[i] break end end if not _S then return nil end local t = {{address = _S.start + Offset[1], flags = _t}} if #Offset ~= 1 then for i = 2, #Offset do local S = gg.getValues(t) t = {} for _,v in pairs(S) do if not ti.x64 then v.value = v.value & 0xFFFFFFFF end t[#t+1] = {address = v.value + Offset[i], flags = _t} end end end return t[#t].address end return Get_Address(t_So, t_Offset, _bit) end local so_gun = {"libunity.so", "Cd"} local off_gun = {0x1F5A0, 0xEC} local function gunRangeOn() local addr = S_Pointer(so_gun, off_gun, true) if addr then gg.setValues({{address=addr,flags=16,value=15}}) gg.toast("gun range on") else gg.toast("addr fail") end end local function gunRangeOff() local addr = S_Pointer(so_gun, off_gun, true) if addr then gg.setValues({{address=addr,flags=16,value=1}}) gg.toast("gun range off") else gg.toast("addr fail") end end local menuList = { "1. Gun Range On", "2. Gun Range Off", "0. Exit" } while true do local choose = gg.choice(menuList,nil,"Menu") if choose == nil or choose == #menuList then break end if choose == 1 then gunRangeOn() elseif choose == 2 then gunRangeOff() end gg.sleep(200) end gg.toast("开启成功") end function a3() function set(address, flags, value) local tt = {} tt[1] = {} tt[1].address = address tt[1].flags = flags tt[1].value = value gg.setValues(tt) end so=gg.getRangesList('libtersafe2.so')[1].start py=0x5204E0 set(so+py,4,'~A8 B [PC,#0x10]') gg.toast("开启成功") end function a4() local function findExecutableSegment(lib) local ranges=gg.getRangesList(lib) for _,v in ipairs(ranges) do if v.type:find("-x") then return v.start end end return nil end local function readValue(address,flags) return gg.getValues({[1]={address=address,flags=flags}})[1].value end local function writeValue(address,flags,value,freeze) local item={address=address,flags=flags,value=value,freeze=freeze} if freeze then gg.addListItems({item}) else gg.setValues({item}) end end function setvalue(address,flags,value,freeze) if address == 0 then return end local tt={} tt[1]={} tt[1].address=address tt[1].flags=flags tt[1].value=value tt[1].freeze=freeze if freeze==false then gg.setValues(tt) end gg.addListItems(tt) end function getvalue(address,flags,value,freeze) if address == 0 then return end local tt={} tt[1]={} tt[1].address=address tt[1].flags=flags gg.addListItems(tt) end function autovalue(address,flags,_o,_v,freeze) if address == 0 then return end local tt={} tt[1]={} tt[1].address=address tt[1].flags=flags tt[1].freeze=freeze local _v_ = gg.getValues(tt)[1].value if math.abs(_v_-_o) < 1e-7 then tt[1].value=_v else tt[1].value=_o end if freeze==false then gg.setValues(tt) end gg.addListItems(tt) end function readD(address) return gg.getValues({{address = address, flags = 4}})[1].value end function S_Pointer(t_So, t_Offset, _bit) local function getRanges() local ranges = {} local t = gg.getRangesList('^/data/*.so*$') for i, v in pairs(t) do if v.type:sub(2, 2) == 'w' then table.insert(ranges, v) end end return ranges end local function Get_Address(N_So, Offset, ti_bit) local ti = gg.getTargetInfo() local t = {} local _t local _S = nil if ti_bit then _t = 32 else _t = 4 end local _S = gg.getRangesList(N_So[1])[1] if _S then t[#t + 1] = {} t[#t].address = _S.start + Offset[1] t[#t].flags = _t if #Offset ~= 1 then for i = 2, #Offset do local S = gg.getValues(t) t = {} for _ in pairs(S) do if not ti.x64 then S[_].value = S[_].value & 0xFFFFFFFF else S[_].value = S[_].value & 0xFFFFFFFFFF end t[#t + 1] = {} t[#t].address = S[_].value + Offset[i] t[#t].flags = _t end end end _S = t[#t].address end return _S end local ttt = Get_Address(t_So, t_Offset, _bit) if ttt ~= nil then local _A = string.format('0x%X', ttt) return _A end return 0 end function RDI(address) return gg.getValues({{address = address, flags = 4}})[1].value & 0xFFFFFFFF end function RQI(address) return gg.getValues({{address = address, flags = gg.TYPE_QWORD}})[1].value end function Format(tab, format, value, type, Function) if format == "查看" then tab[1]["flags"] = type return print(gg.getValues(tab)) elseif format == "修改" then tab[1]["flags"] = type tab[1]["value"] = value return gg.setValues(tab) elseif format == "冻结" then tab[1]["flags"] = type tab[1]["freeze"] = true tab[1]["value"] = value tab[1]["name"] = Function or "功能" return gg.addListItems(tab) elseif format == "加载" then tab[1]["flags"] = type return gg.loadResults(tab) end end function LSQ_Chain(so, offset, format, value, type, Function)--模块设置, 偏移量, 功能参数, 修改值, 类型, 功能 getRanges = getRanges or (function() local ranges = {} local t = gg.getRangesList('^/data/*.so*$') for i, v in pairs(t) do if v["type"]:sub(2, 2) == 'w' then--判断so是否可读可写 ranges[#ranges+1] = v end end return ranges end) local rest, ranges, sostart, valtype = {}, getRanges(), nil , gg.TYPE_DWORD if gg.getTargetInfo()["x64"] then--判断应用程序是否为64位 valtype = gg.TYPE_QWORD end for i in pairs(ranges) do local _name = ranges[i]["internalName"]:gsub('^.*/', '') if so[1] == _name and so[2] == ranges[i]["state"] then sostart = ranges[i]["start"] break end end if sostart then if offset[1] then for i = 1, #offset do rest = {{flags = valtype,address = sostart + offset[i]}} rest = gg.getValues(rest) if i == #offset then break end if valtype == gg.TYPE_DWORD then sostart = rest[1].value & 0xFFFFFFFF--对值进行补位操作 else sostart = rest[1].value end end end if #rest == 1 then end return Format(rest, format, value, type, Function) end gg.toast("功能:" .. Function .. "开启失败") print("功能开启失败原因: 未找到基址头") return os.exit() end -- 读取内存地址的函数 function readPointer(name, offset, i) local re = gg.getRangesList(name) local x64 = gg.getTargetInfo().x64 local va = {[true]=32, [false]=4} if re[i or 1] then local addr = re[i or 1].start + offset[1] for i = 2, #offset do addr = gg.getValues({{address=addr, flags=va[x64]}}) if not x64 then addr[1].value = addr[1].value & 0xFFFFFFFF end addr = addr[1].value + offset[i] end return addr end end -- 修改内存地址的函数 function gg.edits(addr, Table, name) local Table1 = {{}, {}} for k, v in ipairs(Table) do local value = {address = addr+v[3], value = v[1], flags = v[2], freeze = v[4]} if v[4] then Table1[2][#Table1[2]+1] = value else Table1[1][#Table1[1]+1] = value end end gg.addListItems(Table1[2]) gg.setValues(Table1[1]) gg.toast((name or "") .. "开启成功, 共修改"..#Table.."个值") end function readPointer(name, offset, i) local re = gg.getRangesList(name) local x64 = gg.getTargetInfo().x64 local va = { [true] = 32, [false] = 4 } if re[i or 1] then local addr = re[i or 1].start + offset[1] for i = 2, #offset do addr = gg.getValues({ { address = addr, flags = va[x64] } }) if not x64 then addr[1].value = addr[1].value & 0xFFFFFFFF else addr[1].value = addr[1].value & 0xFFFFFFFFFF end addr = addr[1].value + offset[i] end return addr end end local t = {"libtersafe2.so"} local tt = {0x1D574C}local ttt = S_Pointer(t,tt,true) setvalue(ttt,4, "hE8 03 1F AA", true) local tt = {0x1D57AC}local ttt = S_Pointer(t,tt,true) setvalue(ttt,4, "h1F 00 00 6B", true) local tt = {0x1D5818}local ttt = S_Pointer(t,tt,true) setvalue(ttt,4, "h1F 00 00 6B", true) local tt = {0x1D5894}local ttt = S_Pointer(t,tt,true) setvalue(ttt,4, "h20 00 80 D2", true) local tt = {0x1D58A4}local ttt = S_Pointer(t,tt,true) setvalue(ttt,4, "hE0 03 1F 2A", true) local tt = {0x4D4DE8}local ttt = S_Pointer(t,tt,true) setvalue(ttt,4, "hE8 03 1F 2A", true) local tt = {0x4D2094}local ttt = S_Pointer(t,tt,true) setvalue(ttt,4, "hE8 03 1F AA", true) local tt = {0x4D2114}local ttt = S_Pointer(t,tt,true) setvalue(ttt,4, "hE8 03 1F AA", true) local tt = {0x4F7B70}local ttt = S_Pointer(t,tt,true) setvalue(ttt,4, "hE8 03 1F 2A", true) local tt = {0x2125AC}local ttt = S_Pointer(t,tt,true) setvalue(ttt,4, "hE8 03 1F 2A", true) local tt = {0x429BD4}local ttt = S_Pointer(t,tt,true) setvalue(ttt,4, "hE8 03 1F AA", true) local tt = {0x4818D8}local ttt = S_Pointer(t,tt,true) setvalue(ttt,4, "hBB C3 1C B8", true) local tt = {0x40D380}local ttt = S_Pointer(t,tt,true) setvalue(ttt,4, "~A8 MOV X8, XZR", true) local tt = {0x5207F0}local ttt = S_Pointer(t,tt,true) setvalue(ttt,4, "~A8 RET", true) local tt = {0x1CFB8C}local ttt = S_Pointer(t,tt,true) setvalue(ttt,4, "~A8 RET", true) gg.toast("开启成功") end function a5() gg.toast("开启成功") end function a6() gg.toast("开启成功") end function a7() gg.toast("开启成功") end function a8() gg.toast("开启成功") end function a9() gg.toast("开启成功") end function a10() gg.toast("开启成功") end function b1() gg.toast("开启成功") end function b2() gg.toast("开启成功") end function b3() gg.toast("开启成功") end function b4() gg.toast("开启成功") end function b5() gg.toast("开启成功") end function b6() gg.toast("开启成功") end function b7() gg.toast("开启成功") end function b8() gg.toast("开启成功") end function b9() gg.toast("开启成功") end function b10() gg.toast("开启成功") end function Exit() print("这里是退出脚本后的提示文字") os.exit() end function HOME() lw=1 Main() end cs = '这里可以填QQ' while(true)do if gg.isVisible(true) then XGCK=1 gg.setVisible(false) end gg.clearResults() if XGCK==1 then Main() end end --[[Welcome to Dluae]]