do
if type(getrlyunyz) ~= 'function' then
gg.alert('请使用RLGG执行')
os.exit()
return
end
local info = {
example_version = '1.0.3',
name = '零号',
appid = '94192',
appkey = 'vSxPGDKoZcOi8xIS',
rc4key = 'D6i00uaj0ViVrDU0',
version = '1.0',
mi_type = '3'
}
local rlyunyz = getrlyunyz(info)
local ret = rlyunyz.start()
if not ret or not isTable(ret) or ret.sign ~= '1d4c4e950951ad438cf321b0e25130b7' then
os.exit()
return
end
end
channel=""
vibra = context:getSystemService(Context.VIBRATOR_SERVICE)
lh = {}
local lh = lh
local android = import('android.*')
function write(fileName, content)
file.write(fileName, content)
end
local function panduan(rec) fille,err = io.open(rec) if fille == nil then return false else return true end end
if panduan("/storage/emulated/0/零号/资源/零号.zip") ~= true then
gg.toast("正在下载资源零号.zip\n请耐心等待")
file.download("https://xuanmo.xyz/f/WXkDfG/%E9%9B%B6%E5%8F%B7.zip","/storage/emulated/0/零号/资源/零号.zip")
end
if panduan("/storage/emulated/0/零号/资源/CircleImageView.dex")~=true then
file.unzip("/storage/emulated/0/零号/资源/零号.zip","/storage/emulated/0/零号/资源/")
end
local typeface=import("android.graphics.Typeface")
local FontPath="/storage/emulated/0/零号/资源/软糖.ttf"--字体路径
local font=typeface:createFromFile(FontPath)
--字体
if (rlgg.VERSION < 2.09) then
gg.alert('请使用大于等于2.09版本的RLGG')
os.exit()
end
--local typeface = import("android.graphics.Typeface")
--local FontPath = "/storage/emulated/0/云烛/配置文件/GoogleSans-Bold.otf"--字体路径
--local font = typeface:createFromFile(FontPath)
local baseWindow = require 'floatingWindowManager2'
if not baseWindow.getContext then
gg.alert('请重启一下RLGG')
app.exit()
end
import "android.graphics.Color"
import "android.content.res.ColorStateList"
local context = baseWindow:getContext()
import "android.view.animation.TranslateAnimation"
import "android.view.animation.Animation"
import "android.animation.ArgbEvaluator"
import "android.animation.LayoutTransition"
import "android.graphics.drawable.GradientDrawable"
import "android.graphics.drawable.ClipDrawable"
import "android.media.MediaPlayer"
MediaPlayer=MediaPlayer()
import "java.io.File"
import "android.graphics.Typeface"
import "android.animation.LayoutTransition"
layoutTransition=LayoutTransition()
layoutTransition:setDuration(500)
import 'com.google.android.material.imageview.ShapeableImageView'
import 'com.google.android.material.shape.CornerFamily'
import 'com.google.android.material.materialswitch.MaterialSwitch'
import 'com.google.android.material.button.MaterialButton'
import 'com.google.android.material.dialog.MaterialAlertDialogBuilder'
import 'com.google.android.material.slider.Slider'
import 'com.google.android.material.snackbar.Snackbar'
import 'com.google.android.material.sidesheet.SideSheetDialog'
import 'com.google.android.material.bottomsheet.BottomSheetDialog'
import 'com.google.android.material.bottomsheet.BottomSheetBehavior'
import 'com.google.android.material.progressindicator.LinearProgressIndicator'
import 'com.google.android.material.progressindicator.CircularProgressIndicator'
import 'com.google.android.material.chip.ChipGroup'
import 'com.google.android.material.chip.Chip'
import 'com.google.android.material.radiobutton.MaterialRadioButton'
import 'com.google.android.material.checkbox.MaterialCheckBox'
import 'com.google.android.material.dialog.MaterialAlertDialogBuilder'
import 'androidx.coordinatorlayout.widget.CoordinatorLayout'
import 'androidx.core.widget.NestedScrollView'
import 'android.graphics.drawable.Icon'
import 'android.widget.LinearLayout'
import 'android.widget.Button'
import 'android.widget.TextView'
import 'android.widget.ScrollView'
import 'android.widget.RadioGroup'
import 'java.lang.CharSequence'
import 'java.lang.Boolean'
import 'java.lang.reflect.Array'
--Snackbar:make(ckou,"启动进程结束 欢迎使用",Snackbar.LENGTH_SHORT):setBackgroundTint("0xff161616"):show()
-- 浅色模式
baseWindow:darkMode()
print("本次运行包含套餐:个人版")
--Snackbar:make(ckou,"启动进程结束 欢迎使用",Snackbar.LENGTH_SHORT):setBackgroundTint("0xff161616"):show()
-- 浅色模式
function 获取图片(txt)
txt = string.url(txt,"de")
ntxt = string.sub(string.gsub(txt,"/","-"),-10,-1)
if string.find(tostring(txt),"http") ~= nil then
if panduan("/sdcard/零号/资源/"..ntxt) == false then
file.download(txt,"/sdcard/零号/资源/"..ntxt)
else
if file.length("/sdcard/零号/资源/"..ntxt) <= 1 then
file.download(txt,"/sdcard/零号/资源/"..ntxt)
end
end
txt = "/sdcard/零号/资源/"..ntxt
end
return luajava.getBitmapDrawable(txt)
end
function getRes(x)
return 获取图片("/sdcard/零号/资源/"..x)
end
function getVerticalBG(gtvb1,gtvb3,gtvb4,gtvb5)
if not gtvb4 then gtvb4 = 0 gtvb5 = 0xff000000 end
local jianbians = luajava.new(GradientDrawable)
jianbians:setCornerRadius(gtvb3)
jianbians:setGradientType(GradientDrawable.LINEAR_GRADIENT)
jianbians:setColors(gtvb1)
jianbians:setStroke(gtvb4,gtvb5)
return jianbians
end
function particle2(tx)
local webView = luajava.webView(function(webView)
webView:loadData([[
]]..tx..[[
]], 'text/html', 'UTF-8')
webView:setBackgroundColor(0x0)
end)
return webView
end
function getCorner(gtvb1,gtvb3,gtvb4,gtvb5,g1,g2,g3,g4)
if not gtvb4 then gtvb4 = 0 gtvb5 = 0xff000000 end
local jianbians = luajava.new(GradientDrawable)
jianbians:setGradientType(GradientDrawable.LINEAR_GRADIENT)
jianbians:setColors(gtvb1)
jianbians:setStroke(gtvb4,gtvb5)--边框宽度和颜色
jianbians:setCornerRadii({g1,g1,g2,g2,g3,g3,g4,g4})
return jianbians
end
function getHorizontalBG(gtvb1,gtvb3,gtvb4,gtvb5)
if not gtvb4 then gtvb4 = 0 gtvb5 = 0xff000000 end
local jianbians = luajava.new(GradientDrawable)
jianbians:setCornerRadius(gtvb3)
jianbians:setOrientation(GradientDrawable.Orientation.LEFT_RIGHT)
jianbians:setGradientType(GradientDrawable.LINEAR_GRADIENT)
jianbians:setColors(gtvb1)
jianbians:setStroke(gtvb4,gtvb5)--边框宽度和颜色
return jianbians
end
context = app.context
window = context:getSystemService("window") -- 获取窗口管理器
function getLayoutParams()
LayoutParams = WindowManager.LayoutParams
layoutParams = luajava.new(LayoutParams)
if (Build.VERSION.SDK_INT >= 26) then -- 设置悬浮窗方式
layoutParams.type = LayoutParams.TYPE_APPLICATION_OVERLAY
else
layoutParams.type = LayoutParams.TYPE_PHONE
end
layoutParams.format = PixelFormat.RGBA_8888 -- 设置背景
layoutParams.flags = LayoutParams.FLAG_NOT_TOUCH_MODAL -- 焦点设置Finish
layoutParams.gravity = Gravity.TOP|Gravity.LEFT -- 重力设置
layoutParams.width = LayoutParams.WRAP_CONTENT -- 布局宽度
layoutParams.height = LayoutParams.WRAP_CONTENT -- 布局高度
return layoutParams
end
lh.controlFlip = function(control,time)
luajava.runUiThread(function()
import "android.view.animation.Animation"
import "android.animation.ObjectAnimator"
xuanzhuandonghua = ObjectAnimator:ofFloat(control, "rotationY", {0, 360})
xuanzhuandonghua:setRepeatCount(0)
xuanzhuandonghua:setRepeatMode(Animation.REVERSE)
xuanzhuandonghua:setDuration(time)
xuanzhuandonghua:start()
end) end
lh.controlRotation2 = function(control, time)
luajava.runUiThread(function()
import "android.view.animation.Animation"
import "android.animation.ObjectAnimator"
xuanzhuandonghua = ObjectAnimator:ofFloat(control, "rotation", {
0, 360
})
xuanzhuandonghua:setRepeatCount(0)
xuanzhuandonghua:setRepeatMode(Animation.RESTART)
xuanzhuandonghua:setDuration(time)
xuanzhuandonghua:start()
end)
end
lh.controlRotation1 = function(control, time)
luajava.runUiThread(function()
import "android.view.animation.Animation"
import "android.animation.ObjectAnimator"
xuanzhuandonghua = ObjectAnimator:ofFloat(control, "rotation", {
0, -360
})
xuanzhuandonghua:setRepeatCount(0)
xuanzhuandonghua:setRepeatMode(Animation.RESTART)
xuanzhuandonghua:setDuration(time)
xuanzhuandonghua:start()
end)
end
lh.controlRotation3 = function(control, to1,to2)
luajava.runUiThread(function()
import "android.view.animation.Animation"
import "android.animation.ObjectAnimator"
xuanzhuandonghua = ObjectAnimator:ofFloat(control, "rotation", {
to1, to2
})
xuanzhuandonghua:setRepeatCount(0)
xuanzhuandonghua:setRepeatMode(Animation.RESTART)
xuanzhuandonghua:setDuration(3)
xuanzhuandonghua:start()
end)
end
--[[lh.controlBig = function(control,time)
luajava.runUiThread(function()
import "android.animation.ObjectAnimator"
ObjectAnimator():ofFloat(control,"scaleX", {
0, 0.4, 0.7, 1
}):setDuration(time):start()
ObjectAnimator():ofFloat(control,"scaleY", {
0, 0.4, 0.7, 1
}):setDuration(time):start()
end) end--]]
lh.controlSmall = function(control,time)
luajava.runUiThread(function()
import "android.animation.ObjectAnimator"
ObjectAnimator():ofFloat(control,"scaleX", {
1, 0.7, 0.4, 0
}):setDuration(time):start()
ObjectAnimator():ofFloat(control,"scaleY", {
1, 0.7, 0.4, 0
}):setDuration(time):start()
end) end
lh.controlBig = function(control,time)
luajava.runUiThread(function()
import "android.animation.ObjectAnimator"
ObjectAnimator():ofFloat(control,"scaleX",{0, 0.4, 0.7, 1}):setDuration(time):start()
ObjectAnimator():ofFloat(control,"scaleY",{0, 0.4, 0.7, 1}):setDuration(time):start()
end) end
lh.controlSmallX = function(control,time)
luajava.runUiThread(function()
import "android.animation.ObjectAnimator"
ObjectAnimator():ofFloat(control,"scaleX", {
1, 0.7, 0.4, 0
}):setDuration(time):start()
end) end
lh.controlBigX = function(control,time)
luajava.runUiThread(function()
import "android.animation.ObjectAnimator"
ObjectAnimator():ofFloat(control,"scaleX", {
0, 0.4, 0.7, 1
}):setDuration(time):start()
end) end
lh.controlFlip = function(control,time)
luajava.runUiThread(function()
import "android.view.animation.Animation"
import "android.animation.ObjectAnimator"
xuanzhuandonghua = ObjectAnimator:ofFloat(control, "rotationY", {
0, 360
})
xuanzhuandonghua:setRepeatCount(0)
xuanzhuandonghua:setRepeatMode(Animation.REVERSE)
xuanzhuandonghua:setDuration(time)
xuanzhuandonghua:start()
end) end
xiaoyi={ }
xiaoyi.controlFlip2 = function(control,time)
luajava.runUiThread(function()
import "android.view.animation.Animation"
import "android.animation.ObjectAnimator"
xuanzhuandonghua = ObjectAnimator:ofFloat(control, "rotationY", {0, 360})
xuanzhuandonghua:setRepeatCount(1)
xuanzhuandonghua:setRepeatMode(Animation.REVERSE)
xuanzhuandonghua:setDuration(time)
xuanzhuandonghua:start()
end
)
end
lh.controlWater = function(control,time)
luajava.runUiThread(function()
import "android.animation.ObjectAnimator"
ObjectAnimator():ofFloat(control,"scaleX", {
1, 0.8, 0.9, 1
}):setDuration(time):start()
ObjectAnimator():ofFloat(control,"scaleY", {
1,0.8,0.9,1
}):setDuration(time):start()
end) end
lh.controlWater2 = function ( control , time )
luajava.runUiThread ( function ( )
import "android.animation.ObjectAnimator"
ObjectAnimator ( ) : ofFloat ( control , "scaleX" , { 1 , 1.1 , 0.9 , 1 } ) : setDuration ( time ) : start ( )
ObjectAnimator ( ) : ofFloat ( control , "scaleY" , { 1 , 0.9 , 1.1 , 1 } ) : setDuration ( time ) : start ( )
end
)
end
slctb = getVerticalBG({0x00000000,0x00000000},15)
slcta = getVerticalBG({0xFF1185FC,0xFF1185FC},15)
function getButtonBG()
local selector = luajava.getStateListDrawable()
selector:addState({
android.R.attr.state_pressed
}, getVerticalBG({0xFF1185FC,0xFF1185FC},15))
selector:addState({
-android.R.attr.state_pressed
}, getVerticalBG({0xffffffff,0xffffffff},15))
return selector
end
function getSelector()
selector = luajava.getStateListDrawable()
selector:addState({
android.R.attr.state_pressed
}, slcta) -- 点击时候的背景
selector:addState({
-android.R.attr.state_pressed
}, slctb) -- 没点击的背景
return selector
end
hanshu = function(v, event)
local Action = event:getAction()
if Action == MotionEvent.ACTION_DOWN then
isMove = false
RawX = event:getRawX()
RawY = event:getRawY()
x = mainLayoutParams.x
y = mainLayoutParams.y
elseif Action == MotionEvent.ACTION_MOVE then
isMove = true
mainLayoutParams.x = tonumber(x) + (event:getRawX() - RawX)
mainLayoutParams.y = tonumber(y) + (event:getRawY() - RawY)
window:updateViewLayout(floatWindow, mainLayoutParams)
end
end
function 获取图片(txt)
txt = string.url(txt,"de")
ntxt = string.sub(string.gsub(txt,"/","-"),-10,-1)
if string.find(tostring(txt),"http") ~= nil then
if panduan("/sdcard/零号/资源/"..ntxt) == false then
file.download(txt,"/sdcard/零号/资源/"..ntxt)
else
if file.length("/sdcard/零号/资源/"..ntxt) <= 1 then
file.download(txt,"/sdcard/零号/资源/"..ntxt)
end
end
txt = "/sdcard/零号/资源/"..ntxt
end
return luajava.getBitmapDrawable(txt)
end
YoYoImpl = luajava.getYoYoImpl()
lh.menu = function(sview)
菜单页数=#sview
当前分区={} 分区页数={}
侧边={} 功能区={} 顶边={
LinearLayout,
layout_height='match_parent',
layout_width='match_parent',
}
beij=getCorner({0xffffffff,0xffffffff},0,0,0xffFFE543,0,0,0,0)
侧边ui={
LinearLayout,
layout_width='wrap_content',
layout_height='match_parent',
id='cebians',
gravity='center',
}
jmbg={}
dbback=getVerticalBG({0xFFAD5A5A,0xFFAD5A5A},15)
for i = 1,菜单页数 do
分区页数[i]= #sview[i]
table.insert(顶边,{
LinearLayout,
orientation='vertical',
layout_height='match_parent',
layout_width='wrap_content',
gravity='center_horizontal',
{
TextView,
layout_weight=1,
layout_height='match_parent',
layout_width='wrap_content',
padding={'15dp','2dp','15dp','2dp'},
text=sview[i]['分页名字'],
textColor='0xff000000',
textSize='13sp',
gravity='center',
id='ding'..i,
elevation='2dp',
layout_margin='4dp',
onClick=function() lh.controlFlip(_ENV["ding"..i] , 600 )
切换(i) end,
},
{LinearLayout,
layout_width='25dp',
layout_height='3dp',
layout_marginLeft='10dp',
layout_marginRight='10dp',
__onFinish=function(v)
_ENV['dingbar'..i]=v
end,
}
})
功能区[i]={}
jmbg[i]={}
local cebian = {
LinearLayout,
layout_height = "match_parent",
layout_width = "wrap_content",
orientation = "horizontal",
gravity = "center",
orientation='vertical',
padding={'4dp','0dp','0dp','0dp'},
}
local layoutm={
LinearLayout,
id = "layoutm"..i,
padding='4dp',
layout_width = "match_parent",
orientation = "vertical",
gravity = "center_horizontal",
}
for j = 1,分区页数[i] do
jmbg[i][j]={
getCorner({0x00000000,0x00000000},10,0,0xff000000,10,0,0,10),
getCorner({0xFFAD5A5A,0xFFAD5A5A},20,0,0xff000000,20,0,0,10),
}
cebian[#cebian+1] =
{
TextView,
id = "jm"..i..j,
background=jmbg[i][j][1],
text = sview[i][j]['分区名字'],
gravity = "center",
textSize = "12sp",
textColor = "0xff000000",
layout_height = "34dp",
layout_width = "68dp",
onClick=function()lh.controlFlip(_ENV["jm"..i..j] , 600 )
分区(j) end
}
local menulayout={
LinearLayout,
layout_width='match_parent',
layout_height='wrap_content',
visibility = "gone",
orientation = "vertical",
id='menu'..i..j,
}
for k,v in pairs(sview[i][j]['功能配置']) do
table.insert(menulayout,v)
end
local menulayout=luajava.loadlayout(menulayout)
功能区[i][j]=menulayout
table.insert(layoutm,menulayout)
end
侧边[i] = luajava.loadlayout(
{
LinearLayout,
layout_height = "wrap_content",
layout_width = "wrap_content",
orientation='vertical',
layout_marginLeft='8dp',
layout_marginRight='dp',
layout_marginBottom='8dp',
{
ImageView,
layout_marginTop = "0dp",
layout_width = "80dp",
layout_height = "80dp",
src=获取图片(左上角人物),
},{
ScrollView,
layout_height = "match_parent",
layout_width = "wrap_content",
cebian
}})
table.insert(侧边ui,侧边[i])
local menus={
LinearLayout,
layout_width = "270dp",
layout_height = "300dp",
visibility = "gone",
orientation = "vertical",
id=luajava.ids['menus'],
background=菜单背景,
{
ScrollView,
fillViewport = "true",
--padding = "10dp",
gravity = "center",
layout_width = "match_parent",
layout_height = "300dp",
orientation = "horizontal",
layoutm
}}
_ENV["layout"..i] = luajava.loadlayout(menus)
end
顶边={LinearLayout,
layout_width='match_parent',
layout_height='match_parent',
layout_marginRight='100dp',
onClick=function() end,
onTouch=hanshu,
顶边
}
ckou = {
LinearLayout,
layout_width = "wrap_content",
layout_height = "wrap_content",
{ScrollView,
layout_height='300dp',
layout_width='70dp',
background=侧边背景,
侧边ui
}
}
for i = 1,菜单页数 do
ckou[#ckou+1] = _ENV["layout"..i]
end
function topSelect()
local selector = luajava.getStateListDrawable()
selector:addState({
android.R.attr.state_pressed
}, getVerticalBG({0x22161616,0x22161616},30))
selector:addState({
-android.R.attr.state_pressed
}, empty)
return selector
end
topbar = luajava.loadlayout({
LinearLayout,
layout_width="fill_parent",
layout_height="35dp",
background=getCorner({0xffffffff,0xffffffff},15,0,0xff232323,20,20,0,0),
onClick=function() end,
onTouch=hanshu,
{LinearLayout,
layout_width="35dp",
layout_height="match_parent",
gravity="center",
{
LinearLayout,
gravity="center",
background=获取图片(悬浮窗图标),
layout_width = "20dp",
layout_height = "20dp",
layout_marginLeft = "5dp",
onClick = 隐藏,
onTouch = hanshu,
}
},
{LinearLayout,
layout_width="wrap_content",
layout_height="match_parent",
gravity="center",
{
LinearLayout,
id='cvv',
layout_width='match_parent',
layout_height='match_parent',
gravity="center",
}
}
})
ckou = luajava.loadlayout(ckou)
floatWindow = {
FrameLayout,
id = "motion",
elevation = "10dp",
onTouch = hanshu,
onClick = function() end,
layout_width = "wrap_content",
orientation = "vertical",
gravity = "center_vertical",
layout_height = "wrap_content",
{LinearLayout,
orientation='vertical',
id='chuangk',
visibility='gone',
{--顶部栏
FrameLayout,
orientation = "horizontal",
padding = "2dp",
layout_height='35dp',
layout_width="fill_parent",
background=getCorner({0xffffffff,0xffffffff},20,0,0xffFFE543,25,25,25,25),
topbar,
{
LinearLayout,
layout_gravity="center_vertical|right",
padding={"2dp","2dp","8dp","2dp"},
layout_marginLeft='2dp',
layout_marginRight='2dp',
layout_marginTop='2dp',
layout_marginBottom='2dp',
layout_width = "40dp",
layout_height = "24dp",
gravity = "center",
onClick = 隐藏,
onTouch = hanshu,
{ImageView,
gravity = "right",
src=getRes("ca_dy"),
layout_height = "17dp",
layout_width = "17dp",
}
}
},{
FrameLayout,
orientation = "horizontal",
padding = "2dp",
layout_height='35dp',
layout_width="fill_parent",
background=getCorner({0xffffffff,0xffffffff},20,0,0xffFFE543,25,25,25,25),
顶边,
},
ckou,
},
{
ImageView,
id = "control",
background = 获取图片(悬浮窗图标),
layout_width = "40dp",
layout_height = "40dp",
onTouch = hanshu,
onClick = 隐藏,
}
}
local function invoke()
local ok
local RawX, RawY, x, y
mainLayoutParams = getLayoutParams()
floatWindow = luajava.loadlayout(floatWindow)
local function invoke2()
window:addView(floatWindow, mainLayoutParams)
cvv:addView(particle2(闪光标题))
block('end')
end
for i=1,#MSwitch do
SwitchColor(luajava.getIdView(MSwitch[i]),0xff0062FF,
0x28FFFFFF, --轨道(开,关)
0xFFFFFFFF,
0x88888888--深蓝色
)
end
local runnable = luajava.getRunnable(invoke2)
local handler = luajava.getHandler()
handler:post(runnable)
block('join')
local isMove
end
invoke(swib1,swib2)
if ffui~=nil then ffui() end
切换(1) 分区(1)
隐藏()
gg.setVisible(false)
luajava.setFloatingWindowHide(true)
qhkai = 0
qiehuan = function()
if qhkai == 0 then
qhkai = 1
draw.remove()
luajava.runUiThread(function()
for k,v in pairs(floattable) do
if v==1 then
lh.controlSmall(_ENV[k],400)
end
end
lh.controlSmall(floatWindow,400)
end)
gg.sleep(400)
luajava.runUiThread(function()
floatWindow:setVisibility(View.GONE)
for k,v in pairs(floattable) do
if v==1 then
_ENV[k]:setVisibility(View.GONE)
end
end
end)
else
qhkai = 0
huiz()
draw.text('.', -9200,-9200)
luajava.runUiThread(function()
floatWindow:setVisibility(View.VISIBLE)
lh.controlBig(floatWindow,400)
for k,v in pairs(floattable) do
if v==1 then
lh.controlBig(_ENV[k],400)
_ENV[k]:setVisibility(View.VISIBLE)
end
end
end)
end
end
huiz()
draw.text('.', -9200,-9200)
while true do
if tuichu==1 then break end
if 音量键 then
jianting3(qiehuan)
gg.sleep(130)
end
end
luajava.setFloatingWindowHide(false)
luajava.setFloatingWindowHide(false)
end---menu
import'android.hardware.*';
---@type android.hardware.SensorEventListener
local sensor = luajava.createProxy('android.hardware.SensorEventListener', {
onSensorChanged = functions.debounce(function()
if 摇一摇==false then return 0 end
if qhkai~=0 then
qhkai=0
luajava.runUiThread(function()
floatWindow:setVisibility(View.VISIBLE)
YoYoImpl:with("FadeIn"):duration(300):playOn(floatWindow)
end)
else
qhkai=1
luajava.newThread(function()
luajava.runUiThread(function()
YoYoImpl:with("FadeOut"):duration(300):playOn(floatWindow)
end)
gg.sleep(400)
luajava.runUiThread(function()
floatWindow:setVisibility(View.GONE)
end)
draw.remove()
gg.toast("隐藏")
end):start()
end
end,500)
})
dexloader=dex.loadfile('/sdcard/零号/资源/classes3.dex')
MySensorManager = dexloader:loadClass('yaocn.rlyun.yaoyiyao.MySensorManager')
luajava.runOnUiThread(function()
MySensorManager(context, sensor)
end)
摇一摇=true
lh.controlRotation9 = function(control, time,t)
luajava.runUiThread(function()
import "android.view.animation.Animation"
import "android.animation.ObjectAnimator"
xuanzhuandonghua = ObjectAnimator:ofFloat(control, "rotation", {
time,t
})
xuanzhuandonghua:setRepeatCount(0)
xuanzhuandonghua:setRepeatMode(Animation.RESTART)
xuanzhuandonghua:setDuration(400)
xuanzhuandonghua:start()
end)
end
namelist = {}
param1 = {}
floattable = {}
function 打开页面(name)
if _ENV['fenye'..name]==nil then gg.alert(name..'页面未创建') return 0 end
if floattable['fenye'..name]==1 then 关闭页面(name) return end
floattable['fenye'..name]=1
window = context:getSystemService("window") -- 获取窗口管理器
local function invoke(name,func1,func2)
local function invoke2()
window:addView(_ENV['fenye'..name], param1[name])
end
local runnable = luajava.getRunnable(invoke2)
local handler = luajava.getHandler()
handler:post(runnable)
end
invoke(name,func1,func2)
end
function 关闭页面(name)
if _ENV['fenye'..name]==nil then gg.alert(name..'页面未创建') return 0 end
if floattable['fenye'..name]==0 then return 0 end
floattable['fenye'..name]=0
local function invoke2()
window:removeView(_ENV['fenye'..name])
end
local runnable = luajava.getRunnable(invoke2)
local handler = luajava.getHandler()
handler:post(runnable)
end
function 创建页面(name,vs)
if type(vs)~='table' then gg.alert(name..'创建页面格式错误') os.exit() end
local tmp={LinearLayout,
layout_width='match_parent',
orientation='vertical'
}
for i=1,#vs do
table.insert(tmp,vs[i])
end
param1[name] = getLayoutParams2()
_ENV['fenye'..name] = luajava.loadlayout(
{
LinearLayout,
layout_width = "wrap_content",
layout_height = "wrap_content",
orientation='vertical',
gravity='center_horizontal',
background=luajava.loadlayout({
GradientDrawable ,
color = "0xffeeeeee" ,
cornerRadius = 15
} ),
padding={'10dp','5dp','10dp','5dp'},
{
TextView,
textColor='0xFF1185FC',
text = name,
textSize='14sp',
gravity = "center",
layout_width = "70dp",
layout_height = "wrap_content",
onClick=function()
local vis=luajava.getIdView(name)
if vis:getVisibility()==8.0 then
lh.controlBig(vis,400)
vis:setVisibility(View.VISIBLE)
else
lh.controlSmall(vis,400)
vis:setVisibility(View.GONE)
end
end,
onTouch=function(v, event)
local Action = event:getAction()
if Action == MotionEvent.ACTION_DOWN then
isMove = false
RawX = event:getRawX()
RawY = event:getRawY()
x = param1[name].x
y = param1[name].y
elseif Action == MotionEvent.ACTION_MOVE then
isMove = true
param1[name].x = tonumber(x) + (event:getRawX() - RawX)
param1[name].y = tonumber(y) + (event:getRawY() - RawY)
window:updateViewLayout(_ENV['fenye'..name], param1[name])
end
end,
},
{ScrollView,
visibility='gone',
id=luajava.newId(name),
layout_width='120dp',
layout_height='250dp',
tmp
}
})
if type(_ENV['fenye'..name])~='userdata' then gg.alert(name..'生成失败') os.exit() end
end
paramt = {}
titletable = {}
corb = true
function getLayoutParams2()
local prm = luajava.new(WindowManager.LayoutParams)
layoutParams1 = prm
if (Build.VERSION.SDK_INT >= 26) then -- 设置悬浮窗方式
layoutParams1.type = prm.TYPE_APPLICATION_OVERLAY
else
layoutParams1.type = prm.TYPE_PHONE
end
layoutParams1.format = PixelFormat.RGBA_8888 -- 设置背景
layoutParams1.flags = prm.FLAG_NOT_FOCUSABLE -- 焦点设置Finish
layoutParams1.gravity = Gravity.CENTER -- 重力设置
layoutParams1.width = prm.WRAP_CONTENT -- 布局宽度
layoutParams1.height = prm.WRAP_CONTENT -- 布局高度
return layoutParams1
end
function getjb()
local jianbians = luajava.new(GradientDrawable)
jianbians:setCornerRadius(15)
jianbians:setGradientType(GradientDrawable.LINEAR_GRADIENT)
jianbians:setColors({0xff397EF8,0xff25C4FD})
jianbians:setOrientation(GradientDrawable.Orientation.LEFT_RIGHT)
return jianbians
end
function getjb()
local jianbians = luajava.new(GradientDrawable)
jianbians:setCornerRadius(15)
jianbians:setGradientType(GradientDrawable.LINEAR_GRADIENT)
jianbians:setColors({0xff397EF8,0xff25C4FD})
jianbians:setOrientation(GradientDrawable.Orientation.LEFT_RIGHT)
return jianbians
end
tjb1=getjb()
tjb2=luajava.loadlayout {
GradientDrawable,
color = "#aa0082FF",
cornerRadius = 12
}
function chatbg()
local jb=getVerticalBG({0xaa161616,0xaa161616},17,2,0xffd8d8d8)
return jb
end
function getShape3()
jianbians = luajava.loadlayout({
GradientDrawable,
type = "linear",
angle = "135",
})
jianbians:setCornerRadius(22)
jianbians:setOrientation(GradientDrawable.Orientation.TL_BR)
jianbians:setColors({
0x55ffffff,0x55ffffff
})
jianbians:setStroke(5,0xffffffff)--边框宽度和颜色
return jianbians
end
function chatbg2()
local selector = luajava.getStateListDrawable()
selector:addState({
android.R.attr.state_pressed
}, luajava.loadlayout {
GradientDrawable,
color = "#aa2D8BFF",
cornerRadius = 12
}) -- 点击时候的背景
selector:addState({
-android.R.attr.state_pressed
}, getjb()) -- 没点击的背景
return selector
end
function visi (tid , ttid)
vibra:vibrate(4)
local tview = luajava.getIdValue (tid)
local ttview = luajava.getIdValue (ttid)
if not tview then
return 0
end
if tonumber (tostring (tview : getVisibility ())) == 8.0 then
YoYoImpl:with("FadeIn"):duration(200):playOn(boxes[tid])
lh.controlRotation9(boxpic[tid],90,0)
else
lh.controlRotation9(boxpic[tid],0,90)
end
end
function visi2 (tid , ttid)
local tview = luajava.getIdValue (tid)
local ttview = luajava.getIdValue (ttid)
if not tview then
return 0
end
if tonumber (tostring (tview : getVisibility ())) == 8.0 then
tview : setVisibility (View.VISIBLE)
else
tview : setVisibility (View.GONE)
end
end
function jybg(color,jiao)
return luajava.loadlayout{GradientDrawable,color=color,
cornerRadius=jiao}
end
boxes = {} boxpic = {}
function lh.box (views)
local tid = "box"..guid ()
boxpic[tid] = luajava.loadlayout {
ImageView ,
background = getRes("right"),
layout_width = "24dp" ,
layout_height = "24dp" ,
}
local ttid = tid.."6"
local t1id = guid ()
firadio = {
LinearLayout ,
layout_width = 'fill_parent' ,
layout_height = "wrap_content" ,
layout_marginTop = "4dp" ,
layout_marginBottom = "3dp" ,
gravity = "center" ,
background=luajava.loadlayout {
GradientDrawable ,
color = 0xffffffff ,
cornerRadius = 15
} ,padding = {
"0dp","0dp","6dp","0dp"
},
orientation = "vertical" ,
onTouch = function() visi2 (tid , ttid) visi(tid,ttid)
end,
LayoutTransition=layoutTransition,
}
if type (views [1]) == "string" or type (views [1]) == "number" then
firadio [# firadio + 1] = {
LinearLayout ,
layout_width = 'fill_parent' ,
layout_height = "40dp" ,
gravity = "center_vertical" ,
layout_marginTop = "2dp" ,
layout_marginLeft='2dp',
layout_marginRight='2dp',
elevation='2dp',
layout_marginBottom = "2dp" ,
LayoutTransition=layoutTransition,
onClick = function ()
visi2 (tid , ttid)
visi (tid , ttid)
end
,
background = luajava.loadlayout {
GradientDrawable ,
color = 0xffffffff ,
cornerRadius = 15
} ,padding = {
"0dp","0dp","6dp","0dp"
},
{
TextView , text = views [1] ,
textSize = "13sp" ,
layout_marginLeft = "10dp" ,
layout_width = "match_parent" ,
layout_weight=1,
textColor = "#333333" ,
gravity = "left" ,
Typeface=font,
},{
LinearLayout ,
padding={"0dp","0dp","10dp","0dp"},
layout_width = "30dp" ,
layout_height = "30dp" ,
gravity = "center",
boxpic[tid],
}
} else
gg.alert ("lh.box的table内第一个元素必须是string") os.exit ()
end
radios = {
LinearLayout ,
layout_marginLeft = "0dp" ,
layout_marginRight = "0dp" ,
orientation = "vertical" ,
visibility = "gone" ,
id = luajava.newId (tid) ,
padding = "0dp" ,
layout_width = 'fill_parent' ,
LayoutTransition=layoutTransition,
}
for i = 2 , # views do
radios [# radios + 1] = views [i]
end
boxes[tid] = luajava.loadlayout(radios)
firadio [# firadio + 1] = boxes[tid]
_ENV [t1id] = luajava.loadlayout (firadio)
return _ENV [t1id]
end
corbk = true
当前ui = 1
function 分区(x)
当前分区[当前ui]=x
luajava.runUiThread(function()
for i=1,分区页数[当前ui] do
_ENV['menu'..当前ui..i]:setVisibility(View.GONE)
_ENV['jm'..当前ui..i]:setTextColor(0xff000000)
_ENV['jm'..当前ui..i]:setBackground(jmbg[当前ui][i][1])
end
_ENV['menu'..当前ui..当前分区[当前ui]]:setVisibility(View.VISIBLE)
_ENV['jm'..当前ui..当前分区[当前ui]]:setTextColor(0xffffffff)
_ENV['jm'..当前ui..当前分区[当前ui]]:setBackground(getCorner({0xFF1185FC,0xFF1185FC},10,0,0xff000000,10,0,0,10))
lh.controlBigY(_ENV['jm'..当前ui..当前分区[当前ui]],600)
end)
end
function 切换(x)
当前ui = x
luajava.runUiThread(function()
if 当前分区[当前ui]==nil then
分区(1)
end
for i = 1,菜单页数 do
_ENV["ding"..i]:setTextColor(0xffD3DDE7)
_ENV['dingbar'..i]:setBackground(empty)
_ENV["layout"..i]:setVisibility(View.GONE)
侧边[i]:setVisibility(View.GONE)
end
_ENV["ding"..当前ui]:setTextColor(0xFFAD5A5A)
_ENV["layout"..当前ui]:setVisibility(View.VISIBLE)
_ENV['dingbar'..当前ui]:setBackground(dbback)
lh.controlBigY(_ENV['dingbar'..当前ui],600)
侧边[当前ui]:setVisibility(View.VISIBLE)
end)
end
显示 = 0
beij2 = luajava.loadlayout({
GradientDrawable,
color = "#001E1C27",
cornerRadius = 10
})
function lh.text(txt,color,size)
if not txt then txt = "未设置文字" end
if not color then color = "#545454" end
if not size then size = "12sp" end
return luajava.loadlayout(
{
TextView,
text = txt,
textSize = size,
textColor = color,
layout_width = "match_parent",
padding={'10dp','0dp','0dp','0dp'}
})
end
显示 = 0
function 隐藏()
already=true
luajava.runUiThread(function()
if tonumber(tostring(chuangk:getVisibility())) == 8.0 then
control:setVisibility(View.GONE)
显示 = 1
chuangk:setVisibility(View.VISIBLE)
_ENV["layout"..当前ui]:setVisibility(View.VISIBLE)
YoYoImpl:with("FadeIn"):duration(500):playOn(floatWindow)
floatWindow:setBackground(beij)
mainLayoutParams.flags = LayoutParams.FLAG_NOT_TOUCH_MODAL
window : updateViewLayout (floatWindow , mainLayoutParams)
else
显示 = 0
luajava.startThread(function()
luajava.runUiThread(function()
YoYoImpl:with("FadeOut"):duration(500):playOn(floatWindow)
end)
gg.sleep(500)
luajava.runUiThread(function()
chuangk:setVisibility(View.GONE)
floatWindow:setBackground(beij2)
control:setVisibility(View.VISIBLE)
_ENV["layout"..当前ui]:setVisibility(View.GONE)
mainLayoutParams.flags = LayoutParams.FLAG_NOT_FOCUSABLE
window : updateViewLayout (floatWindow , mainLayoutParams)
YoYoImpl:with("FadeIn"):duration(400):playOn(floatWindow)
end)
end)
end
end)
end
import("android.media.AudioManager")
audi = context:getSystemService("audio")
audiotype = {
AudioManager.STREAM_ALARM, --手机闹铃的声音
AudioManager.STREAM_MUSIC, --手机音乐的声音
AudioManager.STREAM_NOTIFICATION, --系统提示的通知
AudioManager.STREAM_RING, --电话铃声的声音
AudioManager.STREAM_SYSTEM, --手机系统的声音
AudioManager.STREAM_VOICE_CALL, --语音电话的声音
AudioManager.STREAM_DTMF, --DTMF音调的声音
}
yinl = {}
for i = 1,#audiotype do
yinl[i] = {}
yinl[i].type = audiotype[i]
yinl[i].min = audi:getStreamMinVolume(audiotype[i])
yinl[i].max = audi:getStreamMaxVolume(audiotype[i])
yinl[i].now = audi:getStreamVolume(audiotype[i])
end
function jianting2()
yinln = {}
for i = 1,#audiotype do
yinln[i] = {}
yinln[i].type = audiotype[i]
yinln[i].min = audi:getStreamMinVolume(audiotype[i])
yinln[i].max = audi:getStreamMaxVolume(audiotype[i])
yinln[i].now = audi:getStreamVolume(audiotype[i])
if yinln[i].now > yinl[i].now then
audi:adjustStreamVolume(yinln[i].type,AudioManager.ADJUST_LOWER,0)
gg.alert("up")
elseif yinln[i].now < yinl[i].now then
audi:adjustStreamVolume(yinln[i].type,AudioManager.ADJUST_RAISE,0)
gg.alert("down\n"..yinln[i].now.."\n"..yinl[i].now)
end
end
end
yltype = 0
function jianting3(func)
yinln = {}
for i = 1,#audiotype do
yinln[i] = {}
yinln[i].type = audiotype[i]
yinln[i].now = audi:getStreamVolume(audiotype[i])
if yinln[i].now > yinl[i].now then
yinl[i].now = yinln[i].now
if yltype == 1 then
yltype = 0
func()
end
elseif yinln[i].now < yinl[i].now then
yinl[i].now = yinln[i].now
if yltype == 0 then
yltype = 1
func()
end
end
end
end
function jianting(func)
yinln = {}
for i = 1,#audiotype do
yinln[i] = {}
yinln[i].type = audiotype[i]
yinln[i].now = audi:getStreamVolume(audiotype[i])
if yinln[i].now >= yinl[i].max then
audi:adjustStreamVolume(yinln[i].type,AudioManager.ADJUST_LOWER,0)
end
if yinln[i].now > yinl[i].now then
audi:setStreamVolume(yinln[i].type,yinl[i].now,0)
func()
end
end
end
function guid()
seed = {
'e','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'
}
tb = {}
for i = 1,32 do
table.insert(tb,seed[math.random(1,16)])
end
sid = table.concat(tb)
return string.format('%s%s%s%s%s',
string.sub(sid,1,8),
string.sub(sid,10,12),
string.sub(sid,21,22))
..string.format('%s%s%s%s%s',
string.sub(sid,1,6),
string.sub(sid,21,25)
)
end
local function exit()
tuichu = 1
luajava.setFloatingWindowHide(false)
luajava.post(function()
window:removeView(floatWindow)
for k,v in pairs(floattable) do
if v==1 then
window:removeView(_ENV[k])
end
end
end)
end
setExitEvent(exit)
lh.controlWater = function(control,time)
luajava.runUiThread(function()
import "android.animation.ObjectAnimator"
ObjectAnimator():ofFloat(control,"scaleX", {
1, 0.8, 0.9, 1
}):setDuration(time):start()
ObjectAnimator():ofFloat(control,"scaleY", {
1,0.8,0.9,1
}):setDuration(time):start()
end) end
lh.controlSmall = function(control,time)
luajava.runUiThread(function()
import "android.animation.ObjectAnimator"
ObjectAnimator():ofFloat(control,"scaleX", {
1, 0.7, 0.4, 0
}):setDuration(time):start()
ObjectAnimator():ofFloat(control,"scaleY", {
1, 0.7, 0.4, 0
}):setDuration(time):start()
end) end
lh.controlBig = function(control,time)
luajava.runUiThread(function()
import "android.animation.ObjectAnimator"
ObjectAnimator():ofFloat(control,"scaleX", {
0, 0.4, 0.7, 1
}):setDuration(time):start()
ObjectAnimator():ofFloat(control,"scaleY", {
0, 0.4, 0.7, 1
}):setDuration(time):start()
end) end
lh.controlBigY = function(control,time)
luajava.runUiThread(function()
import "android.animation.ObjectAnimator"
ObjectAnimator():ofFloat(control,"scaleX", {
0, 0.4, 0.7, 1
}):setDuration(time):start()
end) end
MSwitch = {}
function lh.switch(name,func1,func2)
ID = name..guid()
MSwitch[#MSwitch+1] = ID
Checked = false
if name=="音量键隐藏UI" then
音量键 = true
Checked = true
end
if name=="摇一摇隐藏UI" then
摇一摇 = true
Checked = true
end
rest = luajava.loadlayout({
LinearLayout,
layout_width="fill_parent",
layout_height = "47dp",
gravity = "center",
{
LinearLayout,
layout_width = 'fill_parent',
layout_height = "40dp",
gravity = "center",
elevation = "2dp",
layout_marginRight = "4dp",
layout_marginLeft = "4dp",
background = luajava.loadlayout {
GradientDrawable ,
color = 0xffffffff ,
cornerRadius = 15
} ,padding = {
"0dp","0dp","6dp","0dp"
},
{
TextView,
Typeface=font,
gravity = "top",
text = name,
textColor = "0xff000000",
textSize = "13sp",
layout_weight = 1,
layout_width = 'fill_parent',
layout_marginLeft = "10dp",
layout_marginRight = "20dp",
},
{
MaterialSwitch,
id = luajava.newId(ID),
layout_weight = 1,
checked = Checked,
layout_width = 'fill_parent',
layout_height = 'wrap_content',
onCheckedChange = function(compoundButton, isChecked)
luajava.newThread(function()
if isChecked then
pcall(func1)
else
pcall(func2)
end
end):start()
end
}
}
})
return rest
end
import "android.graphics.Color"
import "android.content.res.ColorStateList"
function SliderColor(id,color1,color2,color3)
id:setTrackActiveTintList(ColorStateList({{}},{color1}))
id:setTrackInactiveTintList(ColorStateList({{}},{color2}))
id:setThumbTintList(ColorStateList({{}},{color3}))
end
function SwitchColor(id,color1,color2,color3,color4)
id:setTrackTintList(ColorStateList({{android.R.attr.state_checked},{}},{color1,color2}))
id:setThumbTintList(ColorStateList({{android.R.attr.state_checked},{-android.R.attr.state_checked}},{color3,color4}))
end
lh.controlRotation9 = function(control, time,t)
luajava.runUiThread(function()
import "android.view.animation.Animation"
import "android.animation.ObjectAnimator"
xuanzhuandonghua = ObjectAnimator:ofFloat(control, "rotation", {
time,t
})
xuanzhuandonghua:setRepeatCount(0)
xuanzhuandonghua:setRepeatMode(Animation.RESTART)
xuanzhuandonghua:setDuration(400)
xuanzhuandonghua:start()
end)
end
buts={}
function lh.button(txt,func,txtc)
if not txt then txt = "未设置" end
if not txtc then txtc="0xff000000" end
local tid="Cbutton"..guid()
buts[tid]=luajava.loadlayout({
LinearLayout,
layout_width = 'match_parent',
layout_height = "40dp",
gravity = "center",
{
LinearLayout,
layout_width = 'match_parent',
layout_height = "35dp",
gravity = "center",
elevation = "2dp",
layout_marginRight = "4dp",
layout_marginLeft = "4dp",
background = getButtonBG(),
padding = {
"0dp","0dp","6dp","0dp"
},
onClick = function()
lh.controlWater(buts[tid],300)
luajava.newThread(func):start() end,
{
TextView,
Typeface=font,
gravity = "top",
text = txt,
textColor = txtc,
textSize = "13sp",
layout_weight = 1,
layout_width = 'fill_parent',
layout_marginLeft = "10dp",
layout_marginRight = "20dp",
},
{
ImageView,
layout_weight = 1,
src=getRes("heir"),
ColorFilter = "0xffeeeeee",
layout_marginRight = "4dp",
layout_height="30dp",
layout_gravity = "center",
layout_width="30dp",
}
}
})
return buts[tid]
end
function getButtonBG()
local selector = luajava.getStateListDrawable()
selector:addState({
android.R.attr.state_pressed
}, getVerticalBG({0x34000400,0x34000400},17))
selector:addState({
-android.R.attr.state_pressed
}, getVerticalBG({0xffffffff,0xffffffff},17))
return selector
end
function lh.intcheck(name,func1,func2)
nid = name..guid()
swits[nid]={
getVerticalBG({0xff0091FF,0xff4F82FF},18),
getVerticalBG({0x88161616,0x88161616},18),
false,
}
local func = 开关5(name,func1,func2,nid)
if not name then name = "未设置" end
_ENV[nid.."k"]=luajava.loadlayout({
TextView,
id = luajava.newId(nid.."k"),
background = swits[nid][2],
layout_width = 'wrap_content',
layout_height = 'wrap_content',
padding={"13dp","3dp","13dp","3dp"},
gravity="center",
text="关",
textColor="#ffffff",
textSize="13sp",
})
_ENV[nid.."g"]=luajava.loadlayout({LinearLayout,
{
TextView,
layout_marginLeft="7dp",
id = luajava.newId(nid.."g"),
background = empty,
layout_width = 'wrap_content',
layout_height = 'wrap_content',
padding={"13dp","3dp","13dp","3dp"},
gravity="center",
text="开",
textColor="#ffffff",
textSize="13sp",
}})
local rest = luajava.loadlayout({
FrameLayout,
layout_width = 'wrap_content',
layout_height = "wrap_content",
layout_marginTop = "1dp",
layout_marginBottom = "1dp",
padding={"0dp","0dp","0dp","0dp"},
{
LinearLayout,
layout_marginLeft="8dp",
layout_marginTop="3dp",
layout_marginBottom="3dp",
layout_marginRight="6dp",
onClick = function() luajava.newThread(function() func() end):start() end,
layout_width = 'fill_parent',
layout_height = "wrap_content",
gravity = "center_vertical",
layout_gravity="center",
--background = randbg2(),
orientation="vertical",
{
TextView,
gravity = "left",
text = name,
textColor="#000000",
textSize = "11sp",
layout_height="wrap_content",
layout_width = '100dp',
},
{
LinearLayout,
id = luajava.newId(nid),
background = getVerticalBG({0xe84B7CFF,0x88974BFF},18,4,0xff69C2FF),
layout_width = 'wrap_content',
layout_height = 'wrap_content',
padding = "5dp",
_ENV[nid.."k"], _ENV[nid.."g"]
}},
{LinearLayout,
layout_height="15dp",
layout_width="15dp",
layout_marginLeft="4dp",
layout_marginTop="14dp",
},{LinearLayout,
layout_height="20dp",
layout_width="30dp",
layout_gravity="right|bottom"
}
})
return rest
end
function 开关5(name,func1,func2,nid)
local sname = nid
local localname=name
name = nid..guid()
_ENV[name] = "关"
if func1 == nil then func1 = "" end
if func2 == nil then func2 = "" end
if type(func1) == "function" then
return function()
namers = _ENV[name]
if namers ~= "开" then
swits[sname][3]=true
vibra:vibrate(14)
luajava.runUiThread(function()
luajava.getIdValue(sname.."k"):setBackground(empty)
luajava.getIdValue(sname.."g"):setBackground(swits[sname][1])
YoYoImpl:with("FadeInLeft"):duration(400):playOn(_ENV[nid.."g"])
end)
_ENV[name] = "开"
pcall(func1)
else
swits[sname][3]=false
vibra:vibrate(14)
luajava.runUiThread(function()
luajava.getIdValue(sname.."k"):setBackground(swits[sname][2])
luajava.getIdValue(sname.."g"):setBackground(empty)
YoYoImpl:with("FadeInRight"):duration(400):playOn(_ENV[nid.."k"])
end)
_ENV[name] = "关"
pcall(func2)
end
end
end
end
import "android.graphics.Color"
import "android.content.res.ColorStateList"
function lh.check(cklist)
if #cklist==0 then return nil end
local rest = {
LinearLayout,
layout_width = 'match_parent',
layout_height = "wrap_content",
gravity = "center",
orientation="vertical",
}
for i = 1, #cklist,2 do
local tempTable = {LinearLayout,
layout_width = 'match_parent',
layout_height = "wrap_content",
gravity = "left",
orientation="horizontal"
}
for j = 0, 1 do
if cklist[i + j] ~= nil then
local name = cklist[i + j][1]
local func1 = cklist[i + j][2]
local func2 = cklist[i + j][3]
if not name then name = "未设置" end
rstt = lh.intcheck(name,func1,func2)
table.insert(tempTable, rstt)
else
table.insert(tempTable, {LinearLayout,
layout_width = 'match_parent',
layout_weight=1,})
end
end
table.insert(rest, tempTable)
end
return luajava.loadlayout(rest)
end
function 开关(name,func1,func2)
local localname=name
if func1 == nil then func1 = function() end end
if func2 == nil then func2 = function() end end
if type(func1) == "function" then
return function()
namers = _ENV[name]
if namers ~= "开" then
_ENV[name] = "开"
pcall(func1)
else
_ENV[name] = "关"
pcall(func2)
end
end
end
end
function lh.intcheck(name,func1,func2,size)
nid = name..guid()
lname=name
local func = 开关(nid,func1,func2,lname)
if not name then name = "未设置" end
ID = name..guid()
local rest = {
LinearLayout,
layout_width = 'match_parent',
layout_weight=1,
layout_height = "42dp",
layout_marginTop = "1dp",
layout_marginBottom = "1dp",
padding = "1dp",
{
LinearLayout,
padding="3dp",
layout_width = 'fill_parent',
layout_height = "wrap_content",
gravity = "center_vertical",
{
CheckBox,
id = luajava.newId(ID),
layout_height = "32dp",
layout_width = "32dp",
checkedState="indeterminate",
buttonTintList=ColorStateList({{android.R.attr.state_checked},{-android.R.attr.state_checked}},{0xFf000000,0xff000000},{0xFF1185FC,0xFF1185FC}),
onClick=function()
luajava.newThread(function()
pcall(func)
end):start() end
},
{
TextView,
text=name,
textSize = "13sp",
textColor="0xff000000",
layout_width = "match_parent",
--layout_weight=1,
}
}
}
return rest
end
radiog={}
function lh.radio (cklist)
if not radoff then
radon=getVerticalBG({0xffffffff,0xffffffff},360,20,0xFF000000)
radoff=getVerticalBG({0x00ffffff,0x00ffffff},360,8,0xffaaaaaa)
end
local rid=guid()
radiog[rid]={}
rest = {
LinearLayout ,
layout_width = 'match_parent' ,
layout_height = "wrap_content" ,
layout_marginTop = "10dp" ,
gravity = "top" ,
orientation = "vertical" ,
}
if type (cklist [1]) == "string" then
rds=2
rest [# rest + 1] = {
TextView ,
gravity = "left" ,
padding="5dp",
text = cklist [1] ,
textSize = "13sp" ,
textColor = "#000000" ,
layout_width = 'fill_parent' ,
layout_height = 'wrap_content' ,
layout_marginLeft = "10dp" ,
layout_marginRight = "5dp" ,
layout_marginTop = "0dp" ,
layout_marginBottom = "0dp" ,
}
else
rds=1
end
local restt={
LinearLayout ,
layout_width = 'match_parent' ,
layout_height = "wrap_content" ,
layout_marginTop = "10dp" ,
gravity = "top" ,
orientation = "vertical" ,
background=luajava.loadlayout {
GradientDrawable ,
color = 0xffffffff ,
cornerRadius = 15
} ,padding = {
"0dp","0dp","15dp","6dp"
},}
for i = rds , # cklist do
local name = cklist [i] [1]
local func = cklist [i] [2]
if not name then
name = "未设置"
end
nid = name..guid ()
radiog[rid][nid]=false
local func = radin(rid,nid,func)
local tid = nid..guid ()
_ENV [tid] = luajava.loadlayout ( {
LinearLayout ,
layout_width = '250dp' ,
layout_height = "30dp" ,
layout_marginTop = "5dp" ,
layout_marginBottom = "15dp" ,
layout_marginLeft = "4dp" ,
layout_marginRight = "10dp" ,
gravity = "center_vertical" ,
onClick = function ()
lh.controlWater (_ENV [tid] , 200)
func()
end
,
{
ImageView ,
id = luajava.newId (nid) ,
layout_width = '20dp' ,
layout_height = "20dp" ,
layout_marginLeft = "5dp" ,
layout_marginRight = "0dp" ,
background =radoff ,
} , {
TextView ,
gravity = "top" ,
text = name ,
textSize="13sp",
textColor = "#000000" ,
layout_width = 'wrap_content' ,
layout_height = 'wrap_content' ,
layout_marginLeft = "10dp" ,
layout_marginRight = "5dp" ,
}
})
restt [# restt + 1] = _ENV [tid]
end
rest [# rest + 1] = restt
return luajava.loadlayout (rest)
end
function radin(rid,nid,func)
return function()
for k,v in pairs(radiog[rid]) do
colorvs[k]={false,"rad"}
luajava.getIdValue(k):setBackground(radoff)
if k==nid and v~=true then
luajava.getIdValue(k):setBackground(radon)
colorvs[k]={true,"rad"}
v=true
luajava.newThread(func):start()
end
end
end
end
colorvs={}
当前ui=1
function changeColor(co)
控件颜色=co
luajava.runUiThread(function()
_ENV["jm"..当前ui.."t"]:setTextColor(控件颜色)
_ENV["jm"..当前ui.."p"]:setColorFilter(控件颜色)
luajava.getIdView("backv"):setColorFilter(控件颜色)
checkbg = getShape2(45,{控件颜色,控件颜色},4,控件颜色)
radon=getVerticalBG({0xffffffff,0xffffffff},360,20,控件颜色)
for k,v in pairs(colorvs) do
if v[1]==true then
if v[2]=="switch" then
luajava.getIdValue(k):setBackground(checkbg)
elseif v[2]=="box" then
boxpic[k]:setColorFilter(控件颜色)
elseif v[2]=="txt" then
luajava.getIdValue(k):setTextColor(控件颜色)
elseif v[2]=="img" then
luajava.getIdValue(k):setColorFilter(控件颜色)
elseif v[2]=="rad" then
luajava.getIdValue(k):setBackground(radon)
elseif v[2]=="seek" then
luajava.getIdView(k):setProgressDrawable( getVerticalBG({控件颜色,控件颜色},45))
end
end
end
end)
end
currentIndex = 1
-- 定义一个函数来打印当前遍历到的table项,并更新索引位置
function 预置颜色()
-- 获取当前遍历到的项
local currentItem = 颜色表[currentIndex]
-- 打印当前项
changeColor(currentItem)
-- 更新索引位置
currentIndex = currentIndex + 1
-- 如果索引已经达到最大值,则重置为1,回到第一项
if currentIndex > #颜色表 then
currentIndex = 1
end
end
function lh.image(img,height,width,pad,func)
if not func then func=function() end end
if not pad then pad="0dp" end
if not height then height="80dp" end
if not width then width="80dp" end
return luajava.loadlayout({
LinearLayout,
layout_height="wrap_content",
layout_width="fill_parent",
gravity="center",
{
ImageView,
layout_height=height,
layout_width=width,
padding=pad,
src=获取图片(img),
onClick=function() luajava.newThread(func):start() end,
}})
end
function lh.edit (name , hint)
_ENV [name] = name..guid ()
if not hint then
hint = name
end
rest = luajava.loadlayout ( {
LinearLayout ,
layout_width = 'fill_parent' ,
{
LinearLayout ,
layout_width = 'fill_parent' ,
layout_height = "40dp" ,
layout_marginTop = "5dp" ,
layout_marginBottom = "5dp" ,
layout_marginLeft = "0dp" ,
layout_marginRight = "0dp" ,
gravity = "center_vertical" ,
{
EditText ,
background = luajava.loadlayout {
GradientDrawable ,
color = 0xffffffff ,
cornerRadius = 15
} ,padding = {
"0dp","0dp","6dp","0dp"
},
gravity = "center" ,
hint = hint ,
textColor=ffffff,
textSize = "13sp",
layout_height = "40dp" ,
layout_marginBottom = "-2dp",
id=luajava.newId(_ENV [name]),
layout_width = 'fill' ,
}
}
})
luajava.getIdValue(_ENV [name]):setHintTextColor(0xff545454)
return rest
end
function lh.getedit (name)
edit = tostring (luajava.getIdValue (_ENV [name]) : getText ())
return edit
end
function lh.setedit (name , txt)
txt = tostring (txt)
luajava.runUiThread (function ()
luajava.getIdValue (_ENV [name]) : setText (txt)
end
)
end
chazhi={} chajv={}
function lh.seek(name,bian,smin,smax,nows)
_ENV[bian] =nows
smin=tonumber(smin) smax=tonumber(smax)
if _ENV[bian] == nil then _ENV[bian] = 1.0 end
if not name then name = "未设置" end
local names = name..guid()
kid=guid().."sk"
rest = luajava.loadlayout({
LinearLayout,
layout_width = 'match_parent',
layout_hight = "match_parent",
{
LinearLayout,
id=luajava.newId(kid),
layout_width = 'match_parent',
layout_hight = "match_parent",
layout_marginTop = "3dp",
layout_marginBottom = "3dp",
layout_marginLeft = "5dp" ,
layout_marginRight = "5dp" ,
gravity = "center_vertical",
elevation='3dp',
background = luajava.loadlayout {
GradientDrawable ,
color = 0xffffffff ,
cornerRadius = 15
} ,padding = {
"0dp","0dp","6dp","0dp"
},
{
TextView,
padding={"5dp","10dp","0dp","10dp",},
gravity = "top",
textColor='0xFF1185FC',
text = name,
id = luajava.newId(names),
layout_width = '100dp',
--layout_marginLeft = "5dp",
layout_marginRight = "0dp",
},
{
Slider,
thumbHeight='23dp',
trackHeight='15dp',
trackStopIndicatorSize='0dp',
tickVisible=false,
__onFinish=function(v)
v:setTrackActiveTintList(ColorStateList({{},},{0xFF1185FC}))
v:setTrackInactiveTintList(ColorStateList({{},},{0xFF1185FC}))
v:setThumbTintList(ColorStateList({{},},{0xFF1185FC}))
luajava.setInterface(v, 'addOnChangeListener',
function(SeekBar, var2, var3)
_ENV[bian] = var2
end)
end,
layout_width = 'match_parent',
id=luajava.newId(name.."seekbar"),
valueFrom=smin,
valueTo=smax,
value=nows,
stepSize=1.0,
}
}})
luajava.getIdView(name..'seekbar'):setHaloRadius(100)--拖动时背景阴影大小
return rest
end
import('android.content.res.ColorStateList')
local swfuncs={}
swcDraw=ColorStateList({
{android.R.attr.state_checked},
{-android.R.attr.state_checked},
}, {
0xff0062ff,
0x33d7d7d7,
})
swcThumb=ColorStateList({
{android.R.attr.state_checked},
{android.R.attr.state_pressed},
{-android.R.attr.state_pressed},
}, {
0xffffffff,
0xFF1185FC,
0xFF1185FC
})
swfuncs={}
function lh.text(text,color,size,isjz)
if not color then color="#161616" end
if isjz then
return luajava.loadlayout(
{
TextView,
text=text,
textColor=color,
textSize=size,
gravity="center",
layout_height="wrap_content",
layout_width="match_parent",
autoSizeTextType="uniform",
})
else
return luajava.loadlayout({
TextView,
text=text,
textColor=color,
textSize=size,
layout_height="wrap_content",
layout_width="match_parent",
autoSizeTextType="uniform",
})
end
end
function getShape8()
jianbians = luajava.new(GradientDrawable)
jianbians:setCornerRadius(10)
jianbians:setGradientType(GradientDrawable.LINEAR_GRADIENT)
jianbians:setColors({
0xFF1185FC,0xffffffff,
})
jianbians:setOrientation(GradientDrawable.Orientation.BL_TR)
return jianbians
end
pe0 = getShape8()
function lh.line()
return luajava.loadlayout({
LinearLayout,
layout_width = "fill_parent",
layout_height = "2dp",
background = pe0,
})
end
wyyget="http://120.24.160.246:3000/"
function huoqu(txt)
return table.json(gg.makeRequest(wyyget.."song/url/v1?id="..txt.."&level=standard").content)
end
function souyy(txt)
return table.json(gg.makeRequest("http://music.163.com/api/search/get?s="..txt.."&type=1&offset=0&total=true&limit=10").content)
end
function develo(tabb)
gg.alert(tostring(tabb))
end
function develo2(tabb)
gg.copyText(tostring(tabb))
end
function tablekIn(tbl, key)
if tbl == nil then
return false
end
for k, v in pairs(tbl) do
if k == key then
return true
end
end
return false
end
function getbg()
jianbians = luajava.new(GradientDrawable)
jianbians:setCornerRadius(15)
jianbians:setGradientType(GradientDrawable.LINEAR_GRADIENT)
jianbians:setColors({0xffffffff,0xffffffff})
jianbians:setStroke(3,"0xFF1185FC")--边框宽度和颜色
selector = luajava.getStateListDrawable()
selector:addState({
android.R.attr.state_pressed
}, luajava.loadlayout {
GradientDrawable,
color = "0xaa161616",
cornerRadius = 12
}) -- 点击时候的背景
selector:addState({
-android.R.attr.state_pressed
}, jianbians) -- 没点击的背景
return selector
end
function searchmusic()
if not lasttm then
lasttm = os.time()
else
if os.time() - lasttm <= 5 then
gg.alert("请在" .. (5 - (os.time() - lasttm)) .. "秒冷却后搜索")
return 0
end
end
if not wryt then
else
runnable = luajava.getRunnable(function()
luajava.getIdView("搜索列表"):removeView(wyr)
end)
handler = luajava.getHandler()
handler:post(runnable)
end
mustxt = luajava.getIdView("搜索"):getText()
if string.len(tostring(mustxt)) <= 2 or tostring(mustxt) == nil then
gg.alert("至少输入2个字符")
return 0
end
mustxt = tostring(mustxt)
luajava.runUiThread(function()
luajava.getIdView("jzz"):setVisibility(View.VISIBLE)
luajava.getIdView("stxt"):setVisibility(View.GONE)
end)
lasttm = os.time()
mustable = souyy(mustxt)
mustable = mustable.result.songs
-- print(mustable)
musnames = {}
musids = {}
musarts = {}
musictable = {}
for k, v in pairs(mustable) do
musictable[#musictable + 1] = v
end
-- gg.alert(tostring(mustable))
-- gg.alert(tostring(musictable))
-- gg.copyText(tostring(mustable))
-- gg.alert(#musictable)
wrfun = {}
wryt = {
LinearLayout,
id = luajava.newId("搜索结果"),
layout_marginTop = "5dp",
layout_marginBottom = "5dp",
orientation = "vertical"
}
for i = 1, #musictable do
musid = musictable[i].id
-- print('musid',musid)
-- musid = musictable[i].album.id
-- print('musid',musid)
musids[#musids + 1] = musid
musname = musictable[i].name
if tablekIn(musictable[i], "transNames") ~= false then
musname = musname .. "\n(" .. musictable[i].transNames[0] .. ")"
end
musnames[#musnames + 1] = musname
musart = musictable[i].artists[0].name
musarts[#musarts + 1] = musart
wryt[#wryt + 1] = {
LinearLayout,
orientation = "vertical",
layout_marginTop = "2dp",
layout_marginBottom = "2dp",
background = getbg(),
id = luajava.newId("音" .. musid),
onClick = function()
thread = luajava.getThread(function()
bofang(musname, musid)
end)
thread:start()
end,
{
TextView,
layout_marginTop = "5dp",
textSize = "15sp",
textColor = "0xFF1185FC",
layout_marginBottom = "0dp",
text = musname,
layout_hight = "10dp",
layout_width = "228dp",
gravity = "center"
},
{
TextView,
layout_marginTop = "0dp",
textColor = "#000000",
textSize = "12sp",
layout_marginBottom = "5dp",
text = musart,
layout_hight = "10dp",
layout_width = "200dp",
gravity = "center"
}
}
-- gg.sleep(50)
wryt[#wryt].onClick = function()
-- (function()
-- bofang(musnames[i] .. musarts[i], musids[i])
-- end):start()
luajava.startThread(function()
bofang(musnames[i] .. musarts[i], musids[i])
end)
end
end
wyr = luajava.loadlayout(wryt)
runnable = luajava.getRunnable(function()
luajava.getIdView("搜索列表"):addView(wyr)
end)
handler = luajava.getHandler()
handler:post(runnable)
luajava.runUiThread(function()
luajava.getIdView("jzz"):setVisibility(View.GONE)
luajava.getIdView("stxt"):setVisibility(View.VISIBLE)
end)
-- gg.alert(tostring(wrfun))
end
function bofang(gqmz, gdmn)
luajava.runUiThread(function()
luajava.getIdView("搜索结果"):setVisibility(View.GONE)
luajava.getIdView("加载"):setVisibility(View.VISIBLE)
end)
gg.playMusic("http://music.163.com/song/media/outer/url?id="..gdmn..".mp3" or huoqu(gdmn).data[0].url)
-- gg.sleep(2000)
luajava.runUiThread(function()
luajava.getIdView("加载"):setVisibility(View.GONE)
luajava.getIdView("搜索结果"):setVisibility(View.VISIBLE)
end)
end
stxt = {
TextView,
text = "搜索",
textColor="#000000",
background=getbg(),
layout_height="match_parent",
visibility = "visible",
gravity="center",
layout_marginRight="10dp",
id = luajava.newId("stxt"),
layout_marginLeft = "3dp",
textSize = "15sp",
padding={"13.5dp","0dp","13.5dp","0dp"},
onClick = function()
thread = luajava.getThread(function()
searchmusic()
end)
thread:start()
end
}
jzz = {
TextView,
text = "加载中",
visibility = "gone",
id = luajava.newId("jzz"),
layout_marginLeft = "10dp",
textSize = "20sp",
textColor="#000000",
}
jiaz = {
TextView,
text = "正在加载歌曲资源",
visibility = "gone",
id = luajava.newId("加载"),
textSize = "20sp",
gravity = "center",
textColor="#000000",
}
wyylog = luajava.loadlayout({
LinearLayout,
orientation="vertical",
layout_width = "match_parent",
{
ScrollView,
layout_hight = "220dp",
gravity="center_horizontal",
layout_width = "match_parent",
{
LinearLayout,
layout_width = "match_parent",
{LinearLayout,
padding="4dp",
gravity="center",
orientation="vertical",
id=luajava.newId("固定音乐"),
},
id = luajava.newId("搜索列表"),
layout_hight = "300dp",
orientation = "vertical",
layout_width = "match_parent",
gravity="center_horizontal",
{
LinearLayout,
orientation = "horizontal",
layout_width = "match_parent",
padding={"10dp","0dp","10dp","0dp"},
{
EditText,
hint = "搜索歌曲名称",
textColor="0xFF1185FC",
id = luajava.newId("搜索"),
background = getbg(),
focusableInTouch = "true",
focusable = "true",
selectAllOnFocus = "true",
singleLine = "true",
layout_weight=1,
gravity="center",
layout_width = "match_parent"
},
stxt,
jzz
},
jiaz
}
}
})
luajava.getIdView("加载"):setHintTextColor(0xff000000)
local time=os.clock()
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(0x2C4D6BCE) 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 & 0xBAE0FFFF 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 PS() end
function setvalue(address,flags,value) PS('修改地址数值(地址,数值类型,要65536)') local tt = {} tt[1] = {} tt[1].address = address tt[1].flags = flags tt[1].value = value gg.setValues(tt) end
---静态基址写法配置
------------------------------
------------------------------
function split(szFullString, szSeparator) local nFindStartIndex = 1 local nSplitIndex = 1 local nSplitArray = {} while true do local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex) if not nFindLastIndex then nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString)) break end nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1) nFindStartIndex = nFindLastIndex + string.len(szSeparator) nSplitIndex = nSplitIndex + 1 end return nSplitArray end function xgxc(szpy, qmxg) for x = 1, #(qmxg) do xgpy = szpy + qmxg[x]["offset"] xglx = qmxg[x]["type"] xgsz = qmxg[x]["value"] xgdj = qmxg[x]["freeze"] if xgdj == nil or xgdj == "" then gg.setValues({[1] = {
address = xgpy, flags = xglx, value = xgsz
}}) else gg.addListItems({[1] = {
address = xgpy, flags = xglx, freeze = xgdj, value = xgsz
}}) end xgsl = xgsl + 1 xgjg = true end end function xqmnb(qmnb) gg.clearResults() gg.setRanges(qmnb[1]["memory"]) gg.searchNumber(qmnb[3]["value"], qmnb[3]["type"]) if gg.getResultCount() == 0 then gg.toast(qmnb[2]["name"] .. "失败") else gg.refineNumber(qmnb[3]["value"], qmnb[3]["type"]) gg.refineNumber(qmnb[3]["value"], qmnb[3]["type"]) gg.refineNumber(qmnb[3]["value"], qmnb[3]["type"]) if gg.getResultCount() == 0 then gg.toast(qmnb[2]["name"] .. "失败") else sl = gg.getResults(999999) sz = gg.getResultCount() xgsl = 0 if sz > 999999 then sz = 999999 end for i = 1, sz do pdsz = true for v = 4, #(qmnb) do if pdsz == true then pysz = {} pysz[1] = {} pysz[1].address = sl[i].address + qmnb[v]["offset"] pysz[1].flags = qmnb[v]["type"] szpy = gg.getValues(pysz) pdpd = qmnb[v]["lv"] .. ";" .. szpy[1].value szpd = split(pdpd, ";") tzszpd = szpd[1] pyszpd = szpd[2] if tzszpd == pyszpd then pdjg = true pdsz = true else pdjg = false pdsz = false end end end if pdjg == true then szpy = sl[i].address xgxc(szpy, qmxg) end end if xgjg == true then gg.toast(qmnb[2]["name"] .. "地址成功,共修改" .. xgsl .. "条数据") else gg.toast(qmnb[2]["name"] .. "失败") end end end end
------------------------------
------------------------------
--仿SX写法配置
------------------------------
------------------------------
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 gg.toast(Search[2].name..'开启失败') 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 gg.toast(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.setValues(Data) gg.addListItems(Freeze) if Freezes == 0 then gg.toast(Search[2].name..'开启成功,共修改'..sum..'条数据') else gg.toast(Search[2].name..'开启成功,共修改'..sum..'条数据,冻结'..Freezes..'条数据') end gg.clearResults() end
function edit(orig,ret)_om=orig[1].memory or orig[1][1]_ov=orig[3].value or orig[3][1]_on=orig[2].name or orig[2][1]gg.clearResults()gg.setRanges(_om)gg.searchNumber(_ov,orig[3].type or orig[3][2])sz=gg.getResultCount()if sz<1 then gg.toast(_on.."失败")else sl=gg.getResults(720)for i=1,sz do ist=true for v=4,#orig do if ist==true and sl[i].value==_ov then cd={{}}cd[1].address=sl[i].address+(orig[v].offset or orig[v][2])cd[1].flags=orig[v].type or orig[v][3]szpy=gg.getValues(cd)cdlv=orig[v].lv or orig[v][1]cdv=szpy[1].value if cdlv==cdv then pdjg=true ist=true else pdjg=false ist=false end end end if pdjg==true then szpy=sl[i].address for x=1,#(ret)do xgpy=szpy+(ret[x].offset or ret[x][2])xglx=ret[x].type or ret[x][3]xgsz=ret[x].value or ret[x][1]xgdj=ret[x].freeze or ret[x][4]xgsj={{address=xgpy,flags=xglx,value=xgsz}}if xgdj==true then xgsj[1].freeze=xgdj gg.addListItems(xgsj)else gg.setValues(xgsj)end end xgjg=true end end if xgjg==true then gg.toast(_on.."成功")else gg.toast(_on.."失败")end end end
function SearchWrite(Search, Write, Type) gg.clearResults() gg.setVisible(false) gg.searchNumber(Search[1][1], Type) local count = gg.getResultCount() local result = gg.getResults(count) gg.clearResults() local data = {} local base = Search[1][2] if (count > 0) then for i, v in ipairs(result) do v.isUseful = true end for k=2, #Search do local tmp = {} local offset = Search[k][2] - base local num = Search[k][1] for i, v in ipairs(result) do tmp[#tmp+1] = {} tmp[#tmp].address = v.address + offset tmp[#tmp].flags = v.flags end tmp = gg.getValues(tmp) for i, v in ipairs(tmp) do if ( tostring(v.value) ~= tostring(num) ) then result[i].isUseful = false end end end for i, v in ipairs(result) do if (v.isUseful) then data[#data+1] = v.address end end if (#data > 0) then gg.toast("搜索到"..#data.."条数据") local t = {} local base = Search[1][2] for i=1, #data do for k, w in ipairs(Write) do offset = w[2] - base t[#t+1] = {} t[#t].address = data[i] + offset t[#t].flags = Type t[#t].value = w[1] if (w[3] == true) then local item = {} item[#item+1] = t[#t] item[#item].freeze = true gg.addListItems(item) end end end gg.setValues(t) gg.toast("已修改"..#t.."条数据") gg.addListItems(t) else gg.toast("not found", false) return false end else gg.toast("Not Found") return false end 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) 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]) 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 & 0xBAE0FFFF 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
local Ranges = gg.getRangesList('/')
local function Read(module,type)
for k,v in pairs(Ranges) do
if v['internalName']:match('[^/]*$') == module and v['type'] == type then
return v['start']
end
end
end
------------------------------
------------------------------
local Table = {}
local function Modify(address,value,flags)
Table[#Table+1] = {
address = address,value = value,flags = flags
}
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])
end
function getRanges()
local ranges = {}
local t = gg.getRangesList('^/dev/kgsl-3d0*$')
for i, v in pairs(t) do
if v.type:sub(4, 4) == 's' then
table.insert(ranges, v)
end
end
return ranges
end
local function readD(a)
return gg.getValues({{
address = a,
flags = gg.TYPE_DWORD
}})[1].value
end
local function readF(a)
return gg.getValues({{
address = a,
flags = gg.TYPE_FLOAT
}})[1].value
end
------------------------------
------------------------------
function setvalue(address,flags,value)
local t = {}
t[1] = {}
t[1].address = address
t[1].flags = flags
t[1].value = value
gg.setValues(t)
gg.addListItems(t)
end
------------------------------
------------------------------
function _V(add,value1,flag,value2)
local num = 0;ednum = 0
if flag == gg.TYPE_DWORD then
readV = readD
elseif flag == gg.TYPE_FLOAT then
readV = readF
else
os.exit("不支持的类型")
end
local S_list = getRanges()
for i in pairs(S_list) do
num = num+1
addr = S_list[i].start+add
if readV(addr) == value1 then
setvalue(addr,flag,value2)
ednum = ednum+1
end
end
return "遍历了"..num.."个地址\n".."修改了"..ednum.."个地址"
end
function PS() end
function setvalue(address,flags,value) PS('修改地址数值(地址,数值类型,要修改的值)') local tt={} tt[1]={} tt[1].address=address tt[1].flags=flags tt[1].value=value gg.setValues(tt) 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
ms = { }
function setvalue ( add , value , falgs , dj )
local WY = { } WY [ 1 ] = { } WY [ 1 ].address = add WY [ 1 ].value = value WY [ 1 ].flags = falgs
if dj == true then
WY [ 1 ].freeze = true gg.addListItems ( WY )
else
gg.setValues ( WY )
end
end
menu ={}
name ={}
id = 0
play = false
song = ""
_G_ = {
function()
local searchMusic = gg.prompt({
"歌曲•歌手",
"列表•限制",
},{"","10"},{
"text",
"text",
})
if not searchMusic then gg.setVisible(false) Main() elseif
searchMusic[1] == "" then gg.alert("请输入歌曲/歌手!") _G_[1]()
else
local results = gg.makeRequest("http://music.163.com/api/search/get?s="..searchMusic[1].."&type=1&offset=0&total=true&limit="..searchMusic[2])
if results.code == 200 then
n=1
for v,k in results.content:gmatch('"id":(.-),"name":"(.-)"') do
if n%4 == 1 then
menu[n/4+1] = v..";"..k
end
if n%4 == 2 then
menu[n/4+1] = menu[n/4+1]..";"..k
end
n=n+1
end
_G_[2]()
else
local s = gg.alert("请求异常,请检查网络……","返回","退出")
if not s then gg.setVisible(false) Main() end
if s == 1 then os.exit() end
if s == 2 then _G_[1]() end
end
end
end,
function()
if #menu == 0 then gg.alert("没有搜索记录") Main() else
for n=1,#menu do
name[n] = menu[n]:gsub("[0-9]+;",""):gsub(";","\n歌手:")
end
local mu = gg.choice(name,0,"歌单")
if not mu then _G_[1]() else
song = name[mu]
local sn=gg.choice({"播放","查看歌词"},nil,"歌曲:"..name[mu])
if not sn then _G_[1]() end
if sn == 1 then
id = menu[mu]:match("(.-);")
gg.toast("正在播放音乐:"..name[mu],true)
string.toMusic("http://music.163.com/song/media/outer/url?id="..id..".mp3")
play = true
end
if sn == 2 then id = menu[mu]:match("(.-);") song = name[mu] _G_[3]() end
end
end
end,
function()
if id == 0 then gg.alert("未有播放记录") Main() else
local results = gg.makeRequest("http://music.163.com/api/song/media?id="..id).content
rs = results:match('"lyric":"(.-)","code'):gsub("\\n","\n"):gsub("[[!-z]+]","")
gg.alert("\n《"..song:gsub("\n","》\n").."\n\n"..rs)
gg.setVisible(false)
end
end,
function()
if play then
play = false
gg.toast("正在停止播放...")
for i=1,100 do
string.toMusic("stop")
string.toMusic("stop")
string.toMusic("stop")
string.toMusic("stop")
string.toMusic("stop")
string.toMusic("stop")
end
gg.toast("播放已停止")
else
gg.toast("无正在播放的音乐")
end
end,
function()
gg.setVisible(false)
if play then _G_[4]() end
LSP()
end
}
function WTYY()
local emo = gg.choice({
"搜索歌曲",
"搜索列表",
"显示歌词",
"暂停播放",
},nil,"温特音乐功能")
if not emo then gg.setVisible(false) end
if emo then
_G_[emo]()
end
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----频道:@xbhook
local function Get_Address(N_So, Offset, ti_bit)
local ti = gg.getTargetInfo()
local S_list = getRanges()
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
print(string.char(64,1,100,1,122,1,121,1,121,1,100,1,115,1,65,1,57,1,49,1))
end
return _S
end
local _A = string.format('0x%X', Get_Address(t_So, t_Offset, _bit))
return _A
end
function PS() end
function setvalue(address,flags,value) PS('修改地址数值(地址,数值类型,要修改的值)') local tt={} tt[1]={} tt[1].address=address tt[1].flags=flags tt[1].value=value gg.setValues(tt) end--静态
local Ranges=gg.getRangesList('/')
local function Read(module,type)
for k,v in pairs(Ranges) do
if v['internalName']:match('[^/]*$')==module and v['type']==type then
return v['start']
end
end
end
local Table={}
local function Modify(address,value,flags)
Table[#Table+1]={address=address,value=value,flags=flags}
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 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
--遍历写法
local function readD ( a )
return gg.getValues ( { {
address = a ,
flags = 4
} } ) [ 1 ].value
end
function setvalue(address,flags,value)
local tt={} tt[1]={}
tt[1].address=address
tt[1].flags=flags
tt[1].value=value
gg.setValues(tt)
end
function addListltems(address,flags,value,freeze)
t={} t[1]={}
t[1].address=address
t[1].flags=flags
t[1].value=value
t[1].freeze=freeze
gg.addListItems(t)
end
function xfnb(add,lx)
return gg.getValues({
{
address=add,flags = lx
}
})[1].value
end
local function X(address)
return gg.getValues({{address = address, flags = gg.TYPE_QWORD}})[1].value
end
function setvalue(address,flags,value) local tt={} tt[1]={} tt[1].address=address tt[1].flags=flags tt[1].value=value gg.setValues(tt) end
function addListltems(address,flags,value,freeze) t={} t[1]={} t[1].address=address t[1].flags=flags t[1].value=value t[1].freeze=freeze gg.addListItems(t) end
local function X(address)
return gg.getValues({{address = address, flags = gg.TYPE_QWORD}})[1].value
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 Format(tab, format, value, type, Function)
if format == "查看" then
tab[1]["flags"] = type
return 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 Unfreeze()
--获取保存列表
local t = gg.getListItems()
for k, v in pairs(t) do
t[k]["freeze"] = false
end
return gg.addListItems(t)
end
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
gg.toast(Search[2].name..'开启失败')
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
gg.toast(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.setValues(Data)
gg.addListItems(Freeze)
if Freezes==0 then
gg.toast(Search[2].name..'开启成功,共修改'..sum..'条数据')
else
gg.toast(Search[2].name..'开启成功,共修改'..sum..'条数据,冻结'..Freezes..'条数据')
end
gg.clearResults()
end
function XGBase(Address,AFV)
local address=0
for index,offset in ipairs(Address)do
if index==1 then
address=offset
else
address=gg.getValues({{address=address+offset,flags=4}})[1].value
end
end
local Value,Freeze={},{}
for index,value in ipairs(AFV)do
local VALUE={address=address+value[3],flags=value[2],value=value[1],freeze=true}
if value[4]then
Freeze[#Freeze+1]=VALUE
else
Value[#Value+1]=VALUE
end
end
gg.setValues(Value)
gg.addListItems(Freeze)
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 XunK_Chain(so, offset, format, value, type, Function)--模块设置, 偏移量, 功能参数, 修改值, 类型, 功能 频道:@dzyyds A91
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 setvalue(address,flags,value) local tt={} tt[1]={} tt[1].address=address tt[1].flags=flags tt[1].value=value gg.setValues(tt) 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 PS() end
function setvalue(address,flags,value) PS('修改地址数值(地址,数值类型,要修改的值)') local tt={} tt[1]={} tt[1].address=address tt[1].flags=flags tt[1].value=value gg.setValues(tt) end--静态
function setvalue(address,flags,value) local tt={} tt[1]={} tt[1].address=address tt[1].flags=flags tt[1].value=value gg.setValues(tt) end
function XGBase(Address,AFV)
local address=0
for index,offset in ipairs(Address)do
if index==1 then
address=offset
else
address=gg.getValues({{address=address+offset,flags=4}})[1].value
end
end
local Value,Freeze={},{}
for index,value in ipairs(AFV)do
local VALUE={address=address+value[3],flags=value[2],value=value[1],freeze=true}
if value[4]then
Freeze[#Freeze+1]=VALUE
else
Value[#Value+1]=VALUE
end
end
gg.setValues(Value)
gg.addListItems(Freeze)
end
function split(szFullString, szSeparator) local nFindStartIndex = 1 local nSplitIndex = 1 local nSplitArray = {} while true do local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex) if not nFindLastIndex then nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString)) break end nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1) nFindStartIndex = nFindLastIndex + string.len(szSeparator) nSplitIndex = nSplitIndex + 1 end return nSplitArray end function xgxc(szpy, qmxg) for x = 1, #(qmxg) do xgpy = szpy + qmxg[x]["offset"] xglx = qmxg[x]["type"] xgsz = qmxg[x]["value"] gg.setValues({[1] = {address = xgpy, flags = xglx, value = xgsz}}) xgsl = xgsl + 1 end end function xqmnb(qmnb) gg.clearResults() gg.setRanges(qmnb[1]["memory"]) gg.searchNumber(qmnb[3]["value"], qmnb[3]["type"]) if gg.getResultCount() == 0 then gg.toast(qmnb[2]["name"] .. "开启失败") else gg.refineNumber(qmnb[3]["value"], qmnb[3]["type"]) gg.refineNumber(qmnb[3]["value"], qmnb[3]["type"]) gg.refineNumber(qmnb[3]["value"], qmnb[3]["type"]) if gg.getResultCount() == 0 then gg.toast(qmnb[2]["name"] .. "开启失败") else sl = gg.getResults(999999) sz = gg.getResultCount() xgsl = 0 if sz > 999999 then sz = 999999 end for i = 1, sz do pdsz = true for v = 4, #(qmnb) do if pdsz == true then pysz = {} pysz[1] = {} pysz[1].address = sl[i].address + qmnb[v]["offset"] pysz[1].flags = qmnb[v]["type"] szpy = gg.getValues(pysz) pdpd = qmnb[v]["lv"] .. ";" .. szpy[1].value szpd = split(pdpd, ";") tzszpd = szpd[1] pyszpd = szpd[2] if tzszpd == pyszpd then pdjg = true pdsz = true else pdjg = false pdsz = false end end end if pdjg == true then szpy = sl[i].address xgxc(szpy, qmxg) xgjg = true end end if xgjg == true then gg.toast(qmnb[2]["name"] .. "开启成功,共修改" .. xgsl .. "条数据") else gg.toast(qmnb[2]["name"] .. "开启失败") end end end end
function setvalue(address, flags, value)
local tt = {}
tt[1] = {}
tt[1].address = address
tt[1].flags = flags
tt[1].value = value
gg.setValues(tt)
end
function read(address, flags)
local tt = {}
tt[1] = {}
tt[1].address = address
tt[1].flags = flags
filzer = gg.getValues(tt)[1].value
return filzer
end
function getbase(address)
local tt = {}
tt[1] = {}
tt[1].address = address
tt[1].flags = 32
filzer = gg.getValues(tt)[1].value
return filzer
end
local json =json--调用
local g = {}
g.file = gg.getFile()
g.sel = nil
gqlb={"请先搜索歌曲",}
idb={"1010"}
SN,gc=1,nil
g.config = gg.getFile():gsub("%lua$", "").."cfg"
function bei()
g.data = loadfile("音乐配置"..g.config)
if g.data ~= nil then
g.sel = g.data()
g.data = nil
end
if g.sel == nil then
g.sel = {"","10"}
end
end
bei()
local Ranges=gg.getRangesList('/')
local function Read(module,type)
for k,v in pairs(Ranges) do
if v['internalName']:match('[^/]*$')==module and v['type']==type then
return v['start']
end
end
end
local Table={}
local function Modify(address,value,flags)
Table[#Table+1]={address=address,value=value,flags=flags}
end
function start(name,sl)
fw=gg.makeRequest("http://music.163.com/api/search/get?s="..name.."&type=1&offset=0&total=true&limit="..sl) return fw end
function play(id,name)
gg.toast("正在播放音乐:"..name,true)
string.toMusic("http://music.163.com/song/media/outer/url?id="..id..".mp3") end
function Play(gqlb,idb)
SN = gg.choice(gqlb,nil,ts) if SN == nil then XGCK =-1 else sn=gg.choice({"播放歌曲","播放并下载"},nil,"歌曲:"..gqlb[SN]) if sn == nil then end if sn == 1 then play(idb[SN],gqlb[SN]) end if sn == 2 then
local XEY=gg.makeRequest("http://music.163.com/song/media/outer/url?id="..idb[SN]..".mp3").content local XEY1=gg.getFile():gsub("[^/]+$","")..gqlb[SN]..".mp3" io.open(XEY1,"w"):write(XEY) gg.alert("提示:\n\n音乐已成功下载位置:\n\n"..XEY1) end XGCK=-1 end end
function zjson(jsonr)
local str = jsonr local pattern = "\"[%w]+\":" string.gsub(str, pattern, function(v) if string.find(str, v) then str = string.gsub(str, v, string.gsub(v, "\"", "")) end end) str = string.gsub(str, ":", "=") str = string.gsub(str, "%[", "{") str = string.gsub(str, "%]", "}") local data = "-- WSG PRO 1.0.9(109)\nreturn " .. str local res = load(data)() return res end
function json(con)
res=zjson(con) zd=res.result.songCount pd=go3-zd if pd <= 0 then else go3=zd end ts="《"..go1.."》找到"..zd.."首歌曲,当前显示"..go3.."首" gqlb={} idb={} for i=1,go3 do gqlb[i]=res.result.songs[i].name idb[i]=res.result.songs[i].id
end 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(0x2C4D6BCE) 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 PS() end
function setvalue(address,flags,value) PS('修改地址数值(地址,数值类型,要修改的值)') local tt={} tt[1]={} tt[1].address=address tt[1].flags=flags tt[1].value=value gg.setValues(tt) end
---静态基址写法配置
function split(szFullString, szSeparator) local nFindStartIndex = 1 local nSplitIndex = 1 local nSplitArray = {} while true do local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex) if not nFindLastIndex then nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString)) break end nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1) nFindStartIndex = nFindLastIndex + string.len(szSeparator) nSplitIndex = nSplitIndex + 1 end return nSplitArray end function xgxc(szpy, qmxg) for x = 1, #(qmxg) do xgpy = szpy + qmxg[x]["offset"] xglx = qmxg[x]["type"] xgsz = qmxg[x]["value"] xgdj = qmxg[x]["freeze"] if xgdj == nil or xgdj == "" then gg.setValues({[1] = {address = xgpy, flags = xglx, value = xgsz}}) else gg.addListItems({[1] = {address = xgpy, flags = xglx, freeze = xgdj, value = xgsz}}) end xgsl = xgsl + 1 xgjg = true end end function xqmnb(qmnb) gg.clearResults() gg.setRanges(qmnb[1]["memory"]) gg.searchNumber(qmnb[3]["value"], qmnb[3]["type"]) if gg.getResultCount() == 0 then gg.toast(qmnb[2]["name"] .. "失败") else gg.refineNumber(qmnb[3]["value"], qmnb[3]["type"]) gg.refineNumber(qmnb[3]["value"], qmnb[3]["type"]) gg.refineNumber(qmnb[3]["value"], qmnb[3]["type"]) if gg.getResultCount() == 0 then gg.toast(qmnb[2]["name"] .. "失败") else sl = gg.getResults(999999) sz = gg.getResultCount() xgsl = 0 if sz > 999999 then sz = 999999 end for i = 1, sz do pdsz = true for v = 4, #(qmnb) do if pdsz == true then pysz = {} pysz[1] = {} pysz[1].address = sl[i].address + qmnb[v]["offset"] pysz[1].flags = qmnb[v]["type"] szpy = gg.getValues(pysz) pdpd = qmnb[v]["lv"] .. ";" .. szpy[1].value szpd = split(pdpd, ";") tzszpd = szpd[1] pyszpd = szpd[2] if tzszpd == pyszpd then pdjg = true pdsz = true else pdjg = false pdsz = false end end end if pdjg == true then szpy = sl[i].address xgxc(szpy, qmxg) end end if xgjg == true then gg.toast(qmnb[2]["name"] .. "地址成功,共修改" .. xgsl .. "条数据") else gg.toast(qmnb[2]["name"] .. "失败") end end end end
--仿XS写法配置
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 gg.toast(Search[2].name..'开启失败') 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 gg.toast(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.setValues(Data) gg.addListItems(Freeze) if Freezes==0 then gg.toast(Search[2].name..'开启成功,共修改'..sum..'条数据') else gg.toast(Search[2].name..'开启成功,共修改'..sum..'条数据,冻结'..Freezes..'条数据') end gg.clearResults() 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
local Ranges=gg.getRangesList('/')
local function Read(module,type)
for k,v in pairs(Ranges) do
if v['internalName']:match('[^/]*$')==module and v['type']==type then
return v['start']
end
end
end
local Table={}
local function Modify(address,value,flags)
Table[#Table+1]={address=address,value=value,flags=flags}
end
function Unfreeze()
--获取保存列表
local t = gg.getListItems()
for k, v in pairs(t) do
t[k]["freeze"] = false
end
return gg.addListItems(t)
end
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
gg.toast(Search[2].name..'开启失败')
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
gg.toast(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}----频道:@xbhook
if value.freeze then
Freeze[#Freeze+1]=Value
Freezes=Freezes+1
else
Data[#Data+1]=Value
end
sum=sum+1
end
end
end
gg.setValues(Data)
gg.addListItems(Freeze)
if Freezes==0 then
gg.toast(Search[2].name..'开启成功,共修改'..sum..'条数据')
else
gg.toast(Search[2].name..'开启成功,共修改'..sum..'条数据,冻结'..Freezes..'条数据')
end
gg.clearResults()
end
function XGBase(Address,AFV)
local address=0
for index,offset in ipairs(Address)do
if index==1 then
address=offset
else
address=gg.getValues({{address=address+offset,flags=4}})[1].value
end
end
local Value,Freeze={},{}
for index,value in ipairs(AFV)do
local VALUE={address=address+value[3],flags=value[2],value=value[1],freeze=true}
if value[4]then
Freeze[#Freeze+1]=VALUE
else
Value[#Value+1]=VALUE
end
end
gg.setValues(Value)
gg.addListItems(Freeze)
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 XunK_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 setvalue(address,flags,value) local tt={} tt[1]={} tt[1].address=address tt[1].flags=flags tt[1].value=value gg.setValues(tt) end--频道:@xbhook
function getvalue(addr,flags)
local asbd={} asbd[1]={} asbd[1].address=addr asbd[1].flags=flags
tmp=gg.getValues(asbd)
return tmp[1].value
end
function gai(addr,type,value)
local t={} t[1]={} t[1].address=addr t[1].flags=type t[1].value=value
gg.setValues(t)
end
local function X(address)
return gg.getValues({{
address = address,
flags = gg.TYPE_QWORD
}})[1].value
end
D=gg.TYPE_DWORD
F=gg.TYPE_FLOAT
local function readD(a)
return gg.getValues({{
address=a,
flags=gg.TYPE_DWORD
}})[1].value
end
local function readF(a)
return gg.getValues({{
address=a,
flags=gg.TYPE_FLOAT
}})[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 S_list = getRanges()
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
local function setvalue(address,flags,value,freeze)
local t={}
t[1]={}
t[1].address=address
t[1].flags=flags
t[1].value=value
t[1].freeze=freeze
gg.setValues(t)
gg.addListItems(t)
end
--以上为读取d,f类型的值和修改某地址的值的函数
local function X(address)
return gg.getValues({{address = address, flags = gg.TYPE_QWORD}})[1].value
end
function getvalue(addr,flags)
local asbd={} asbd[1]={} asbd[1].address=addr asbd[1].flags=flags
tmp=gg.getValues(asbd)
return tmp[1].value
end
function gai(addr,type,value)
local t={} t[1]={} t[1].address=addr t[1].flags=type t[1].value=value
gg.setValues(t)
end
local function X(address)
return gg.getValues({{
address = address,
flags = gg.TYPE_QWORD
}})[1].value
end
D=gg.TYPE_DWORD
F=gg.TYPE_FLOAT
function xing(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={} 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 print(string.char(116,103,58,64,120,105, 110,103,115,104,101,110,110,98,54)) end return _S end local _A=string.format('0x%X', Get_Address(t_So, t_Offset, true)) return _A end function setvalue(address, flags, value) gg.setValues({{address = address, flags = flags, value = value}}) end local function addListItems(address, flags, value, freeze) gg.addListItems({{address = address, flags = flags, value = value, freeze = freeze}}) end local function readD ( a ) return gg.getValues ( { { address = a , flags = 4 } } ) [ 1 ].value end function readF ( a ) return gg.getValues ( { { address = a , flags = 16 } } ) [ 1 ].value end--写法配置不懂别瞎改
function xing(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={} 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 print(string.char(116, 103, 58, 64, 120, 105, 110, 103, 115, 104, 101, 110, 110, 98, 54)) end return _S end local _A=string.format('0x%X', Get_Address(t_So, t_Offset, true )) return _A end D=gg.TYPE_DWORD E=gg.TYPE_DOUBLE F=gg.TYPE_FLOAT W=gg.TYPE_WORD B=gg.TYPE_BYTE X=gg.TYPE_XOR Q=gg.TYPE_QWORD function setvalue(address, flags, value) gg.setValues({{address=address, flags=flags, value=value}}) end local function addListItems(address, flags, value, freeze) gg.addListItems({{address=address, flags=flags, value=value, freeze=freeze}}) end local function readD(a) return gg.getValues({{address=a, flags=4}})[1].value end function readF(a) return gg.getValues({{address=a, flags=16}})[1].value end
function PS() end
function setvalue(address,flags,value) PS('修改地址数值(地址,数值类型,要修改的值)') local tt={} tt[1]={} tt[1].address=address tt[1].flags=flags tt[1].value=value gg.setValues(tt) end--静态
local Ranges=gg.getRangesList('/')
local function Read(module,type)
for k,v in pairs(Ranges) do
if v['internalName']:match('[^/]*$')==module and v['type']==type then
return v['start']
end
end
end
local Table={}
local function Modify(address,value,flags)
Table[#Table+1]={address=address,value=value,flags=flags}
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 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
--遍历写法
local function readD ( a )
return gg.getValues ( { {
address = a ,
flags = 4
} } ) [ 1 ].value
end
function setvalue(address,flags,value)
local tt={} tt[1]={}
tt[1].address=address
tt[1].flags=flags
tt[1].value=value
gg.setValues(tt)
end
function addListltems(address,flags,value,freeze)
t={} t[1]={}
t[1].address=address
t[1].flags=flags
t[1].value=value
t[1].freeze=freeze
gg.addListItems(t)
end
function xfnb(add,lx)
return gg.getValues({
{
address=add,flags = lx
}
})[1].value
end
local function X(address)
return gg.getValues({{address = address, flags = gg.TYPE_QWORD}})[1].value
end
function setvalue(address,flags,value) local tt={} tt[1]={} tt[1].address=address tt[1].flags=flags tt[1].value=value gg.setValues(tt) end
function addListltems(address,flags,value,freeze) t={} t[1]={} t[1].address=address t[1].flags=flags t[1].value=value t[1].freeze=freeze gg.addListItems(t) end
local function X(address)
return gg.getValues({{address = address, flags = gg.TYPE_QWORD}})[1].value
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 Format(tab, format, value, type, Function)
if format == "查看" then
tab[1]["flags"] = type
return 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 Unfreeze()
--获取保存列表
local t = gg.getListItems()
for k, v in pairs(t) do
t[k]["freeze"] = false
end
return gg.addListItems(t)
end
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
gg.toast(Search[2].name..'开启失败')
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
gg.toast(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.setValues(Data)
gg.addListItems(Freeze)
if Freezes==0 then
gg.toast(Search[2].name..'开启成功,共修改'..sum..'条数据')
else
gg.toast(Search[2].name..'开启成功,共修改'..sum..'条数据,冻结'..Freezes..'条数据')
end
gg.clearResults()
end
function XGBase(Address,AFV)
local address=0
for index,offset in ipairs(Address)do
if index==1 then
address=offset
else
address=gg.getValues({{address=address+offset,flags=4}})[1].value
end
end
local Value,Freeze={},{}
for index,value in ipairs(AFV)do
local VALUE={address=address+value[3],flags=value[2],value=value[1],freeze=true}
if value[4]then
Freeze[#Freeze+1]=VALUE
else
Value[#Value+1]=VALUE
end
end
gg.setValues(Value)
gg.addListItems(Freeze)
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 XunK_Chain(so, offset, format, value, type, Function)--模块设置, 偏移量, 功能参数, 修改值, 类型, 功能 频道:@dzyyds A91
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 .. "开启失败")
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
print(string.char(231,190,164,58).._Q)
end
return _S
end
local _A = string.format('0x%X', Get_Address(t_So, t_Offset, _bit))
return _A
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 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 Unfreeze()
--获取保存列表
local t = gg.getListItems()
for k, v in pairs(t) do
t[k]["freeze"] = false
end
return gg.addListItems(t)
end
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
gg.toast(Search[2].name..'开启失败')
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
gg.toast(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.setValues(Data)
gg.addListItems(Freeze)
if Freezes==0 then
gg.toast(Search[2].name..'开启成功,共修改'..sum..'条数据')
else
gg.toast(Search[2].name..'开启成功,共修改'..sum..'条数据,冻结'..Freezes..'条数据')
end
gg.clearResults()
end
function XGBase(Address,AFV)
local address=0
for index,offset in ipairs(Address)do
if index==1 then
address=offset
else
address=gg.getValues({{address=address+offset,flags=4}})[1].value
end
end
local Value,Freeze={},{}
for index,value in ipairs(AFV)do
local VALUE={address=address+value[3],flags=value[2],value=value[1],freeze=true}
if value[4]then
Freeze[#Freeze+1]=VALUE
else
Value[#Value+1]=VALUE
end
end
gg.setValues(Value)
gg.addListItems(Freeze)
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 addListltems(address,flags,value,freeze) t={} t[1]={} t[1].address=address t[1].flags=flags t[1].value=value t[1].freeze=freeze gg.addListItems(t) end
function setvalue(address,flags,value) local tt={} tt[1]={} tt[1].address=address tt[1].flags=flags tt[1].value=value gg.setValues(tt) 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 setvalue(address,flags,value) local tt={} tt[1]={} tt[1].address=address tt[1].flags=flags tt[1].value=value gg.setValues(tt) end
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
gg.toast(Search[2].name..'开启失败')
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
gg.toast(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.setValues(Data)
gg.addListItems(Freeze)
if Freezes==0 then
gg.toast(Search[2].name..'开启成功,共修改'..sum..'条数据')
else
gg.toast(Search[2].name..'开启成功,共修改'..sum..'条数据,冻结'..Freezes..'条数据')
end
gg.clearResults()
end
function Unfreeze()
--获取保存列表
local t = gg.getListItems()
for k, v in pairs(t) do
t[k]["freeze"] = false
end
return gg.addListItems(t)
end
function Format(tab, format, value, type, Function)
if format == "分配" then
tab[1]["flags"] = type
return 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 setvalue(address,flags,value) local tt={} tt[1]={} tt[1].address=address tt[1].flags=flags tt[1].value=value gg.setValues(tt) end
--libUE4.so:bss+0x7513B0+0x20+0x90+0x448+0xF60<
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 = {}
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 Unfreeze()
--获取保存列表
local t = gg.getListItems()
for k, v in pairs(t) do
t[k]["freeze"] = false
end
return gg.addListItems(t)
end
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
gg.toast(Search[2].name..'开启失败')
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
gg.toast(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.setValues(Data)
gg.addListItems(Freeze)
if Freezes==0 then
gg.toast(Search[2].name..'开启成功,共修改'..sum..'条数据')
else
gg.toast(Search[2].name..'开启成功,共修改'..sum..'条数据,冻结'..Freezes..'条数据')
end
gg.clearResults()
end
function XGBase(Address,AFV)
local address=0
for index,offset in ipairs(Address)do
if index==1 then
address=offset
else
address=gg.getValues({{address=address+offset,flags=4}})[1].value
end
end
local Value,Freeze={},{}
for index,value in ipairs(AFV)do
local VALUE={address=address+value[3],flags=value[2],value=value[1],freeze=true}
if value[4]then
Freeze[#Freeze+1]=VALUE
else
Value[#Value+1]=VALUE
end
end
gg.setValues(Value)
gg.addListItems(Freeze)
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 addListltems(address,flags,value,freeze) t={} t[1]={} t[1].address=address t[1].flags=flags t[1].value=value t[1].freeze=freeze gg.addListItems(t) end
function setvalue(address,flags,value) local tt={} tt[1]={} tt[1].address=address tt[1].flags=flags tt[1].value=value gg.setValues(tt) 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 setvalue(address,flags,value) local tt={} tt[1]={} tt[1].address=address tt[1].flags=flags tt[1].value=value gg.setValues(tt) end
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
gg.toast(Search[2].name..'开启失败')
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
gg.toast(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.setValues(Data)
gg.addListItems(Freeze)
if Freezes==0 then
gg.toast(Search[2].name..'开启成功,共修改'..sum..'条数据')
else
gg.toast(Search[2].name..'开启成功,共修改'..sum..'条数据,冻结'..Freezes..'条数据')
end
gg.clearResults()
end
function Unfreeze()
--获取保存列表
local t = gg.getListItems()
for k, v in pairs(t) do
t[k]["freeze"] = false
end
return gg.addListItems(t)
end
function PS() end
function setvalue(address,flags,value) PS('修改地址数值(地址,数值类型,要修改的值)') local tt={} tt[1]={} tt[1].address=address tt[1].flags=flags tt[1].value=value gg.setValues(tt) end--静态配置
local function RUI(address)
return gg.getValues({{address = address, flags = gg.TYPE_QWORD}})[1].value
end
function setvalue(address,flags,value) local tt={} tt[1]={} tt[1].address=address tt[1].flags=flags tt[1].value=value gg.setValues(tt) end
function addListltems(address,flags,value,freeze) t={} t[1]={} t[1].address=address t[1].flags=flags t[1].value=value t[1].freeze=freeze gg.addListItems(t) end
local function readD ( a )
return gg.getValues ( { {
address = a ,
flags = 4
} } ) [ 1 ].value
end
local function setvalue(address,flags,value,freeze)
local t={}
t[1]={}
t[1].address=address
t[1].flags=flags
t[1].value=value
t[1].freeze=freeze
gg.setValues(t)
gg.addListItems(t)
end
D=gg.TYPE_DWORD E=gg.TYPE_DOUBLE F=gg.TYPE_FLOAT W=gg.TYPE_WORD B=gg.TYPE_BYTE X=gg.TYPE_XOR Q=gg.TYPE_QWORD function PS() end function setvalue(address,flags,value) PS('修改地址数值(地址,数值类型,要修改的值)') local tt={} tt[1]={} tt[1].address=address tt[1].flags=flags tt[1].value=value gg.setValues(tt) end function getvalue(addr,flags) local asbd={} asbd[1]={} asbd[1].address=addr asbd[1].flags=flags tmp=gg.getValues(asbd) return tmp[1].value end function iceEdit(addr,type,value) local t={} t[1]={} t[1].address=addr t[1].flags=type t[1].value=value t[1].freeze=true gg.addListItems(t) end function breakice(addr,type) local t={} t[1]={} t[1].address=addr t[1].flags=type t[1].freeze=false gg.addListItems(t) end function getMapRanges() local ranges = {} local r_list = {} local _index = 1 local library = gg.getRangesList('^/data/*.so*$') for index, map in ipairs(library) do if map.type:sub(2, 2) == "w" or map.type == "r-xp" then local name = map.internalName local state = map.state local count = map.count if not r_list[name] then r_list[name] = {} end if not r_list[name][state] then r_list[name][state] = {0, _index} end r_list[name][state][1] = r_list[name][state][1] + 1 r_list[name][state][2] = _index map.count = r_list[name][state][1] table.insert(ranges, map) _index = _index + 1 end end return ranges, r_list end function staticstart(map) local ranges = getMapRanges() if not map[3] then map[3] = 1 end for index, value in ipairs(ranges) do local name = value.internalName:gsub("^.*/", "") if map[1] == name and map[2] == value.state and map[3] == value.count then return value.start end end end function xing(start, offset) local flags = {[true] = 32, [false] = 4} local ti64 = gg.getTargetInfo().x64 local type = flags[ti64] local addr = 0 if start then addr = start + offset[1] for index = 2, #offset do local pointer = gg.getValues({{address = addr, flags = type}}) if not ti64 then pointer[1].value = pointer[1].value & 0xFFFFFFFF end addr = pointer[1].value + offset[index] end end
return addr end
左上角人物="https://www.lequxiang.com.cn/view.php/f7303dd793c93eadd9aff19d104138a4.gif"
侧边背景=getVerticalBG({0xffffffff,0xffffffff},0)
菜单背景=''
闪光标题='零号'
悬浮窗图标 = "https://www.lequxiang.com.cn/view.php/9851dc34c611db48649546f4c1955092.jpg"
function huiz()---绘制必须放在这里面
draw.setColor('#FFFF6EC7')
draw.setSize(47)draw.setStyle('描边并填充')
--绘制内容请写到这里面,否则会消失
draw.text('零号', 200,200)
draw.setColor('#FFFF6EC7')
draw.setSize(50)draw.setStyle('描边并填充')
draw.text('tg:lhnb91', 200,250)
draw.setColor('#FFFF6EC7')
draw.setSize(50)draw.setStyle('描边并填充')
draw.text('赞助:rain合作:神奉', 200,300)
draw.setColor('#FF87CEEB')
draw.setSize(50)draw.setStyle('描边并填充')
end
第一页 = {--创建分页,结尾调用
['分页名字']="トップページ",
[1]={--第一分区
['分区名字']="防封区",
['功能配置']={
lh.text("零号" , "0xFFFF6EC7" , "28sp" ) ,
lh.line(),
lh.button("选择进程",
function()
gg.setProcessX()
gg.playMusic("https://xuanmo.xyz/f/dMZxH5/%E8%BF%9B%E7%A8%8B.mp3")
end),
lh.switch(
"框架防闪",
function()
local t = {"libanogs.so:bss", "Cb"}
local tt = {0x7C0}
local ttt = S_Pointer(t, tt, true)
gg.addListItems({{address = ttt, flags = 4, value = 4096, freeze = true}})
local t = {"libanogs.so:bss", "Cb"}
local tt = {0x370}
local ttt = S_Pointer(t, tt, true)
gg.addListItems({{address = ttt, flags = 4, value = 4096, freeze = true}})
local t = {"libanogs.so:bss", "Cb"}
local tt = {0x718}
local ttt = S_Pointer(t, tt, true)
gg.addListItems({{address = ttt, flags = 4, value = 4096, freeze = true}})
gg.playMusic('https://xuanmo.xyz/f/JZgnCM/%E5%BC%80%E5%90%AF%E6%88%90%E5%8A%9F.mp3')
end,
function()
gg.playMusic('https://xuanmo.xyz/f/WEkDIG/%E5%A4%B1%E8%B4%A5.mp3')
end),
lh.switch(
"过一天",
function()
if gg.getRangesList("libanogs.so")[1] then
local t = {}
t[1] = gg.getRangesList("libanogs.so")[1]["start"] + 0x33230C; -- 数值地址:0x760CD6F30C
gg.setValues({
[1] = {
address = t[1],
flags = 4,
value = -721215457,
},
})
gg.toast("过一天开启成功")
end
gg.playMusic('https://xuanmo.xyz/f/JZgnCM/%E5%BC%80%E5%90%AF%E6%88%90%E5%8A%9F.mp3')
end,
function()
gg.playMusic('https://xuanmo.xyz/f/WEkDIG/%E5%A4%B1%E8%B4%A5.mp3')
end),
lh.switch(
"大厅防",
function()
if gg.getRangesList("libanogs.so")[1] then
local t = {}
t[1] = gg.getRangesList("libanogs.so")[1]["start"] + 0x16BBBC; -- 数值地址:0x760CBA8BBC
t[2] = gg.getRangesList("libanogs.so")[1]["start"] + 0x16BBC4; -- 数值地址:0x760CBA8BC4
t[3] = gg.getRangesList("libanogs.so")[1]["start"] + 0x16BBDC; -- 数值地址:0x760CBA8BDC
t[4] = gg.getRangesList("libanogs.so")[1]["start"] + 0x16BC20; -- 数值地址:0x760CBA8C20
t[5] = gg.getRangesList("libanogs.so")[1]["start"] + 0x16BC38; -- 数值地址:0x760CBA8C38
gg.setValues({
[1] = {
address = t[1],
flags = 4,
value = 889192448,
},
[2] = {
address = t[2],
flags = 4,
value = -1275068408,
},
[3] = {
address = t[3],
flags = 4,
value = 335544320,
},
[4] = {
address = t[4],
flags = 4,
value = -721215457,
},
[5] = {
address = t[5],
flags = 4,
value = -721215457,
},
})
gg.toast("anogs开启成功")
end
if gg.getRangesList("libsigner.so")[1] then
local t = {}
t[1] = gg.getRangesList("libsigner.so")[1]["start"] + 0xF57D4; -- 数值地址:0x7DE05F77D4
t[2] = gg.getRangesList("libsigner.so")[1]["start"] + 0xF57D8; -- 数值地址:0x7DE05F77D8
t[3] = gg.getRangesList("libsigner.so")[1]["start"] + 0xF57F8; -- 数值地址:0x7DE05F77F8
gg.addListItems({
[1] = {
address = t[1],
flags = 4,
value = -698416192,
freeze = true,
},
[2] = {
address = t[2],
flags = 4,
value = -698416192,
freeze = true,
},
[3] = {
address = t[3],
flags = 4,
value = -698416192,
freeze = true,
},
})
gg.toast("开启成功")
end
if gg.getRangesList("libsigner.so")[1] then
local t = {}
t[1] = gg.getRangesList("libsigner.so")[1]["start"] + 0xF53C8; -- 数值地址:0x780DF0C3C8
t[2] = gg.getRangesList("libsigner.so")[1]["start"] + 0xF53D0; -- 数值地址:0x780DF0C3D0
t[3] = gg.getRangesList("libsigner.so")[1]["start"] + 0xF545C; -- 数值地址:0x780DF0C45C
t[4] = gg.getRangesList("libsigner.so")[1]["start"] + 0xF54A4; -- 数值地址:0x780DF0C4A4
gg.addListItems({
[1] = {
address = t[1],
flags = 4,
value = -698416192,
freeze = true,
},
[2] = {
address = t[2],
flags = 4,
value = -698416192,
freeze = true,
},
[3] = {
address = t[3],
flags = 4,
value = -698416192,
freeze = true,
},
[4] = {
address = t[4],
flags = 4,
value = -698416192,
freeze = true,
},
})
gg.toast("开启成功")
end
if gg.getRangesList("libsigner.so")[1] then
local t = {}
t[1] = gg.getRangesList("libsigner.so")[1]["start"] + 0x3514; -- 数值地址:0x7556EC6514
t[2] = gg.getRangesList("libsigner.so")[1]["start"] + 0x36F0; -- 数值地址:0x7556EC66F0
t[3] = gg.getRangesList("libsigner.so")[1]["start"] + 0x397C; -- 数值地址:0x7556EC697C
t[4] = gg.getRangesList("libsigner.so")[1]["start"] + 0x39CC; -- 数值地址:0x7556EC69CC
t[5] = gg.getRangesList("libsigner.so")[1]["start"] + 0x6738; -- 数值地址:0x7556EC9738
t[6] = gg.getRangesList("libsigner.so")[1]["start"] + 0x6BB0; -- 数值地址:0x7556EC9BB0
t[7] = gg.getRangesList("libsigner.so")[1]["start"] + 0x6C20; -- 数值地址:0x7556EC9C20
t[8] = gg.getRangesList("libsigner.so")[1]["start"] + 0x7028; -- 数值地址:0x7556ECA028
t[9] = gg.getRangesList("libsigner.so")[1]["start"] + 0x7030; -- 数值地址:0x7556ECA030
t[10] = gg.getRangesList("libsigner.so")[1]["start"] + 0x709C; -- 数值地址:0x7556ECA09C
t[11] = gg.getRangesList("libsigner.so")[1]["start"] + 0x70A4; -- 数值地址:0x7556ECA0A4
t[12] = gg.getRangesList("libsigner.so")[1]["start"] + 0x70C4; -- 数值地址:0x7556ECA0C4
t[13] = gg.getRangesList("libsigner.so")[1]["start"] + 0x70CC; -- 数值地址:0x7556ECA0CC
t[14] = gg.getRangesList("libsigner.so")[1]["start"] + 0x71C8; -- 数值地址:0x7556ECA1C8
t[15] = gg.getRangesList("libsigner.so")[1]["start"] + 0x725C; -- 数值地址:0x7556ECA25C
gg.addListItems({
[1] = {
address = t[1],
flags = 4,
value = -721215457,
freeze = true,
},
[2] = {
address = t[2],
flags = 4,
value = -721215457,
freeze = true,
},
[3] = {
address = t[3],
flags = 4,
value = -721215457,
freeze = true,
},
[4] = {
address = t[4],
flags = 4,
value = -721215457,
freeze = true,
},
[5] = {
address = t[5],
flags = 4,
value = -721215457,
freeze = true,
},
[6] = {
address = t[6],
flags = 4,
value = -721215457,
freeze = true,
},
[7] = {
address = t[7],
flags = 4,
value = -721215457,
freeze = true,
},
[8] = {
address = t[8],
flags = 4,
value = -721215457,
freeze = true,
},
[9] = {
address = t[9],
flags = 4,
value = -721215457,
freeze = true,
},
[10] = {
address = t[10],
flags = 4,
value = -721215457,
freeze = true,
},
[11] = {
address = t[11],
flags = 4,
value = -721215457,
freeze = true,
},
[12] = {
address = t[12],
flags = 4,
value = -721215457,
freeze = true,
},
[13] = {
address = t[13],
flags = 4,
value = -721215457,
freeze = true,
},
[14] = {
address = t[14],
flags = 4,
value = -721215457,
freeze = true,
},
[15] = {
address = t[15],
flags = 4,
value = -721215457,
freeze = true,
},
})
gg.toast("😂😂😂开启成功")
end
gg.playMusic('https://xuanmo.xyz/f/JZgnCM/%E5%BC%80%E5%90%AF%E6%88%90%E5%8A%9F.mp3')
end,
function()
gg.playMusic('https://xuanmo.xyz/f/WEkDIG/%E5%A4%B1%E8%B4%A5.mp3')
end),
lh.switch(
"过移速",
function()
so=gg.getRangesList('libUE4.so')[1].start
py=0x580B3B8
setvalue(so+py,4,-698416192)
gg.playMusic('https://xuanmo.xyz/f/JZgnCM/%E5%BC%80%E5%90%AF%E6%88%90%E5%8A%9F.mp3')
end,
function()
gg.playMusic('https://xuanmo.xyz/f/WEkDIG/%E5%A4%B1%E8%B4%A5.mp3')
end
),
}},
[2]={--第二分区
['分区名字']="功能区",
['功能配置']={
lh.switch(
"静态广角",
function()
local r = gg.prompt({'自改广角'}, {'1'},{'text'})
so=gg.getRangesList('libUE4.so')[1].start
py=0x3108E38
setvalue(so+py,16,r[1])
gg.playMusic('https://xuanmo.xyz/f/JZgnCM/%E5%BC%80%E5%90%AF%E6%88%90%E5%8A%9F.mp3')
end,
function()
local r = gg.prompt({'自改广角'}, {'1'},{'text'})
so=gg.getRangesList('libUE4.so')[1].start
py=0x3108E38
setvalue(so+py,16,r[1])
gg.playMusic('https://xuanmo.xyz/f/JZgnCM/%E5%BC%80%E5%90%AF%E6%88%90%E5%8A%9F.mp3')
end
),
lh.switch(
"聚点",
function()
if gg.getRangesList("libUE4.so")[1] then
local t = {}
t[1] = gg.getRangesList("libUE4.so")[1]["start"] + 0x5769F10; -- 数值地址:0x6E6D744F84
gg.addListItems({
[1] = {
address = t[1],
flags = 16,
value = 8.47963525e-21,
freeze = true,
},
})
end
gg.playMusic('https://xuanmo.xyz/f/JZgnCM/%E5%BC%80%E5%90%AF%E6%88%90%E5%8A%9F.mp3')
end,
function()
if gg.getRangesList("libUE4.so")[1] then
local t = {}
t[1] = gg.getRangesList("libUE4.so")[1]["start"] + 0x5769F10; -- 数值地址:0x6E6D744F84
gg.addListItems({
[1] = {
address = t[1],
flags = 16,
value = 8.52492339e-21,
freeze = true,
},
})
end
gg.playMusic('https://xuanmo.xyz/f/66ydcj/%E5%85%B3%E9%97%AD.mp3')
end
),
lh.switch(
"锁帧",
function()
local t = {"libUE4.so:bss", "Cb"}
local tt = {0x26E8, 0x34}
local ttt = S_Pointer(t, tt, true)
gg.addListItems({{address = ttt, flags = 16, value = 120, freeze = true}})
local t = {"libUE4.so:bss", "Cb"}
local tt = {0x26E8, 0x38}
local ttt = S_Pointer(t, tt, true)
gg.addListItems({{address = ttt, flags = 16, value = 120, freeze = true}})
gg.playMusic('https://xuanmo.xyz/f/JZgnCM/%E5%BC%80%E5%90%AF%E6%88%90%E5%8A%9F.mp3')
end,
function()
gg.playMusic('https://xuanmo.xyz/f/WEkDIG/%E5%A4%B1%E8%B4%A5.mp3')
end
),
lh.switch(
"无后",
function()
if gg.getRangesList("libUE4.so")[1] then
local t = {}
t[1] = gg.getRangesList("libUE4.so")[1]["start"] + 0x576E910; --不要工具箱 数值地址:0x789A90E910
gg.setValues({
[1] = {
address = t[1],
flags = 16,
value = 8.8411673e-21,
},
})
gg.toast("开启成功")
end
gg.playMusic('https://xuanmo.xyz/f/JZgnCM/%E5%BC%80%E5%90%AF%E6%88%90%E5%8A%9F.mp3')
end,
function()
if gg.getRangesList("libUE4.so")[1] then
local t = {}
t[1] = gg.getRangesList("libUE4.so")[1]["start"] + 0x576E910; --不要工具箱 数值地址:0x789A90E910
gg.setValues({
[1] = {
address = t[1],
flags = 16,
value = 8.84116488e-21,
},
})
gg.toast("开启成功")
end
gg.playMusic('https://xuanmo.xyz/f/66ydcj/%E5%85%B3%E9%97%AD.mp3')
end
),
lh.switch(
"六道仙人",
function()
if gg.getRangesList("libUE4.so")[1] then
local t = {}
t[1] = gg.getRangesList("libUE4.so")[1]["start"] + 0x6284F70; --不要工具箱 数值地址:0x789CFE0F70
gg.setValues({
[1] = {
address = t[1],
flags = 16,
value = 8.47697276683757E-21,
},
})
gg.toast("开启成功")
end
gg.playMusic('https://xuanmo.xyz/f/JZgnCM/%E5%BC%80%E5%90%AF%E6%88%90%E5%8A%9F.mp3')
end,
function()
if gg.getRangesList("libUE4.so")[1] then
local t = {}
t[1] = gg.getRangesList("libUE4.so")[1]["start"] + 0x6284F70; --不要工具箱 数值地址:0x789CFE0F70
gg.setValues({
[1] = {
address = t[1],
flags = 16,
value = 8.53154084e-21,
},
})
gg.toast("开启成功")
end
gg.playMusic('https://xuanmo.xyz/f/66ydcj/%E5%85%B3%E9%97%AD.mp3')
end
),
lh.switch(
"度假岛加速",
function()
LSQ_Chain({'libUE4.so:bss','Cb'},{0x5C4570,0x30,0x4B0,0x88},"修改","0",4,"灵魂")
LSQ_Chain({'libUE4.so:bss','Cb'},{0x5C4570,0x30,0x440,0x1B0,0x1C0},"冻结","76,786.6875",16,"坐标")
LSQ_Chain({'libUE4.so:bss','Cb'},{0x5C4570,0x30,0x440,0x1B0,0x1C4},"冻结","131,459.078125",16,"坐标")
LSQ_Chain({'libUE4.so:bss','Cb'},{0x5C4570,0x30,0x440,0x1B0,0x1C8},"冻结","91.93464660645",16,"坐标")
LSQ_Chain({'libUE4.so:bss','Cb'},{0x5C4570,0x30,0x440,0x4A0,0x3E8},"冻结","54148",4,"卡脚")
gg.sleep(2000)
so=gg.getRangesList('libUE4.so')[1].start
py=0x99456EC
setvalue(so+py,4,-721215457)
so=gg.getRangesList('libUE4.so')[1].start
py=0x73b93b8
setvalue(so+py,4,-698416192)--3.8过坐标
local t = {"libUE4.so:bss", "Cb"}
local tt = {0x5C4570,0x30,0x440,0x1b0,0x1c0}
local ttt = S_Pointer(t, tt, true)
gg.addListItems({{address = ttt, flags = 16, freeze = false}})
local t = {"libUE4.so:bss", "Cb"}
local tt = {0x5C4570,0x30,0x440,0x1b0,0x1c4}
local ttt = S_Pointer(t, tt, true)
gg.addListItems({{address = ttt, flags = 16, freeze = false}})
local t = {"libUE4.so:bss", "Cb"}
local tt = {0x5C4570,0x30,0x440,0x1b0,0x1c8}
local ttt = S_Pointer(t, tt, true)
gg.addListItems({{address = ttt, flags = 16, freeze = false}})
LSQ_Chain({'libUE4.so:bss','Cb'},{0x5C4570,0x30,0x4B0,0x88},"修改","167838216",4,"灵魂")
LSQ_Chain({'libUE4.so:bss','Cb'},{0x5C4570,0x30,0x440,0x4A0,0x550},"修改","0",16,"240")
LSQ_Chain({'libUE4.so:bss','Cb'},{0x5C4570,0x30,0x440,0x4A0,0x1F4-0x3C},"冻结","150",16,"上下坡")
LSQ_Chain({'libUE4.so:bss','Cb'},{0x5C4570,0x30,0x4B0,0x498,0xB50},"修改","0.8",16,"慢动作")
LSQ_Chain({'libUE4.so:bss','Cb'},{0x5C4570,0x30,0x4B0,0x4A0,0x3C},"冻结","33000000",4,"自身")
LSQ_Chain({'libUE4.so:bss','Cb'},{0x5C4570,0x30,0x440,0x4A0,0x1B4},"修改","4.5",16,"重力")
LSQ_Chain({'libUE4.so:bss','Cb'},{0x5C4570,0x30,0x440,0x4A0,0x1BC},"修改","3500",16,"443")
LSQ_Chain({'libUE4.so:bss','Cb'},{0x5C4570,0x30,0x440,0x1098},"冻结","5",16,"微加速")
LSQ_Chain({'libUE4.so:bss','Cb'},{0x5C4570,0x30,0x440,0x4A0,0xB88},"冻结","4800",16,"670")
LSQ_Chain({'libUE4.so:bss','Cb'},{0x5C4570,0x30,0x84},"修改","999999",16,"防拉原1")
LSQ_Chain({'libUE4.so:bss','Cb'},{0x5C4570,0x30,0x440,0x4A0,0x200},"修改","0",16,"60000")
LSQ_Chain({'libUE4.so:bss','Cb'},{0x5C4570,0x30,0x440,0x4A0,0x284},"修改","0",16,"7500")
LSQ_Chain({'libUE4.so:bss','Cb'},{0x5C4570,0x30,0x440,0x4A0,0x208},"修改","999999",16,"8192")
LSQ_Chain({'libUE4.so:bss','Cb'},{0x5C4570,0x30,0x440,0x4A0,0x22C},"修改","999999",16,"0.05")
LSQ_Chain({'libUE4.so:bss','Cb'},{0x5C4570,0x30,0x440,0x4A0,0x21C},"修改","999999",16,"2048")
gg.playMusic('https://xuanmo.xyz/f/JZgnCM/%E5%BC%80%E5%90%AF%E6%88%90%E5%8A%9F.mp3')
end,
function()
gg.playMusic('https://xuanmo.xyz/f/66ydcj/%E5%85%B3%E9%97%AD.mp3')
end
),
lh.switch(
"除雾",
function()
local t = {"libUE4.so:bss", "Cb"}
local tt = {0x5C4570,0x58,0x78,0x248,0x18E8,0x64}
local ttt = S_Pointer(t, tt, true)
gg.addListItems({{address = ttt, flags = 16, value = 99999, freeze = true}})
gg.playMusic('https://xuanmo.xyz/f/JZgnCM/%E5%BC%80%E5%90%AF%E6%88%90%E5%8A%9F.mp3')
end,
function()
local t = {"libUE4.so:bss", "Cb"}
local tt = {0x5C4570,0x58,0x78,0x248,0x18E8,0x64}
local ttt = S_Pointer(t, tt, true)
gg.addListItems({{address = ttt, flags = 16, value = 12000, freeze = true}})
gg.playMusic('https://xuanmo.xyz/f/66ydcj/%E5%85%B3%E9%97%AD.mp3')
end
),
},}
}
第二页 = {
['分页名字']="音楽",
[1]={--第一分区
['分区名字']="搜索音乐",
['功能配置']={
lh.button("暂停",
function()
toMusic("已暂停")
end),
wyylog,
},},
}
第三页 = {
['分页名字']="設定",
[1]={--第一分区
['分区名字']="UI設定",
['功能配置']={
lh.switch("音量键隐藏UI",
function()
音量键=true
end,
function()
音量键=false
end),
lh.switch("摇一摇隐藏UI",
function()
摇一摇=true
end,
function()
摇一摇=false
end),
lh.button(
"退出",
function()
tuichu=1
end),
},}
}
lh.menu({
第一页,--调用上边的分页配置
第二页,
第三页,
})