DM="欢迎使用白切鸡国体" gg.playMusic("https://fanyi.baidu.com/gettts?lan=zh&text="..DM.."&spd=5&source=wise") draw.setColor('#FF6B6B') draw.setSize(50) draw.setStyle('描边并填充') draw.text('白切鸡范围',300,420) draw.text('@BQJNP6',300,480) import "android.graphics.Color" import "android.graphics.drawable.GradientDrawable" import "android.graphics.Typeface" import 'android.widget.LinearLayout' import 'android.widget.TextView' import 'android.widget.ScrollView' import 'android.widget.FrameLayout' import 'android.widget.ImageView' import 'android.widget.Switch' import 'android.widget.Button' import 'android.widget.HorizontalScrollView' import 'android.widget.RelativeLayout' local material3 = require 'material3' local context = material3:getContext() local window = context:getSystemService("window") YoYoImpl = luajava.getYoYoImpl() vibra = context:getSystemService(Context.VIBRATOR_SERVICE) rs = context:getResources():getDisplayMetrics() rs = tostring(rs) rs = string.gsub(rs, ',', ';') rs = string.gsub(rs, 'DisplayMetrics', '') load('rs=' .. rs)() dheight = rs.height dwidth = rs.width if tonumber(dheight) == nil then dwidth = 1340 dheight = 2300 end function panduan(rec) local f = io.open(rec) if f == nil then return false else f:close(); return true end end function 获取图片(txt) txt = string.url(txt, "de") if string.find(tostring(txt), "http") ~= nil then ntxt = string.sub(string.gsub(txt, "/", "-"), -10, -1) if file.length("/sdcard/白切鸡UI/图片/" .. ntxt, false) < 200 then luajava.download(txt, "/sdcard/白切鸡/图片/" .. ntxt) end txt = "/sdcard/白切鸡/图片/" .. ntxt end return luajava.getBitmapDrawable(txt) end function 创建圆角背景(color, radius, strokeColor, strokeWidth) local g = luajava.new(GradientDrawable) g:setCornerRadius(radius or 15) g:setColor(color or 0xff222222) if strokeColor then g:setStroke(strokeWidth or 2, strokeColor) end return g end function 创建渐变背景(colors, radius) local g = luajava.new(GradientDrawable) g:setCornerRadius(radius or 15) g:setGradientType(GradientDrawable.LINEAR_GRADIENT) g:setColors(colors or {0xff667eea, 0xff764ba2}) g:setOrientation(GradientDrawable.Orientation.TL_BR) return g end function 设置背景(view, drawable) if view and drawable then pcall(function() view:setBackgroundDrawable(drawable) end) pcall(function() view:setBackground(drawable) end) end end function getLayoutParams() local lp = luajava.new(WindowManager.LayoutParams) if (Build.VERSION.SDK_INT >= 26) then lp.type = WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY else lp.type = WindowManager.LayoutParams.TYPE_PHONE end lp.format = PixelFormat.RGBA_8888 lp.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE lp.gravity = Gravity.TOP | Gravity.LEFT lp.width = WindowManager.LayoutParams.WRAP_CONTENT lp.height = WindowManager.LayoutParams.WRAP_CONTENT return lp end local pages = {} local currentPage = 1 local pageCount = 0 local mainView = nil local floatIcon = nil local mainParams = nil local iconParams = nil local isExiting = false function 创建页面(tagName, icon) pageCount = pageCount + 1 local idx = pageCount pages[idx] = { name = tagName, icon = icon or "📄", views = {}, container = nil } return idx end function 添加控件(pageIdx, view) if pages[pageIdx] then table.insert(pages[pageIdx].views, view) end end function 创建标题(text) return { TextView, text = text or "标题", textColor = "#FF6B6B", textSize = "18sp", gravity = "center", layout_width = "match_parent", layout_height = "wrap_content", padding = {"10dp", "10dp", "10dp", "5dp"}, __onFinish = function(v) v:setTypeface(Typeface.DEFAULT_BOLD) end } end function 创建卡片按钮(icon, title, desc, bgColor, onClick) return { LinearLayout, orientation = "horizontal", layout_width = "match_parent", layout_height = "60dp", layout_margin = {"4dp", "3dp", "4dp", "3dp"}, gravity = "center_vertical", __onFinish = function(v) 设置背景(v, 创建圆角背景(bgColor or 0x22ffffff, 12)) v:setElevation(2) end, padding = {"15dp", "0dp", "15dp", "0dp"}, onClick = function() if onClick then luajava.newThread(onClick):start() end end, { TextView, text = icon or "📱", textSize = "24sp", gravity = "center", layout_width = "45dp", layout_height = "45dp", __onFinish = function(v) 设置背景(v, 创建圆角背景(0x33ffffff, 360)) end, }, { LinearLayout, orientation = "vertical", layout_width = "0dp", layout_weight = 1, layout_height = "wrap_content", layout_marginLeft = "12dp", { TextView, text = title or "功能名称", textColor = "#ffffff", textSize = "16sp", layout_width = "match_parent", layout_height = "wrap_content", __onFinish = function(v) v:setTypeface(Typeface.DEFAULT_BOLD) end }, { TextView, text = desc or "点击执行", textColor = "#88ffffff", textSize = "11sp", layout_width = "match_parent", layout_height = "wrap_content", } }, { TextView, text = "›", textColor = "#44ffffff", textSize = "24sp", layout_width = "wrap_content", layout_height = "wrap_content", } } end function 创建小按钮(text, bgColor, onClick) return { LinearLayout, layout_width = "match_parent", layout_height = "38dp", layout_margin = {"4dp", "2dp", "4dp", "2dp"}, gravity = "center", __onFinish = function(v) 设置背景(v, 创建圆角背景(bgColor or 0xff667eea, 10)) end, onClick = function() if onClick then luajava.newThread(onClick):start() end end, { TextView, text = text or "按钮", textColor = "#ffffff", textSize = "13sp", gravity = "center", layout_width = "match_parent", layout_height = "match_parent", } } end function 创建开关(text, onFunc, offFunc) local id = "switch_" .. os.time() .. math.random(1000, 9999) return { LinearLayout, orientation = "horizontal", layout_width = "match_parent", layout_height = "44dp", layout_margin = {"4dp", "2dp", "4dp", "2dp"}, gravity = "center_vertical", __onFinish = function(v) 设置背景(v, 创建圆角背景(0x33ffffff, 10)) end, padding = {"12dp", "0dp", "12dp", "0dp"}, { TextView, text = text or "开关", textColor = "#ffffff", textSize = "13sp", layout_width = "0dp", layout_weight = 1, }, { Switch, id = luajava.newId(id), layout_width = "wrap_content", layout_height = "wrap_content", __onFinish = function(v) luajava.setInterface(v, 'setOnCheckedChangeListener', { onCheckedChanged = function(view, isChecked) if isChecked then if onFunc then luajava.newThread(onFunc):start() end else if offFunc then luajava.newThread(offFunc):start() end end end }) end } } end function 创建分隔() return { View, layout_width = "match_parent", layout_height = "1dp", __onFinish = function(v) v:setBackgroundColor(0x33ffffff) end, layout_margin = {"10dp", "5dp", "10dp", "5dp"}, } end function 创建标签(text, color) return { TextView, text = text or "标签", textColor = color or "#FF6B6B", textSize = "11sp", gravity = "center", layout_width = "wrap_content", layout_height = "wrap_content", padding = {"8dp", "3dp", "8dp", "3dp"}, __onFinish = function(v) 设置背景(v, 创建圆角背景(0x33ffffff, 20)) end, layout_margin = {"2dp", "2dp", "2dp", "2dp"}, } end function 构建主界面() local topBar = { LinearLayout, orientation = "horizontal", layout_width = "match_parent", layout_height = "44dp", gravity = "center_vertical", padding = {"4dp", "4dp", "4dp", "4dp"}, __onFinish = function(v) 设置背景(v, 创建渐变背景({0xff1a1a2e, 0xff16213e}, 0)) end, { TextView, text = "⚡", textSize = "18sp", layout_width = "wrap_content", layout_height = "wrap_content", layout_marginRight = "5dp", }, { TextView, text = "白切鸡", textColor = "#ffffff", textSize = "16sp", layout_width = "0dp", layout_weight = 1, __onFinish = function(v) v:setTypeface(Typeface.DEFAULT_BOLD) end }, { TextView, text = "v2.0", textColor = "#88ffffff", textSize = "10sp", layout_width = "wrap_content", layout_height = "wrap_content", } } local tabLayout = { HorizontalScrollView, layout_width = "match_parent", layout_height = "40dp", scrollbars = "none", __onFinish = function(v) v:setHorizontalScrollBarEnabled(false) v:setOverScrollMode(View.OVER_SCROLL_NEVER) end, { LinearLayout, id = "tabContainer", orientation = "horizontal", layout_width = "wrap_content", layout_height = "match_parent", gravity = "center_vertical", padding = {"4dp", "0dp", "4dp", "0dp"}, } } local tabContainer = tabLayout[#tabLayout] for i = 1, #pages do local p = pages[i] local isActive = (i == currentPage) local tabBtn = { LinearLayout, id = luajava.newId("tabBtn_" .. i), orientation = "vertical", gravity = "center", layout_width = "wrap_content", layout_height = "match_parent", padding = {"12dp", "4dp", "12dp", "4dp"}, layout_margin = {"2dp", "2dp", "2dp", "2dp"}, __onFinish = function(v) 设置背景(v, 创建圆角背景(isActive and 0xff667eea or 0x00ffffff, 20)) end, onClick = function() if i ~= currentPage then 切换页面(i) end end, { TextView, id = luajava.newId("tabText_" .. i), text = p.icon .. " " .. p.name, textColor = isActive and "#ffffff" or "#aaaaaa", textSize = "12sp", gravity = "center", layout_width = "wrap_content", layout_height = "wrap_content", } } tabContainer[#tabContainer + 1] = tabBtn end local contentArea = { FrameLayout, layout_width = "290dp", layout_height = "300dp", padding = {"4dp", "4dp", "4dp", "4dp"}, } for i = 1, #pages do local pageLl = luajava.loadlayout({ LinearLayout, id = luajava.newId("pageContent_" .. i), orientation = "vertical", layout_width = "match_parent", layout_height = "wrap_content", padding = {"2dp", "2dp", "2dp", "2dp"}, }) pages[i].container = pageLl local scroll = luajava.loadlayout({ ScrollView, id = luajava.newId("page_" .. i), visibility = (i == currentPage and View.VISIBLE or View.GONE), layout_width = "match_parent", layout_height = "match_parent", pageLl, }) contentArea[#contentArea + 1] = scroll end local mainLayout = { LinearLayout, id = "mainCard", orientation = "vertical", layout_width = "wrap_content", layout_height = "wrap_content", __onFinish = function(v) 设置背景(v, 创建圆角背景(0xdd1a1a2e, 16, 0x33ffffff, 1)) v:setElevation(10) end, topBar, 创建分隔(), tabLayout, { View, layout_height = "2dp", layout_width = "match_parent" }, contentArea, { View, layout_height = "4dp", layout_width = "match_parent" }, } return luajava.loadlayout(mainLayout) end function 填充页面内容() for i = 1, #pages do local container = pages[i].container if container then for _, viewTable in ipairs(pages[i].views) do local view = luajava.loadlayout(viewTable) if view then container:addView(view) end end end end end function 切换页面(index) currentPage = index luajava.runUiThread(function() for i = 1, #pages do local page = luajava.getIdValue("page_" .. i) if page then if i == index then page:setVisibility(View.VISIBLE) else page:setVisibility(View.GONE) end end end for i = 1, #pages do local tab = luajava.getIdValue("tabBtn_" .. i) local txt = luajava.getIdValue("tabText_" .. i) if tab and txt then if i == index then 设置背景(tab, 创建圆角背景(0xff667eea, 20)) txt:setTextColor(0xffffffff) else 设置背景(tab, 创建圆角背景(0x00ffffff, 20)) txt:setTextColor(0xffaaaaaa) end end end end) end local 主窗口可见 = true function 创建悬浮头像() local iconUrl = "https://www.mpimg.cn/down.php/abce96f8a1333b0de6cad215b7aa215d.png" local iconPath = "/sdcard/白切鸡/图片/float_icon" if not panduan(iconPath) then luajava.download(iconUrl, iconPath) end local img = luajava.getBitmapDrawable(iconPath) local bg = nil if img then bg = img else bg = luajava.new(GradientDrawable) bg:setCornerRadius(360) bg:setGradientType(GradientDrawable.LINEAR_GRADIENT) bg:setColors({0xff667eea, 0xff764ba2}) bg:setStroke(3, 0xffffffff) end return { LinearLayout, id = "floatIcon", orientation = "vertical", layout_width = "40dp", layout_height = "40dp", gravity = "center", __onFinish = function(v) 设置背景(v, bg) v:setElevation(8) end, } end function 切换主窗口() luajava.runUiThread(function() if 主窗口可见 then mainView:setVisibility(View.GONE) 主窗口可见 = false else mainView:setVisibility(View.VISIBLE) 主窗口可见 = true end end) end function 创建可拖动悬浮窗(contentView, params, isIcon, clickCallback) if not contentView then return end local containerLayout = { FrameLayout, layout_width = "wrap_content", layout_height = "wrap_content", contentView, } local container = luajava.loadlayout(containerLayout) local maxX = isIcon and dwidth - 50 or dwidth - 310 local maxY = isIcon and dheight - 50 or dheight - 420 local drag = {x = 0, y = 0, rawX = 0, rawY = 0, moving = false} local hasMoved = false container:setOnTouchListener(luajava.createProxy('android.view.View$OnTouchListener', { onTouch = function(v, event) local action = event:getAction() if action == MotionEvent.ACTION_DOWN then hasMoved = false drag.moving = false drag.rawX = event:getRawX() drag.rawY = event:getRawY() drag.x = params.x drag.y = params.y return true elseif action == MotionEvent.ACTION_MOVE then local dx = event:getRawX() - drag.rawX local dy = event:getRawY() - drag.rawY if math.abs(dx) > 5 or math.abs(dy) > 5 then hasMoved = true drag.moving = true end if drag.moving then params.x = drag.x + dx params.y = drag.y + dy if params.x < 0 then params.x = 0 end if params.y < 0 then params.y = 0 end if params.x > maxX then params.x = maxX end if params.y > maxY then params.y = maxY end window:updateViewLayout(container, params) end return true elseif action == MotionEvent.ACTION_UP then if not hasMoved and clickCallback then clickCallback() end return true end return false end })) return container end function 退出脚本() if isExiting then return end isExiting = true luajava.runUiThread(function() if mainView then pcall(function() window:removeView(mainView) end) end if floatIcon then pcall(function() window:removeView(floatIcon) end) end end) gg.sleep(200) luajava.setFloatingWindowHide(false) gg.setVisible(true) pcall(function() app.exit() end) pcall(function() os.exit() end) end local page1 = 创建页面("主页", "🏠") 添加控件(page1, 创建标题("⚡ 白切鸡")) 添加控件(page1, 创建卡片按钮("📱", "选择游戏进程", "点击选择当前游戏进程", 0x22ffffff, function() gg.setProcessX() gg.toast("进程已选择") end)) 添加控件(page1, 创建卡片按钮("🔧", "防止闪退", "有效防止闪退", 0x22ffffff, function() 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 local t = {"libanogs.so:bss", "Cb"} local tt = {0x618} local ttt = S_Pointer(t, tt, true) gg.addListItems({{address = ttt, flags = 4, value = 4096, freeze = true}}) DM="防闪开启成功" gg.playMusic("https://fanyi.baidu.com/gettts?lan=zh&text="..DM.."&spd=5&source=wise") gg.alert("防闪开启成功") end)) 添加控件(page1, 创建分隔()) 添加控件(page1, 创建卡片按钮("📊", "状态信息", "查看当前运行状态", 0x22ffffff, function() gg.toast("状态: 正常运行") end)) local page2 = 创建页面("功能", "🚀") 添加控件(page2, 创建标题("🔥 功能列表")) 添加控件(page2, 创建卡片按钮("😋", "防卡伤", "7891", 0x22ffffff, function() DM="防卡伤开启成功" gg.playMusic("https://fanyi.baidu.com/gettts?lan=zh&text="..DM.."&spd=5&source=wise") gg.toast("开启成功") end)) 添加控件(page2, 创建卡片按钮("✈️", "爆头范围", "枪枪头🥵", 0x22ffffff, function() gg.searchNumber("15.75", gg.TYPE_FLOAT, false, gg.SIGN_EQUAL, 0, -1, 0) revert = gg.getResults(9999, nil, nil, nil, nil, nil, nil, nil, nil) gg.editAll("80", gg.TYPE_FLOAT) gg.processResume() DM="开启成功" gg.playMusic("https://fanyi.baidu.com/gettts?lan=zh&text="..DM.."&spd=5&source=wise") gg.toast("开启成功") end)) 添加控件(page2, 创建卡片按钮("👿", "飞天范围", "枪枪甲😱", 0x22ffffff, function() gg.searchNumber("15.75", gg.TYPE_FLOAT, false, gg.SIGN_EQUAL, 0, -1, 0) revert = gg.getResults(9999, nil, nil, nil, nil, nil, nil, nil, nil) gg.editAll("60", gg.TYPE_FLOAT) gg.processResume() DM="飞天范围开启成功" gg.playMusic("https://fanyi.baidu.com/gettts?lan=zh&text="..DM.."&spd=5&source=wise") gg.toast("开启成功") end)) 添加控件(page2, 创建分隔()) 添加控件(page2, 创建小按钮("⚡ 全屏特效", 0xff667eea, function() gg.setRanges(gg.REGION_ANONYMOUS) gg.searchNumber("10;46", gg.TYPE_FLOAT, false, gg.SIGN_EQUAL, 0, -1) gg.searchNumber("10;46", gg.TYPE_FLOAT, false, gg.SIGN_EQUAL, 0, -1) gg.getResults(100) gg.editAll("9999", gg.TYPE_FLOAT) gg.clearResults() DM="全屏特效开启成功" gg.playMusic("https://fanyi.baidu.com/gettts?lan=zh&text="..DM.."&spd=5&source=wise") gg.toast("开启成功") end)) 添加控件(page2, 创建小按钮("😂 粗X特效", 0xff6b5b7b, function() gg.setRanges(gg.REGION_ANONYMOUS) gg.searchNumber("10;46", gg.TYPE_FLOAT, false, gg.SIGN_EQUAL, 0, -1) gg.searchNumber("10;46", gg.TYPE_FLOAT, false, gg.SIGN_EQUAL, 0, -1) gg.getResults(100) gg.editAll("999", gg.TYPE_FLOAT) gg.clearResults() DM="粗叉特效开启成功" gg.playMusic("https://fanyi.baidu.com/gettts?lan=zh&text="..DM.."&spd=5&source=wise") gg.toast("开启成功") end)) local page3 = 创建页面("设置", "⚙️") 添加控件(page3, 创建标题("⚙️ 设置")) 添加控件(page3, 创建分隔()) 添加控件(page3, 创建开关("去除水印", function() draw.remove() end, function() draw.setColor('#FF6B6B') draw.setSize(50) draw.setStyle('描边并填充') draw.text('白切鸡', 300, 420) draw.text('LSZPD8', 300, 480) end )) 添加控件(page3, 创建分隔()) 添加控件(page3, 创建卡片按钮("ℹ️", "关于", "白切鸡", 0x22ffffff, function() gg.alert("白切鸡\n\n作者:白切鸡\n\n仅供学习交流使用") end)) 添加控件(page3, 创建分隔()) 添加控件(page3, 创建卡片按钮("🚪", "退出脚本", "点击退出白切鸡", 0x22ff3333, function() 退出脚本() end)) local rawMainView = 构建主界面() local rawFloatIcon = 创建悬浮头像() mainParams = getLayoutParams() mainParams.x = 30 mainParams.y = dheight / 4 iconParams = getLayoutParams() iconParams.x = dwidth - 50 iconParams.y = dheight / 2 - 20 local mainContainer = 创建可拖动悬浮窗(rawMainView, mainParams, false, nil) local iconContainer = 创建可拖动悬浮窗(rawFloatIcon, iconParams, true, function() 切换主窗口() end) mainView = mainContainer floatIcon = iconContainer 填充页面内容() luajava.runUiThread(function() window:addView(mainView, mainParams) window:addView(floatIcon, iconParams) 切换页面(1) end) gg.setVisible(false) luajava.setFloatingWindowHide(true) setExitEvent(function() 退出脚本() end) gg.sleep(86400000)