require "import" --米验验证 --2026 年 6 月 28 日 --登录地址 b6w.top --永久官网 b6w.cn --所有对接全部标配 RSA 加 AES256 CBC 动态密钥 --最后更新时间 2026 年 7 月 5 日 10.52 --本次修复对接完,进入你的源代码界面时候,没有背景默认黑屏的问题 import "java.lang.Thread" import "java.lang.Runnable" if not rawget(_G, "task") then task = function(a, b, c, d) local delay, func, input, cb if type(a) == "number" then delay, func, input, cb = a, b, c, d else delay, func, input, cb = 0, a, b, c end local r = Runnable{ run = function() if delay and delay > 0 then Thread.sleep(delay) end local ok, result = pcall(func, input) activity.runOnUiThread(Runnable{ run = function() if cb then cb(ok and result or nil) end end }) end } Thread(r).start() end end require "import" import "android.app.*" import "android.os.*" import "android.widget.*" import "android.view.*" import "android.webkit.*" import "android.net.Uri" import "android.content.Intent" import "android.util.Base64" import "android.graphics.drawable.GradientDrawable" local layout = import "miyan" local dlg_msg={ LinearLayout, orientation="vertical", layout_width="300dp", layout_height="wrap_content", paddingLeft="24dp", paddingRight="24dp", paddingTop="24dp", paddingBottom="16dp", { TextView, id="dlgTitle", text="", textSize="18sp", textColor="0xFFFFFFFF", paddingBottom="16dp", }, { TextView, id="dlgMsg", text="", textSize="14sp", textColor="0xCCFFFFFF", paddingBottom="8dp", }, } if _G._miyanVerified then activity.setContentView("miyan") local function CB(v,c,r) local d=GradientDrawable() d.setShape(GradientDrawable.RECTANGLE) d.setColor(c) d.setCornerRadii({r,r,r,r,r,r,r,r}) v.setBackgroundDrawable(d) end CB(Card,0x3FFFFFFF,30) CB(km,0x00FFFFFF,30) CB(kmdismiss,0x00FFFFFF,30) CB(login,0x00FFFFFF,30) CB(kmBj,0x3FFFFFFF,30) CB(jbBj,0x3FFFFFFF,30) CB(loginBj,0x3FFFFFFF,30) Title.getPaint().setFakeBoldText(true) km.setHintTextColor(0x4DFFFFFF) return end require "http" -- ==================== 配置 ==================== local CONFIG = { --请自行前往平台注册账号创建应用 b6w.top --应用 APP ID 也就是应用 Key apiKey = "ebe40cef57640487ce99e6a68a641b60", --1.0.0用于判断更新使用 version = "1.0.0", --请求地址勿动 --验证接口是完整的 RSA 加AES256 CBC authUrl = "https://b6w.top/api/Auth.php", --请求地址勿动 updateUrl = "https://b6w.top/api/Andlua.php", --密钥勿动 --大家不必担心这个就是更新信息显示的所以说简单的密钥就行 xorKey = "米验登录地址b6w.top官方网站b6w.cn", --下面这个是加载界面的那两个字可以改成自己的 --记住,最高只能输入四个中文有些屏幕小的只能输入三个或者两个 --英文和字符可以最高输入六个,不能再多了 --自己整吧 loadingText = "米验", publicKey = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtag8ChAg6/6fKl51orvyIcpg+3dlt8I3cLmYpD9aexlzxLUuRL7/dAtnfkEzsykGCcqHnb+KcmSMsHXYfbfvdmm/jRVuZ+0FU35WQTNEKFT7X5cWSx5VRC2GSIbrD2pxA0Y5j0oP91ac79Xeoz38KD9S9OTj29O9uX8ikrGhfkFzlLHrSRnnqU4Ra76rAaf5xepApucZlpsZhvhOtlpYfu9DltruEdeHQ5SUzpFNJvbrTCULvTRo5mYRnXrUBm8enC5hlsv/msXbJQM0OCTaCwcYKONa+F/a7HCGt7nIoeI0/eoE4gel4XCmNxc+4TKo1/kQuFi7Qq9fkZXWJufbVQIDAQAB" } local rawPK = CONFIG.publicKey local d = "--" .. "---" if rawPK:find(d .. "BEGIN") == nil then rawPK = d .. "BEGIN PUBLIC KEY" .. d .. "\n" .. rawPK .. "\n" .. d .. "END PUBLIC KEY" .. d end local cachedPK = rawPK local deviceId = "" local function bxor(a, b) local r, p = 0, 1 for i = 1, 8 do if a % 2 ~= b % 2 then r = r + p end a = math.floor(a / 2) b = math.floor(b / 2) p = p * 2 end return r end local function xorDecode(b64) local xb = Base64.decode(b64, Base64.DEFAULT) local ks = luajava.newInstance("java.lang.String", CONFIG.xorKey) local keyBytes = ks.getBytes("UTF-8") local result = {} for i = 0, #xb - 1 do local b = xb[i] if b < 0 then b = b + 256 end local k = keyBytes[i % #keyBytes] if k < 0 then k = k + 256 end result[i + 1] = bxor(b, k) end local str = "" for i = 1, #result do str = str .. string.char(result[i]) end return str end local function toJson(tbl) local parts = {} for k, v in pairs(tbl) do local val if type(v) == "string" then val = '"' .. v:gsub('\\', '\\\\'):gsub('"', '\\"') .. '"' elseif type(v) == "number" then val = tostring(v) elseif type(v) == "boolean" then val = v and "true" or "false" else val = '"' .. tostring(v) .. '"' end table.insert(parts, '"' .. k .. '":' .. val) end return "{" .. table.concat(parts, ",") .. "}" end local function urlEncode(str) return str:gsub("([^%w%-%.%_%~])", function(c) return string.format("%%%02X", string.byte(c)) end) end local function generateNonce(len) local chars = "abcdefghijklmnopqrstuvwxyz0123456789" local str = "" for i = 1, len do local r = math.random(1, #chars) str = str .. chars:sub(r, r) end return str end local function getDeviceId() import "android.provider.Settings" local Secure = luajava.bindClass("android.provider.Settings$Secure") local id = Secure.getString(activity.getContentResolver(), "android_id") if id == nil or id == "" then id = "unknown_device" end return tostring(id) end local function CircleButton(view, InsideColor, radiu) local drawable = GradientDrawable() drawable.setShape(GradientDrawable.RECTANGLE) drawable.setColor(InsideColor) drawable.setCornerRadii({radiu, radiu, radiu, radiu, radiu, radiu, radiu, radiu}) view.setBackgroundDrawable(drawable) end local function dp2px(dp) return math.floor(dp * activity.getResources().getDisplayMetrics().density + 0.5) end local function styleDialog(dialog) local window = dialog.getWindow() window.setLayout(dp2px(300), -2) local bg = GradientDrawable() bg.setShape(GradientDrawable.RECTANGLE) bg.setColor(0x3FFFFFFF) bg.setCornerRadius(dp2px(20)) window.getDecorView().setBackgroundDrawable(bg) end local function showDlg(title, msg, btnText, callback) local view = loadlayout(dlg_msg) local ll = view for i = 0, ll.getChildCount() - 1 do local child = ll.getChildAt(i) if luajava.instanceof(child, TextView) then if i == 0 then child.setText(title) elseif i == 1 then child.setText(msg) child.setLineSpacing(0, 1.4) end end end local builder = AlertDialog.Builder(activity, android.R.style.Theme_Material_Dialog) builder.setView(view) builder.setPositiveButton(btnText or "确定", callback and {onClick=function(v) callback() end} or nil) builder.setCancelable(false) local dialog = builder.show() styleDialog(dialog) dialog.getButton(dialog.BUTTON_POSITIVE).setTextColor(0xFF818CF8) return dialog end local function aesEncrypt(plainText, key, iv) import "javax.crypto.Cipher" import "javax.crypto.spec.SecretKeySpec" import "javax.crypto.spec.IvParameterSpec" local ks = luajava.newInstance("javax.crypto.spec.SecretKeySpec", key, "AES") local is = luajava.newInstance("javax.crypto.spec.IvParameterSpec", iv) local c = Cipher.getInstance("AES/CBC/PKCS5Padding") c.init(Cipher.ENCRYPT_MODE, ks, is) local encrypted = c.doFinal(luajava.newInstance("java.lang.String", plainText).getBytes("UTF-8")) return Base64.encodeToString(encrypted, Base64.NO_WRAP) end local function aesDecrypt(cipherText, key, iv) import "javax.crypto.Cipher" import "javax.crypto.spec.SecretKeySpec" import "javax.crypto.spec.IvParameterSpec" local ks = luajava.newInstance("javax.crypto.spec.SecretKeySpec", key, "AES") local is = luajava.newInstance("javax.crypto.spec.IvParameterSpec", iv) local c = Cipher.getInstance("AES/CBC/PKCS5Padding") c.init(Cipher.DECRYPT_MODE, ks, is) local decoded = Base64.decode(cipherText, Base64.NO_WRAP) local decrypted = c.doFinal(decoded) return luajava.newInstance("java.lang.String", decrypted, "UTF-8") end local function rsaEncrypt(data, pem) import "java.security.KeyFactory" import "java.security.spec.X509EncodedKeySpec" import "javax.crypto.Cipher" local clean = pem:gsub("%-%-%-%-%-BEGIN PUBLIC KEY%-%-%-%-%-", ""):gsub("%-%-%-%-%-END PUBLIC KEY%-%-%-%-%-", ""):gsub("%s+", ""):gsub("\r", ""):gsub("\n", "") local kb = Base64.decode(clean, Base64.NO_WRAP) local kf = KeyFactory.getInstance("RSA") local spec = luajava.newInstance("java.security.spec.X509EncodedKeySpec", kb) local pk = kf.generatePublic(spec) local c = Cipher.getInstance("RSA/ECB/PKCS1Padding") c.init(Cipher.ENCRYPT_MODE, pk) return Base64.encodeToString(c.doFinal(data), Base64.NO_WRAP) end local function randomBytes(len) import "java.security.SecureRandom" import "java.lang.Byte" local random = luajava.newInstance("java.security.SecureRandom") local arr = luajava.newArray(Byte.TYPE, len) random.nextBytes(arr) return arr end local function generateIV() import "java.security.SecureRandom" import "java.lang.Byte" local random = luajava.newInstance("java.security.SecureRandom") local arr = luajava.newArray(Byte.TYPE, 16) random.nextBytes(arr) local b64 = Base64.encodeToString(arr, Base64.NO_WRAP) return arr, b64 end local function doAuth(cardKey) if cardKey == nil or cardKey == "" then showDlg("提示", "请输入卡密", "确定") return end login.setEnabled(false) login.setText("验证中...") local pd = ProgressDialog(activity, android.R.style.Theme_Material_Dialog) pd.setMessage("正在验证卡密...") pd.setCancelable(false) pd.show() styleDialog(pd) local aesKey = randomBytes(16) local iv, ivB64 = generateIV() local biz = toJson({card_key = cardKey,machine_id = deviceId,nonce = generateNonce(20),timestamp = math.floor(os.time()) }) local encKey = rsaEncrypt(aesKey, cachedPK) local encData = aesEncrypt(biz, aesKey, iv) local postData = "action=auth&api_key=" .. CONFIG.apiKey .."&encrypted_key=" .. urlEncode(encKey) .."&encrypted_data=" .. urlEncode(encData) .."&iv=" .. urlEncode(ivB64) Http.post(CONFIG.authUrl, postData, "UTF-8", nil, function(code, content) content = content and tostring(content) or nil if code ~= 200 or content == nil or #content == 0 then activity.runOnUiThread(Runnable{ run = function() pd.dismiss() login.setEnabled(true) login.setText("验证") showDlg("错误", "网络请求失败", "确定") end}) return end activity.runOnUiThread(Runnable{ run = function() pd.dismiss() local ok, r = pcall(luajava.newInstance, "org.json.JSONObject", content) if not ok or r == nil then login.setEnabled(true) login.setText("验证") showDlg("错误", "响应解析失败", "确定") return end local respEncrypted = r.optBoolean("encrypted", false) if respEncrypted then local respIv = Base64.decode(r.getString("iv"), Base64.NO_WRAP) local dec = aesDecrypt(r.getString("data"), aesKey, respIv) local data = luajava.newInstance("org.json.JSONObject", dec) local auth = data.optBoolean("authorized", false) local msg = tostring(data.optString("message", "")) local expiresAt = tostring(data.optString("expires_at", "")) if expiresAt == "" or expiresAt == "null" then expiresAt = "永久" end local unbindEnabled = data.optBoolean("unbind_enabled", false) if auth then local sp = activity.getSharedPreferences("miyan_verify", 0) sp.edit().putString("card_key", cardKey).apply() login.setEnabled(true) login.setText("验证") kmdismiss.setEnabled(unbindEnabled) statusText.setText("到期: " .. expiresAt) showDlg("验证成功", msg .. "\n到期时间: " .. expiresAt, "确定", function() _G._miyanVerified = true -- ============================================================ -- 在下面粘贴你的完整代码(整段复制粘贴到这里) -- ============================================================ function huiz() draw.setStyle('填充') draw.setColor("#00ffff") -- draw.text('MIUI过检', 235,200)draw.setColor('#00FFFF') string.toMusic("欢迎使用仙鹤全防祝你们天天开心把把撤离") draw.text("仙鹤全防", 280, 550) draw.text("黑客来自", 280, 490) end huiz() gg.setVisible(false) luajava.setFloatingWindowHide(true) 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 CatWill={} CatWill[1]={} CatWill[1].address=address CatWill[1].flags=flags CatWill[1].value=value gg.setValues(CatWill) 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 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 changan={} changan.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 changan.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 changan.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 changan.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 ---------------------------------------------------------------------------------------------------------------- jianbian6 = luajava.new(GradientDrawable) jianbian6:setCornerRadius(10) jianbian6:setGradientType(GradientDrawable.LINEAR_GRADIENT) jianbian6:setOrientation(GradientDrawable.Orientation.TL_BR) jianbian6:setColors({0xB3000000,0x9CFF0069,0xE500CDEF,0xB3000000}) jianbian6:setStroke(3,"0xB9000000")--边框宽度和颜色 -------------------------------------------------------------------------------------------------- local function switch2(...) local menus = {...} local block = luajava.getBlock() local context = app.context local window = context:getSystemService("window") -- 获取窗口管理器 local function getWindowManagerParams() local params = luajava.new(WindowManager.LayoutParams) params.type = (Build.VERSION.SDK_INT >= 26 and 2038 or 2002) params.format = PixelFormat.RGBA_8888 -- 设置背景 params.flags = params.FLAG_NOT_FOCUSABLE -- 焦点设置Finish params.width = params.WRAP_CONTENT -- 布局宽度 params.height = params.WRAP_CONTENT -- 布局高度 params.gravity = Gravity.LEFT | Gravity.TOP -- 重力设置 luajava.setFloatingWindowHide(false) luajava.setFloatingWindowHide(true) return params end local mainLayout = { LinearLayout, background=jianbian6, orientation = 'vertical', layout_width = 'wrap_content', padding = {'10dp', '10dp', '10dp', '10dp'} } local function exit() window:removeView(mainLayout) tuichu=1 end setExitEvent(exit) local hideLayout = { LinearLayout, orientation = 'horizontal', layout_width = 'fill_parent', gravity = 'center_horizontal', { ImageView, src = 0x7F02000C, padding = {'5dp', '5dp', '5dp', '5dp'}, onClick = function() local gridLayout = luajava.getIdView('功能界面') if not gridLayout then return end local VISIBLE = GridLayout.VISIBLE local GONE = GridLayout.GONE local visibility = gridLayout:getVisibility() > VISIBLE and VISIBLE or GONE gridLayout:setVisibility(visibility) if visibility==VISIBLE then 显示=1 luajava.runUiThread(function() titlet:setVisibility(View.VISIBLE) changan.controlBig(mainLayout,399) end) else 显示=0 luajava.runUiThread(function() titlet:setVisibility(View.GONE) changan.controlFlip(mainLayout,800) end) end end } } mainLayout[#mainLayout + 1] = {LinearLayout, { TextView, id="titlet", text = stitle, textSize = "13.5dp", textColor="#00FF7F", gravity = "center", layout_height = "wrap_content", layout_width="250dp", },hideLayout, } local main2Layout = { LinearLayout, id = luajava.newId('功能界面'), orientation = 'vertical', layout_width = 'wrap_content', gravity = 'center_horizontal' } mainLayout[#mainLayout + 1] = main2Layout local function formatList(list) local gridLayout = { GridLayout, orientation = 'horizontal', columnCount = '3', layout_width = 'wrap_content' } list[#list + 1] = { setText = '退出', onCheckedChanged = function(buttonView) return exit() end } for i, value in ipairs(list) do local name do local names = {'name', 'text', 'setText'} for i, key in ipairs(names) do name = value[key] if name then break end end if not name then name = string.format('功能%d', i) end for i, key in ipairs(names) do value[key] = name end end local switchLayout = { Switch, text = name } local onCheckedChanged = value.onCheckedChanged if not isFunction(onCheckedChanged) then onCheckedChanged = function(switch, isChecked) if not isSurvive() then gg.toast('脚本已结束') return exit() end local mode = isChecked and 'open' or 'close' local func = value[mode] if not isFunction(func) then switch:setChecked(not isChecked) func = function(self) gg.alert(string.format('%s缺少%s函数,该属性必须为function类型', value.name, mode)) end end luajava.startThread(function(...) pcall(func, ...) end, name, value, switch) end end if isFunction(onCheckedChanged) then onCheckedChanged = luajava.createProxy('android.widget.CompoundButton$OnCheckedChangeListener', { onCheckedChanged = onCheckedChanged }) end switchLayout.onCheckedChangeListener = onCheckedChanged gridLayout[#gridLayout + 1] = switchLayout end return gridLayout end local navigate2 = { LinearLayout, orientation = 'horizontal', layout_width = 'match_parent', gravity = 'center_horizontal' } local navigate12 = {--------横线 LinearLayout, layout_width = 'fill_parent', layout_height = "1dp", background = "#000000", } local ids = {} local views = {} for i, menu in ipairs(menus) do local name = menu.name if not name then name = ('菜单%s'):format(i) menu.name = name end ids[i] = string.format('%s-%s', i, name) local menuLayout = { Button, text = name, background = '#0000000', layout_width = 'wrap_content', onClick = function() for i2, id in ipairs(ids) do local view = views[i2] if not view then view = luajava.getIdView(id) if view then views[i2] = view end end if view then local VISIBLE = view.VISIBLE local GONE = view.GONE local state = i == i2 and VISIBLE or GONE view:setVisibility(state) end end end } navigate2[#navigate2 + 1] = menuLayout end main2Layout[#main2Layout + 1] = navigate12 main2Layout[#main2Layout + 1] = navigate2 main2Layout[#main2Layout + 1] = navigate12 local main3Layout = { LinearLayout, layout_width = 'match_parent', gravity = 'center_horizontal' } for i, menu in ipairs(menus) do local gridLayout = formatList(menu) gridLayout.id = luajava.newId(ids[i]) gridLayout.visibility = i == 1 and GridLayout.VISIBLE or GridLayout.GONE main3Layout[#main3Layout + 1] = gridLayout end main2Layout[#main2Layout + 1] = main3Layout local function setOnTouchListener(move, layout, params) local RawX, RawY, x, y local ACTION_DOWN = MotionEvent.ACTION_DOWN local ACTION_MOVE = MotionEvent.ACTION_MOVE local tonumber = tonumber move:setOnTouchListener(luajava.createProxy("android.view.View$OnTouchListener", { onTouch = function(v, event) local Action = event:getAction() if Action == ACTION_DOWN then -- 点击时的XY坐标 RawX = event:getRawX() -- 获取X坐标 RawY = event:getRawY() -- 获取Y坐标 x = params.x -- 申明变量xmX为原X坐标 y = params.y -- 申明变量xmY为原Y坐标 elseif Action == ACTION_MOVE then -- 移动时的XY坐标 params.x = tonumber(x) + (event:getRawX() - RawX) params.y = tonumber(y) + (event:getRawY() - RawY) window:updateViewLayout(layout, params) end end })) end local params = getWindowManagerParams() mainLayout = luajava.loadlayout(mainLayout) setOnTouchListener(mainLayout, mainLayout, params) local function invoke() window:addView(mainLayout, params) end gg.setVisible(false) 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音调的声音 --AudioManager.STREAM_BLUETOOTH_SCO, } 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 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 floatWindow=mainLayout qiehuan = function() if qhkai == 1 then yinll = 1 qhkai = 0 huiz() luajava.runUiThread(function() floatWindow:setVisibility(View.VISIBLE) changan.controlBig(mainLayout,600) end) else qhkai = 1 yinll = 0 draw.remove() luajava.runUiThread(function() changan.controlSmall(mainLayout,600) end) gg.sleep(800) luajava.runUiThread(function() floatWindow:setVisibility(View.GONE) end) end end local c1 luajava.post(invoke) luajava.newThread(function() while true do if 显示 == 1 then titlet:scrollBy(20,0) if titlet:getScrollX() >= 900 then titlet:scrollBy(-titlet:getScrollX()-1200,0) end end gg.sleep(125) end end):start() luajava.setFloatingWindowHide(true) while true do if tuichu == 1 then break end jianting3(qiehuan) gg.sleep(120) end gg.setVisible(false) luajava.setFloatingWindowHide(false) end function YY998() Obtain=gg.makeRequest("https://api.uomg.com/api/rand.music?sort=热歌榜&format=json").content muchen=Obtain:match('url":"(.-)","picurl') gg.playMusic(muchen) end -- 定义走马灯控件类 显示=1 _ENV['菜单1'] = { name = '防封', [1] = { name = '选择进程', open = function(self) string.toMusic('请选择游戏进程') gg.setProcessX() end, close = function(self) end }, [2] = { name = 'LOGO防闪¹', open = function(self) --防1位置 if gg.getRangesList("libanogs.so:bss")[1] then local t = {} t[1] = gg.getRangesList("libanogs.so:bss")[1]["start"] + 0x5D8; -- 数值地址:0x6F7DD885D8 gg.addListItems({ [1] = { address = t[1], flags = 4, value = 64, freeze = true, }, }) end gg.toast("开启成功") gg.loopKillGG()-----杀GG gg.alert("开启成功") string.toMusic('LOGO防闪开启成功') end, close = function(self) end }, [3] = { name = 'LOGO房', open = function(self) --防1位置 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 = {"libUE4.so", "Cd"} local tt = {0x382AB0} local ttt = S_Pointer(t, tt, true) gg.setValues({{address = ttt, flags = 4, value = 163855}}) local t = {"libUE4.so", "Cd"} local tt = {0x4D5A90} local ttt = S_Pointer(t, tt, true) gg.setValues({{address = ttt, flags = 4, value = 163855}}) local t = {"libUE4.so", "Cd"} local tt = {0x4D5B38} local ttt = S_Pointer(t, tt, true) gg.setValues({{address = ttt, flags = 4, value = 163855}}) gg.loopKillGG()-----杀GG gg.alert("开启成功") string.toMusic('LOGO房开启成功') end, close = function(self) end }, [4] = { name = '大厅防¹', open = function(self) if gg.getRangesList("libgcloud.so")[1] then local t = {} t[1] = gg.getRangesList("libgcloud.so")[1]["start"] + 0x1D9544; -- 数值地址:0x7B79A1B544 gg.addListItems({ [1] = { address = t[1], flags = 4, value = -698416192, freeze = true, }, }) gg.toast("") end gg.loopKillGG()-----杀GG gg.alert("开启成功") string.toMusic('大厅1防开启成功') end, close = function(self) end }, [5] = { name = '大厅防²', open = function(self) --防3位置 if gg.getRangesList("libanogs.so")[1] then local t = {} t[1] = gg.getRangesList("libanogs.so")[1]["start"] + 0x1B54; -- 数值地址:0x7BF4E4DB54 t[2] = gg.getRangesList("libanogs.so")[1]["start"] + 0x2DF0; -- 数值地址:0x7BF4E4EDF0 gg.addListItems({ [1] = { address = t[1], flags = 4, value = -698416192, freeze = true, }, [2] = { address = t[2], flags = 4, value = -698416192, freeze = true, }, }) gg.toast("开启成功") end if gg.getRangesList("libPluginCrosCurl.so")[1] then local t = {} t[1] = gg.getRangesList("libPluginCrosCurl.so")[1]["start"] + 0x2DF0; -- 数值地址:0x7BD68DBDF0 gg.addListItems({ [1] = { address = t[1], flags = 4, value = -698416192, freeze = true, }, }) gg.toast("开启成功") end if gg.getRangesList("libanogs.so")[1] then local t = {} t[1] = gg.getRangesList("libanogs.so")[1]["start"] + 0x525B54; -- 数值地址:0x7BF5371B54 t[2] = gg.getRangesList("libanogs.so")[1]["start"] + 0x525D54; -- 数值地址:0x7BF5371D54 t[3] = gg.getRangesList("libanogs.so")[1]["start"] + 0x526DF0; -- 数值地址:0x7BF5372DF0 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 gg.loopKillGG()-----杀GG gg.alert("开启成功") string.toMusic('大厅2防开启成功') end, close = function(self) end }, [6] = { name = '离线', open = function(self) if gg.getRangesList("libgcloud.so")[1] then local t = {} t[1] = gg.getRangesList("libgcloud.so")[1]["start"] + 0x47A8C8; -- 数值地址:0x7972B8B8C8 t[2] = gg.getRangesList("libgcloud.so")[1]["start"] + 0x47B464; -- 数值地址:0x7972B8C464 gg.addListItems({ [1] = { address = t[1], flags = 4, value = -698416192, freeze = true, }, [2] = { address = t[2], flags = 4, value = -698416192, freeze = true, }, }) gg.toast("开启成功") end gg.loopKillGG()-----杀GG gg.alert("开启成功") string.toMusic('全局离线开启成功')---语音 end, close = function(self) if gg.getRangesList("libgcloud.so")[1] then local t = {} t[1] = gg.getRangesList("libgcloud.so")[1]["start"] + 0x47A8C8; -- 数值地址:0x7972B8B8C8 t[2] = gg.getRangesList("libgcloud.so")[1]["start"] + 0x47B464; -- 数值地址:0x7972B8C464 gg.addListItems({ [1] = { address = t[1], flags = 4, value = 1033081774, freeze = true, }, [2] = { address = t[2], flags = 4, value = 16843522, freeze = true, }, }) gg.toast("开启成功") end gg.loopKillGG()-----杀GG gg.alert("关闭成功") string.toMusic('全局离线关闭成功')---语音 end }, } _ENV['菜单2'] = { name = '功能', [1] = { name = '静态广角', open = function(self) OP=gg.prompt({'静态广角[1~3]'},{[1]='1.6'},{[1]='number'})---广角 if OP == nil or OP[1] == '' or OP[1] == '0' then gg.toast("取消") else so=gg.getRangesList('libUE4.so')[1].start py=0x36B3538 setvalue(so+py,16,OP[1]) end gg.loopKillGG()-----杀GG gg.toast("开启成功") string.toMusic('静态广角开启成功') end, close = function(self) end }, [2] = { name = '动态广角', open = function(self) OP=gg.prompt({'动态广角[100~150]'},{[1]='130'},{[1]='number'})---广角 if OP == nil or OP[1] == '' or OP[1] == '0' then gg.toast("取消") else local t = {"libUE4.so:bss", "Cb"} local tt = {0x562F70,0x30,0x4B8,0x360,0x170,0x39C} local ttt = S_Pointer(t, tt, true) gg.addListItems({{address = ttt, flags = 16, value = OP[1], freeze = true}}) end gg.loopKillGG()-----杀GG gg.toast("开启成功") string.toMusic('动态广角开启成功') end, close = function(self) end }, [3] = { name = '全枪聚点', open = function(self) if gg.getRangesList("libUE4.so")[1] then local t = {} t[1] = gg.getRangesList("libUE4.so")[1]["start"] + 0x6E1A668; -- 数值地址:0x7703287668 gg.addListItems({ [1] = { address = t[1], flags = 4, value = -1119081215, freeze = true, }, }) gg.toast("开启成功") end gg.alert("开启成功") string.toMusic('全枪聚点开启成功')---语音 end, close = function(self) if gg.getRangesList("libUE4.so")[1] then local t = {} t[1] = gg.getRangesList("libUE4.so")[1]["start"] + 0x5956C44; -- 数值地址:0x7B2887A3AC gg.setValues({ [1] = { address = t[1], flags = 16, value = 8.524923392971503E-21, }, }) end gg.alert("关闭成功") string.toMusic('全枪聚点关闭成功')---语音 end, end, close = function(self) end }, [4] = { name = '全枪无后', open = function(self) 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 = {"libUE4.so:bss", "Cb"} local tt = {0x562F70,0x30,0x4B8,0x2AD0,0xF88,0x210} local ttt = S_Pointer(t, tt, true) gg.addListItems({{address = ttt, flags = 16, value = 0, freeze = true}}) gg.alert("开启成功") string.toMusic('全枪无后开启成功')---语音 end, close = function(self) if gg.getRangesList("libUE4.so")[1] then local t = {} t[1] = gg.getRangesList("libUE4.so")[1]["start"] + 0x595B638; gg.setValues({ [1] = { address = t[1], flags = 16, value = 8.84116488e-21, }, }) end gg.alert("关闭成功") string.toMusic('全枪无后关闭成功')---语音 end, close = function(self) end }, [5] = { name = '微加速', open = function(self) if gg.getRangesList("libUE4.so")[1] then local t = {} t[1] = gg.getRangesList("libUE4.so")[1]["start"] + 0x76E1070; -- 数值地址:0x7703B4E070 gg.addListItems({ [1] = { address = t[1], flags = 4, value = -721215457, freeze = true, }, }) gg.toast("开启成功") end gg.alert("开启成功") string.toMusic('微加速开启成功')---语音 end, close = function(self) if gg.getRangesList("libUE4.so")[1] then local t = {} t[1] = gg.getRangesList("libUE4.so")[1]["start"] + 0x9CC9C00; -- 数值地址:0x7AEE48D9F8 gg.addListItems({ [1] = { address = t[1], flags = 4, value = 505453824, freeze = true, }, }) end gg.alert("关闭成功") string.toMusic('加速关闭成功')---语音 end, close = function(self) end }, [6] = { name = '子弹变大', open = function(self) 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 = {"libUE4.so:bss", "Cb"} local tt = {0x562F70,0x30,0x4B8,0x2AD0,0x11C0} local ttt = S_Pointer(t, tt, true) gg.addListItems({{address = ttt, flags = 16, value = 200, freeze = true}}) gg.alert("开启成功") string.toMusic('子弹变大开启成功')---语音 end, close = function(self) if gg.getRangesList("libUE4.so")[1] then local t = {} t[1] = gg.getRangesList("libUE4.so")[1]["start"] + 0x9CC9C00; -- 数值地址:0x7AEE48D9F8 gg.addListItems({ [1] = { address = t[1], flags = 4, value = 505453824, freeze = true, }, }) end gg.alert("关闭成功") string.toMusic('子弹变大关闭成功')---语音 end, close = function(self) end }, [7] = { name = '枪械防抖', open = function(self) 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 = {"libUE4.so:bss", "Cb"} local tt = {0x562F70,0x30,0x4B8,0x2AD0,0x860,0xCEC} local ttt = S_Pointer(t, tt, true) gg.addListItems({{address = ttt, flags = 16, value = 0, freeze = true}})---手持防抖 local t = {"libUE4.so:bss", "Cb"} local tt = {0x562F70,0x30,0x4B8,0x2AD0,0x860,0xCF0} local ttt = S_Pointer(t, tt, true) gg.addListItems({{address = ttt, flags = 16, value = 0, freeze = true}})---手持防抖 local t = {"libUE4.so:bss", "Cb"} local tt = {0x562F70,0x30,0x4B8,0x2AD0,0x860,0xCF4} local ttt = S_Pointer(t, tt, true) gg.addListItems({{address = ttt, flags = 16, value = 0, freeze = true}})---手持防抖 gg.alert("开启成功") string.toMusic('防抖开启成功')---语音 end, close = function(self) if gg.getRangesList("libUE4.so")[1] then local t = {} t[1] = gg.getRangesList("libUE4.so")[1]["start"] + 0x9CC9C00; -- 数值地址:0x7AEE48D9F8 gg.addListItems({ [1] = { address = t[1], flags = 4, value = 505453824, freeze = true, }, }) end gg.alert("关闭成功") string.toMusic('防抖关闭成功')---语音 end, close = function(self) end }, [8] = { name = '秒切枪', open = function(self) 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 = {"libUE4.so:bss", "Cb"} local tt = {0x562F70,0x30,0x4B8,0x2AD0,0x860,0x24C} local ttt = S_Pointer(t, tt, true) gg.addListItems({{address = ttt, flags = 16, value = 0, freeze = true}})---手持防抖 local t = {"libUE4.so:bss", "Cb"} local tt = {0x562F70,0x30,0x4B8,0x2AD0,0x860,0x248} local ttt = S_Pointer(t, tt, true) gg.addListItems({{address = ttt, flags = 16, value = 0, freeze = true}})---手持防抖 gg.alert("开启成功") string.toMusic('秒切枪开启成功')---语音 end, close = function(self) if gg.getRangesList("libUE4.so")[1] then local t = {} t[1] = gg.getRangesList("libUE4.so")[1]["start"] + 0x9CC9C00; -- 数值地址:0x7AEE48D9F8 gg.addListItems({ [1] = { address = t[1], flags = 4, value = 505453824, freeze = true, }, }) end gg.alert("关闭成功") string.toMusic('秒切枪关闭成功')---语音 end, close = function(self) end }, [9] = { name = '六道', open = function(self) 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 = {"libUE4.so:bss", "Cb"} local tt = {0x562F70,0x30,0x4B8,0x2AD0,0x860,0x5A0} local ttt = S_Pointer(t, tt, true) gg.addListItems({{address = ttt, flags = 16, value = 0, freeze = true}}) gg.alert("开启成功") string.toMusic('六道速开启成功')---语音 end, close = function(self) if gg.getRangesList("libUE4.so")[1] then local t = {} t[1] = gg.getRangesList("libUE4.so")[1]["start"] + 0x9CC9C00; -- 数值地址:0x7AEE48D9F8 gg.addListItems({ [1] = { address = t[1], flags = 4, value = 505453824, freeze = true, }, }) end gg.alert("关闭成功") string.toMusic('六道关闭成功')---语音 end }, } _ENV['菜单3'] = { name = '音乐', [1] = { name = '搜索歌曲', open = function(self) search = gg.prompt({ "输入要搜索的歌曲\n可加上歌手名字", "设置显示数量(数字)", },g.sel,{ "text", }) if not search then return end gg.saveVariable(search,g.config) bei() go1=search[1] go3=search[2] jg=start(go1,go3) if jg.code == 200 then fh=jg.content fh=json(fh) --print(fh) Play(gqlb,idb) else function inspect() gg.alert("访问网络异常,错误代码:\n\n"..jg.code) end if not pcall(inspect) then print("网络异常,请先连接上网络") os.exit() end end XGCK=-1 string.toMusic('') end, close = function(self) end }, [2] = { name = '武家坡', open = function(self) gg.playMusic("http://music.163.com/song/media/outer/url?id=1891431677.mp3") end, close = function(self) end }, [3] = { name = '广东爱情故事', open = function(self) gg.playMusic("http://music.163.com/song/media/outer/url?id=1989479877.mp3") end, close = function(self) end }, [4] = { name = '可不可以', open = function(self) gg.playMusic("http://music.163.com/song/media/outer/url?id=553755659.mp3") end, close = function(self) end }, [5] = { name = '离别开出花', open = function(self) gg.playMusic("http://music.163.com/song/media/outer/url?id=2061978961&uct2.mp3") end, close = function(self) end }, [6] = { name = '科技专属', open = function(self) gg.playMusic("http://music.163.com/song/media/outer/url?id=1377530437&uct2.mp3") end, close = function(self) end }, [7] = { name = '最后一页', open = function(self) gg.playMusic("http://music.163.com/song/media/outer/url?id=247936.mp3") end, close = function(self) end }, [8] = { name = '我想念', open = function(self) gg.playMusic("http://music.163.com/song/media/outer/url?id=2071935674&uct2.mp3") end, close = function(self) end }, [9] = { name = '起风了', open = function(self) gg.playMusic("http://music.163.com/song/media/outer/url?id=1330348068.mp3") end, close = function(self) end }, [10] = { name = '安和桥', open = function(self) gg.playMusic("http://music.163.com/song/media/outer/url?id=27646205&uct2.mp3") end, close = function(self) end }, [11] = { name = '停止播放', open = function(self) gg.playMusic("stop") gg.playMusic("stop") gg.playMusic("stop") end, close = function(self) gg.playMusic("stop") gg.playMusic("stop") gg.playMusic("stop") end } } stitle="仙鹤通知电报@TLBND"---滚动文字 switch2(_ENV['菜单1'], _ENV['菜单2'], _ENV['菜单3'],_ENV['菜单4']) -- ============================================================ -- 粘贴结束 -- ============================================================ end) else login.setEnabled(true) login.setText("验证") showDlg("验证失败", msg, "确定") end else local respMsg = tostring(r.optString("message", "验证失败")) login.setEnabled(true) login.setText("验证") showDlg("验证失败", respMsg, "确定") end end}) end) end local function doUnbind(cardKey) if cardKey == nil or cardKey == "" then showDlg("提示", "请先输入卡密", "确定") return end kmdismiss.setEnabled(false) kmdismiss.setText("解绑中...") local pd = ProgressDialog(activity, android.R.style.Theme_Material_Dialog) pd.setMessage("正在解绑设备...") pd.setCancelable(false) pd.show() styleDialog(pd) local aesKey = randomBytes(16) local iv, ivB64 = generateIV() local biz = toJson({card_key = cardKey,machine_id = deviceId,nonce = generateNonce(20),timestamp = math.floor(os.time()) }) local encKey = rsaEncrypt(aesKey, cachedPK) local encData = aesEncrypt(biz, aesKey, iv) local postData = "action=unbind&api_key=" .. CONFIG.apiKey .."&encrypted_key=" .. urlEncode(encKey) .."&encrypted_data=" .. urlEncode(encData) .."&iv=" .. urlEncode(ivB64) Http.post(CONFIG.authUrl, postData, "UTF-8", nil, function(code, content) content = content and tostring(content) or nil if code ~= 200 or content == nil or #content == 0 then activity.runOnUiThread(Runnable{ run = function() pd.dismiss() kmdismiss.setEnabled(true) kmdismiss.setText("解绑") showDlg("错误", "网络请求失败", "确定") end}) return end activity.runOnUiThread(Runnable{ run = function() pd.dismiss() local ok, r = pcall(luajava.newInstance, "org.json.JSONObject", content) if not ok or r == nil then kmdismiss.setEnabled(true) kmdismiss.setText("解绑") showDlg("错误", "响应解析失败", "确定") return end local outerOk = r.optBoolean("status", false) if outerOk and r.optBoolean("encrypted", false) then local respIv = Base64.decode(r.getString("iv"), Base64.NO_WRAP) local dec = aesDecrypt(r.getString("data"), aesKey, respIv) local data = luajava.newInstance("org.json.JSONObject", dec) local innerOk = data.optBoolean("status", false) local msg = tostring(data.optString("message", "")) local count = data.optInt("unbind_count", -1) if innerOk then kmdismiss.setEnabled(true) kmdismiss.setText("解绑") showDlg("解绑成功", msg .. "\n已解绑次数: " .. count, "确定") else kmdismiss.setEnabled(true) kmdismiss.setText("解绑") showDlg("解绑失败", msg, "确定") end else local msg = tostring(r.optString("msg", r.optString("message", "解绑失败"))) kmdismiss.setEnabled(true) kmdismiss.setText("解绑") showDlg("解绑失败", msg, "确定") end end}) end) end local pendingUpdate = nil local function checkUpdate() local dataJson = toJson({version = CONFIG.version,timestamp = math.floor(os.time()),nonce = generateNonce(20) }) local encData = Base64.encodeToString(luajava.newInstance("java.lang.String", dataJson).getBytes("UTF-8"), Base64.NO_WRAP) local postData = "api_key=" .. CONFIG.apiKey .. "&data=" .. encData Http.post(CONFIG.updateUrl, postData, "UTF-8", nil, function(code, content) content = content and tostring(content) or nil if code ~= 200 or content == nil or #content == 0 then return end local json = xorDecode(content) local ok, r = pcall(luajava.newInstance, "org.json.JSONObject", json) if not ok or r == nil then return end local respCode = r.optInt("code", 0) if respCode ~= 1 then return end pendingUpdate = r end) end local function showUpdateDlg(forceUpdate, latestVer, updateUrl, changelog) if changelog == "" then changelog = "小主是不是忘了配置更新内容了" end local builder = AlertDialog.Builder(activity, android.R.style.Theme_Material_Dialog) builder.setTitle("发现新版本 v" .. latestVer) builder.setMessage(changelog) if not forceUpdate then builder.setNegativeButton("跳过", nil) end builder.setPositiveButton("去更新", {onClick=function() if updateUrl and updateUrl ~= "" then activity.startActivity(Intent(Intent.ACTION_VIEW, Uri.parse(updateUrl))) end if forceUpdate then task(500, function() import "java.lang.Thread" Thread.sleep(500) return "" end, nil, function() showUpdateDlg(forceUpdate, latestVer, updateUrl, changelog) end) end end}) builder.setCancelable(not forceUpdate) local dlg = builder.show() styleDialog(dlg) dlg.getButton(dlg.BUTTON_POSITIVE).setTextColor(0xFF818CF8) if forceUpdate then dlg.setCancelable(false) dlg.setCanceledOnTouchOutside(false) else dlg.getButton(dlg.BUTTON_NEGATIVE).setTextColor(0xFF999999) end end local function showPendingUpdate() if pendingUpdate == nil then return end local r = pendingUpdate pendingUpdate = nil local notice = tostring(r.optString("notice", "")) if notice == "" or notice == "null" then notice = "" end local needUpdate = r.optBoolean("need_update", false) if notice ~= "" then local builder = AlertDialog.Builder(activity, android.R.style.Theme_Material_Dialog) builder.setTitle("公告") builder.setMessage(notice) builder.setPositiveButton("知道了", {onClick=function() if needUpdate then local latestVer = tostring(r.optString("latest_version", "")) local updateUrl = tostring(r.optString("update_url", "")) local changelog = tostring(r.optString("update_log", "")) local forceUpdate = r.optInt("force_update", 0) == 1 showUpdateDlg(forceUpdate, latestVer, updateUrl, changelog) end end}) builder.setCancelable(false) local dlg = builder.show() styleDialog(dlg) dlg.getButton(dlg.BUTTON_POSITIVE).setTextColor(0xFF818CF8) elseif needUpdate then local latestVer = tostring(r.optString("latest_version", "")) local updateUrl = tostring(r.optString("update_url", "")) local changelog = tostring(r.optString("update_log", "")) local forceUpdate = r.optInt("force_update", 0) == 1 showUpdateDlg(forceUpdate, latestVer, updateUrl, changelog) end end local function setImmersive() local window = activity.getWindow() local decorView = window.getDecorView() if Build.VERSION.SDK_INT >= 21 then window.clearFlags(0x04000000) window.clearFlags(0x08000000) window.addFlags(0x80000000) window.setStatusBarColor(0x00000000) window.setNavigationBarColor(0x00000000) end window.addFlags(0x00000400) window.addFlags(0x00000100) window.addFlags(0x00000200) window.clearFlags(0x00400000) if Build.VERSION.SDK_INT >= 28 then local wlp = window.getAttributes() wlp.layoutInDisplayCutoutMode = 0x00000001 window.setAttributes(wlp) end decorView.setSystemUiVisibility( 0x00000004 + 0x00000100 + 0x00000200 + 0x00001000 ) decorView.setFitsSystemWindows(false) decorView.setPadding(0, 0, 0, 0) local contentView = activity.findViewById(android.R.id.content) if contentView then contentView.setFitsSystemWindows(false) contentView.setPadding(0, 0, 0, 0) end local statusBarBg = decorView.findViewById(android.R.id.statusBarBackground) if statusBarBg then local lp = statusBarBg.getLayoutParams() if lp then lp.height = 0 statusBarBg.setBackground(nil) statusBarBg.requestLayout() end end end activity.supportRequestWindowFeature(Window.FEATURE_NO_TITLE) setImmersive() deviceId = getDeviceId() local sp = activity.getSharedPreferences("miyan_verify", 0) local savedKey = tostring(sp.getString("card_key", "")) local LOADING_HTML = [[
{{SPANS}}
正在加载中....
版权所有 b6w.top
]] local _t = CONFIG.loadingText or "米验" local _sp = "" for ch in _t:gmatch("[%z\1-\127\194-\244][\128-\191]*") do _sp = _sp .. '' .. ch .. '' end local _h = LOADING_HTML:gsub("{{SPANS}}", _sp) local loadingView = luajava.newInstance("android.webkit.WebView", activity) loadingView.getSettings().setJavaScriptEnabled(true) loadingView.setBackgroundColor(0xFF000000) local lp = luajava.newInstance("android.widget.FrameLayout$LayoutParams", -1, -1) loadingView.setLayoutParams(lp) CircleButton(loadingView, 0xFF000000, 24) loadingView.loadDataWithBaseURL("https://b6w.top", _h, "text/html", "UTF-8", nil) activity.setContentView(loadingView) setImmersive() checkUpdate() task(function() import "java.lang.Thread" Thread.sleep(2000) return "" end, nil, function() activity.setContentView("miyan") setImmersive() Title.getPaint().setFakeBoldText(true) CircleButton(Card, 0x3FFFFFFF, 30) CircleButton(km, 0x00FFFFFF, 30) CircleButton(kmdismiss, 0x00FFFFFF, 30) CircleButton(login, 0x00FFFFFF, 30) CircleButton(kmBj, 0x3FFFFFFF, 30) CircleButton(jbBj, 0x3FFFFFFF, 30) CircleButton(loginBj, 0x3FFFFFFF, 30) km.setHintTextColor(0x4DFFFFFF) if savedKey and savedKey ~= "" then km.setText(savedKey) end login.onClick = function() local key = tostring(km.getText()) if key == nil or key == "" then showDlg("提示", "请输入卡密", "确定") return end doAuth(key) end kmdismiss.onClick = function() local key = tostring(km.getText()) if key == nil or key == "" then showDlg("提示", "请先输入卡密", "确定") return end doUnbind(key) end showPendingUpdate() end) function onKeyDown(keyCode, event) if keyCode == KeyEvent.KEYCODE_BACK then activity.finish() return true end end