function xqmnb(Search,Modification) gg.clearResults() gg.setRanges(Search[1].memory) gg.searchNumber(Search[3].value,Search[3].type,false,536870912,0,-1) if gg.getResultCount()==0 then print(Search[2].name..'开启失败 getResultCount = 0') return end local Result=gg.getResults(gg.getResultCount()) local sum for index=4,#Search do sum=0 for i=1,#Result do if gg.getValues({{address=Result[i].address+Search[index].offset,flags=Search[index].type}})[1].value~=Search[index].lv then Result[i].Usable=true sum=sum+1 end end if sum==#Result then print(Search[2].name..'开启失败') return end end local Data,Freeze,Freezes={},{},0 sum=0 for index,value in ipairs(Modification)do for index=1,#Result do if not Result[index].Usable then local Value={address=Result[index].address+value.offset,flags=value.type,value=value.value,freeze=true} if value.freeze then Freeze[#Freeze+1]=Value Freezes=Freezes+1 else Data[#Data+1]=Value end sum=sum+1 end end end gg.removeListItems(Data) gg.setValues(Data) gg.addListItems(Data) gg.addListItems(Freeze) if Freezes==0 then print(Search[2].name..'成功 共修改'..sum..'条数据') else print(Search[2].name..'成功 共修改'..sum..'条数据 冻结'..Freezes..'条数据') end gg.clearResults() 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 S_list = getRanges() local _Q = tonumber(0x167ba0fe) local t = {} local _t local _S = nil if ti_bit then _t = 32 else _t = 4 end 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 _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 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 _A = string.format('0x%X', Get_Address(t_So, t_Offset, _bit)) return _A end function GetValue(Address , Flag) return gg.getValues({{address = Address , flags = Flag}})[1].value end function SetValue(Address , Flag , Value) return gg.setValues({{address = Address , flags = Flag , value = Value}}) end function GetSo(So) local So_List = gg.getRangesList('^/data/*.so*$') for i = 1 , #So_List do if So_List[i].internalName:gsub('^.*/', '') == So[1] and So_List[i].state == So[2] then return So_List[i].start end end end function ToPointer(So_Cb,Offsets) local Address = So_Cb for i = 1 , #Offsets do Address = gg.getValues({{ address = Address + Offsets[i] , flags = 32 }})[1]["value"] end return Address end function ToAddress(So_Cb,offsets) local address = So_Cb for i = 1 , #offsets do address = gg.getValues({{ address = address + offsets[i] , flags = 32 }})[1]["value"] end return address end function FH_Pointer(So,Pointer,Flag) Temp_So = gg.getRangesList(So)[1].start Address = Temp_So + Pointer return Address end function toast(content) gg.toast('t:'..content) end function GetPlayers() Entity_Offset , Player.Quantity , NotPlayer.Quantity = 0,0,0 Player_List.X , Player_List.Y , Player_List.Z = {},{},{} Player_List.HitBoxX , Player_List.HitBoxY = {},{} Player_List.vX , Player_List.vY , Player_List.vZ = {},{},{} Player_List.HitBoxvX , Player_List.HitBoxvY = {},{} Player_List.Distance , Aim , Distance_Count = {},{},{} Self.X , Self.Y , Self.Z = Self.HitBox -24 , Self.HitBox -20 , Self.HitBox -16 Self.vX , Self.vY , Self.vZ = GetValue(Self.X , 16) , GetValue(Self.Y , 16) , GetValue(Self.Z , 16) while true do Entity_Offset = Entity_Offset + 32 Entity_Hitbox = gg.getValues({{address = Self.HitBox + Entity_Offset, flags = 16}}) Entity = Entity_Hitbox[1].value if Entity <= 0.0 then --toast("获取玩家失败") end if Entity <= 0 then Entity_Offset = 0 --print('获取到:'..Player.Quantity..'个玩家') break end if Entity == 0.6000000238418579 then Player.Quantity = Player.Quantity + 1 Temp_Addr = Self.HitBox + Entity_Offset --gg.addListItems({{address = Temp_Addr , flags = 16 , name = '玩家:'..Player.Quantity}}) Player_List.HitBoxX[Player.Quantity] , Player_List.HitBoxY[Player.Quantity] = Temp_Addr , Temp_Addr + 4 Player_List.Y[Player.Quantity] = Temp_Addr - 20 Player_List.X[Player.Quantity] = Player_List.Y[Player.Quantity] - 4 Player_List.Z[Player.Quantity] = Player_List.Y[Player.Quantity] + 4 --print(Player_List.Y[Player.Quantity]) else NotPlayer.Quantity = NotPlayer.Quantity + 1 end--if Entity end--while for i=1,Player.Quantity do Player_List.HitBoxvX[i] , Player_List.HitBoxvY[i] = GetValue(Temp_Addr , 16) , GetValue(Temp_Addr + 4 , 16) Player_List.vY[i] = GetValue(Player_List.Y[i] , 16) Player_List.vX[i] = GetValue(Player_List.Y[i] - 4 , 16) Player_List.vZ[i] = GetValue(Player_List.Y[i] + 4 , 16) Aim.X , Aim.Y , Aim.Z = Player_List.vX[i] , Player_List.vY[i] , Player_List.vZ[i] Distance_Count.X, Distance_Count.Y, Distance_Count.Z = Aim.X - Self.vX, Aim.Y - Self.vY, Aim.Z - Self.vZ Temp_Distance = math.sqrt(Distance_Count.X * Distance_Count.X + Distance_Count.Z * Distance_Count.Z) + Distance_Count.Y Player_List.Distance[i] = Temp_Distance --print(Temp_Distance) end local Min_Value = Player_List.Distance[1] for i = 2, Player.Quantity do if Player_List.Distance[i] < Min_Value then MinPlayer_Distance = Player_List.Distance[i] MinPlayer_List = i Aim_X, Aim_Y, Aim_Z = Player_List.vX[i], Player_List.vY[i], Player_List.vZ[i] --gg.alert('执行'..i..'距离'..MinPlayer_Distance) --return end end end--GetPlayers function Refresh(GPM) Self.vMotionY = GetValue(Self.MotionY,16) Self.X, Self.Z = Self.Y - 4, Self.Y + 4 Self.vX , Self.vY , Self.vZ = GetValue(Self.Y-4,16) , GetValue(Self.Y,16) , GetValue(Self.Y+4,16) Self.Y2 = Self.Y + 12 Self.MotionSiteY = Self.MotionY - 18 Self.MotionViewY = Self.MotionY - 0xC if GPM == true then if RefreshPlayer_Timing == nil then RefreshPlayer_Timing = 80 end RefreshPlayer_Timing = RefreshPlayer_Timing + 0.4 if RefreshPlayer_Timing > 80 then RefreshPlayer_Timing = 0 toast('刷新列表') GetPlayers() end end if MinPlayer_List > 0 then Player_List.vY[MinPlayer_List] = GetValue(Player_List.Y[MinPlayer_List] , 16) Player_List.vX[MinPlayer_List] = GetValue(Player_List.Y[MinPlayer_List] - 4 , 16) Player_List.vZ[MinPlayer_List] = GetValue(Player_List.Y[MinPlayer_List] + 4 , 16) --print('['..MinPlayer_List..'] '..Player_List.vX[MinPlayer_List]..' '..Player_List.vY[MinPlayer_List]..' '..Player_List.vZ[MinPlayer_List]) Aim_X, Aim_Y, Aim_Z = Player_List.vX[MinPlayer_List], Player_List.vY[MinPlayer_List], Player_List.vZ[MinPlayer_List] TempDistance_X, TempDistance_Y, TempDistance_Z = Aim_X - Self.vX, Aim_Y - Self.vY, Aim_Z - Self.vZ MinPlayer_Distance = math.sqrt(TempDistance_X * TempDistance_X + TempDistance_Z * TempDistance_Z) + TempDistance_Y --if MinPlayer_Distance < 0 then gg.toast('目标'..MinPlayer_List..'丢失 Distance:['..MinPlayer_Distance..']') print('目标'..MinPlayer_List..'丢失') return GetPlayers() end end end Cb_So , Xa_So = {"libminecraftpe.so:bss", "Cb"} , {"libminecraftpe.so", "Xa"}--so立表 So_Cb_Cb , So_Cb_Xa = GetSo(Cb_So) , GetSo(Xa_So) So_Cb , So_Xa = So_Cb_Cb , So_Cb_Xa if not So_Cb then os.exit(gg.alert('无法获取到So','退出')) end Self,NotPlayer,Player,Player_List = {},{},{},{}--定义表单 MinPlayer_List = 0 Self.MotionY = ToPointer(So_Cb,{0x332E60,0x180,0xC8,0xA0,0x160,0x188}) + 0x1C --自身内存页 Self.HitBox = S_Pointer(Cb_So,{0x332E60,0x180,0x1F0,0x160,0x190,0x18},true) Self.ViewX = ToPointer(So_Cb,{0x332E60,0x180,0x1F0,0x8,0x88,0x110,0x48,0x0}) --视角弧度内存页 Self.Y = Self.HitBox - 20 Self.ViewY = Self.ViewX + 4 gg.addListItems({{address = Self.Y , flags = 16 , name = 'self y'}}) gg.addListItems({{address = Self.MotionY , flags = 16 , name = 'self motiony'}}) gg.addListItems({{address = Self.ViewX , flags = 16 , name = 'self view'}}) gg.addListItems({{address = Self.HitBox , flags = 16 , name = 'self hitbox'}}) gg.setVisible(false) Refresh(true) Temp_List = '玩家列表 排除非玩家实体\n共找到:['..Player.Quantity..']个玩家 ['..NotPlayer.Quantity..']个非玩家实体\n自身Self Addr\nX:['..Self.X..' Y:['..Self.Y..'] Z:['..Self.Z..']\nValue X:['..Self.vX..'] Y:['..Self.vY..'] Z:['..Self.vZ..']' for i=1,#Player_List.Y do toast('构建玩家列表'..i) Temp_List = Temp_List.. '\n\n玩家:['..i..']\nAddress:\nX:['..Player_List.X[i]..'] Y:['..Player_List.Y[i]..'] Z:['..Player_List.Z[i]..']\nHitbox:\nX:['..Player_List.HitBoxX[i]..'] Y:['..Player_List.HitBoxY[i].. ']\nValue:\nX:['..Player_List.vX[i].. '] Y:['..Player_List.vY[i].. '] Z:['..Player_List.vZ[i].. ']\nHitbox:\nX:['..Player_List.HitBoxvX[i].. '] Y:['..Player_List.HitBoxvY[i].. ']\n距离自身['..Player_List.Distance[i].. ']Blocks' end --gg.alert(Temp_List,'好') if Player.Quantity >= 1 or MinPlayer_List == nil then else os.exit(gg.alert('读取玩家失败\n'..Player.Quantity,'退出'),print('读取玩家失败')) end --虚空回弹 --[[ while true do --if gg.isVisible(true) then break end OtherMessage = '' Refresh(true) if Self.SaveX == nil and Self.SaveY == nil and Self.SaveZ == nil then Self.SaveX, Self.SaveY, Self.SaveZ = 0, 0, 0 end if Self.vMotionY < -1.5 then gg.setValues({ {address = Self.Y-4 , flags = 16 , value = Self.SaveX}, {address = Self.Y , flags = 16 , value = Self.SaveY}, {address = Self.Y+4 , flags = 16, value = Self.SaveZ}, {address = Self.Y2-4 , flags = 16 , value = Self.SaveX}, {address = Self.Y2 , flags = 16 , value = Self.SaveY+2}, {address = Self.Y2+4 , flags = 16, value = Self.SaveZ} }) SetValue(Self.MotionY,16,0.6) --gg.toast('Move '..Self.SaveX..' '..Self.SaveY..' '..Self.SaveZ) else TriggerMotion = false end if Self.vMotionY > -0.07840000093 and Self.vMotionY < 0 and TriggerMotion == false then if Self.SaveX == Self.vX or Self.SaveZ == Self.vZ then else MoveCount_X = Self.SaveX - Self.vX MoveCount_Z = Self.SaveZ - Self.vZ --gg.toast('位置移动\nX:'..MoveCount_X..'Blocks\nZ:'..MoveCount_Z..'Blocks') Self.SaveX, Self.SaveZ = Self.vX, Self.vZ end if Self.SaveY == Self.vY then else MoveCount_Y = Self.SaveY - Self.vY --gg.toast('位置移动\nY:'..MoveCount_Y..'Blocks') Self.SaveY = Self.vY end gg.sleep(500) end HitBox = true if HitBox then for i=1,Player.Quantity do Temp_Addr = Player_List.HitBoxX[i] SetValue(Temp_Addr,16,3) SetValue(Temp_Addr + 4,16,3.5) end end end ]] --自瞄 --[[ function Rad(A) local A_ = 0.0 if A > math.pi/2 then A_ = A - math.pi end if A <- math.pi/2 then A_ = A + math.pi end if A_ == 0.0 then A_ = A end return A_ end function Aura_Limit(v) Min = -0.5 Max = 0.5 if v > Max then return Max elseif v < Min then return Min else return v end end while true do if gg.isVisible(true) then break end OtherMessage = '' Refresh(true) if Aim_Y == Self.vY then Aim_Y = Aim_Y + 0.000000001 end local Angle_XZ = math.atan(Self.vX - Aim_X , Self.vZ - Aim_Z + 0.000000001) local Angle_YZ = math.atan(Self.vY - Aim_Y, Self.vZ - Aim_Z + 0.000000001) if MinPlayer_Distance < 6 and MinPlayer_Distance > 1.5 then SetValue(Self.ViewX, 16, Angle_XZ) SetValue(Self.ViewY, 16, -math.abs(Rad(Angle_YZ))) end --gg.toast(MinPlayer_Distance) end ]] --环绕 --[[ while true do if gg.isVisible(true) then break end OtherMessage = '' Refresh() Aura_Range = 10 Aura_Speed = 1 Aura_Radius = 0.85 AuraX = Aim_X - Self.vX AuraY = Aim_Y - Self.vY + 1 AuraZ = Aim_Z - Self.vZ if MinPlayer_Distance > Aura_Range then --Aura_Radius = 6 else --Aura_Radius = 0.85 end if Temp_AuraSpeed == nil then Temp_AuraSpeed = 0 end Temp_AuraSpeed = Aura_Speed + Temp_AuraSpeed Aura__X = Aura_Radius * math.cos(Temp_AuraSpeed * math.pi/50) + Aura_Radius * math.sin(Temp_AuraSpeed * math.pi/50) Aura__Z = Aura_Radius * math.cos(Temp_AuraSpeed * math.pi/50) - Aura_Radius * math.sin(Temp_AuraSpeed * math.pi/50) Aura_X, Aura_Y, Aura_Z = Aura_Limit(AuraX), Aura_Limit(AuraY), Aura_Limit(AuraZ) gg.setValues({ {address= Self.MotionY - 4, flags = 16, value = Aura__X + Aura_X}, {address= Self.MotionY, flags = 16, value = AuraY}, {address= Self.MotionY + 4, flags = 16, value = Aura__Z + Aura_Z} }) --gg.toast('距离:['..Distance..'\n'..OtherMessage) ]] --百米 --[[ gg.setValues({ {address = Self.MotionSiteY - 4 , flags = 16 , value = Aim_X}, {address = Self.MotionSiteY , flags = 16 , value = Aim_Y}, {address = Self.MotionSiteY + 4 , flags = 16, value = Aim_Z}, {address = Self.MotionViewY - 4 , flags = 16 , value = Aim_X}, {address = Self.MotionViewY , flags = 16 , value = Aim_Y}, {address = Self.MotionViewY + 4 , flags = 16, value = Aim_Z} }) end ]]