local function findExecutableSegment(lib) local ranges=gg.getRangesList(lib) for _,v in ipairs(ranges) do if v.type:find("-x") then return v.start end end return nil end local function readValue(address,flags) return gg.getValues({[1]={address=address,flags=flags}})[1].value end local function writeValue(address,flags,value,freeze) local item={address=address,flags=flags,value=value,freeze=freeze} if freeze then gg.addListItems({item}) else gg.setValues({item}) end end function setvalue(address,flags,value,freeze) if address == 0 then return end local tt={} tt[1]={} tt[1].address=address tt[1].flags=flags tt[1].value=value tt[1].freeze=freeze if freeze==false then gg.setValues(tt) end gg.addListItems(tt) end function getvalue(address,flags,value,freeze) if address == 0 then return end local tt={} tt[1]={} tt[1].address=address tt[1].flags=flags gg.addListItems(tt) end function autovalue(address,flags,_o,_v,freeze) if address == 0 then return end local tt={} tt[1]={} tt[1].address=address tt[1].flags=flags tt[1].freeze=freeze local _v_ = gg.getValues(tt)[1].value if math.abs(_v_-_o) < 1e-7 then tt[1].value=_v else tt[1].value=_o end if freeze==false then gg.setValues(tt) end gg.addListItems(tt) end function readD(address) return gg.getValues({{address = address, flags = 4}})[1].value end function S_Pointer(t_So, t_Offset, _bit) local function getRanges() local ranges = {} local t = gg.getRangesList('^/data/*.so*$') for i, v in pairs(t) do if v.type:sub(2, 2) == 'w' then table.insert(ranges, v) end end return ranges end local function Get_Address(N_So, Offset, ti_bit) local ti = gg.getTargetInfo() local _Q = tonumber(0x167ba0fe) local t = {} local _t local _S = nil if ti_bit then _t = 32 else _t = 4 end local _S = gg.getRangesList(N_So[1])[1] if _S then t[#t + 1] = {} t[#t].address = _S.start + Offset[1] t[#t].flags = _t if #Offset ~= 1 then for i = 2, #Offset do local S = gg.getValues(t) t = {} for _ in pairs(S) do if not ti.x64 then S[_].value = S[_].value & 0xFFFFFFFF else S[_].value = S[_].value & 0xFFFFFFFFFF end t[#t + 1] = {} t[#t].address = S[_].value + Offset[i] t[#t].flags = _t end end end _S = t[#t].address end return _S end local ttt = Get_Address(t_So, t_Offset, _bit) if ttt ~= nil then local _A = string.format('0x%X', ttt) return _A end return 0 end local t = {"libtersafe.so"} --完整性 local tt = {0x2F55CC}local ttt = S_Pointer(t,tt,true) setvalue(ttt,4, "~A8 NOP", true) local tt = {0x2C5E24}local ttt = S_Pointer(t,tt,true) setvalue(ttt,4, "~A8 NOP", true) local tt = {0x734DFBC}local ttt = S_Pointer(t,tt,true) setvalue(ttt,4, "~A8 RET", true) local tt = {0x446394}local ttt = S_Pointer(t,tt,true) setvalue(ttt,4, "~A8 RET", true) local tt = {0x446890}local ttt = S_Pointer(t,tt,true) setvalue(ttt,4, "~A8 RET", true) --vm local tt = {0x1E19AC}local ttt = S_Pointer(t,tt,true) setvalue(ttt,4, "~A8 RET", true) local tt = {0x419C74}local ttt = S_Pointer(t,tt,true) setvalue(ttt,4, "~A8 RET", true) local tt = {0x2BA9A8}local ttt = S_Pointer(t,tt,true) setvalue(ttt,4, "~A8 RET", true) local tt = {0x1D66D8}local ttt = S_Pointer(t,tt,true) setvalue(ttt,4, "~A8 RET", true) local tt = {0x39FD08}local ttt = S_Pointer(t,tt,true) setvalue(ttt,4, "~A8 RET", true) --段检验 local tt = {0x50EC50}local ttt = S_Pointer(t,tt,true) setvalue(ttt,4, "~A8 RET", true) --CRC16 local tt = {0x2AA458}local ttt = S_Pointer(t,tt,true) setvalue(ttt,4, "~A8 NOP", true) --CRC32 local tt = {0x489964}local ttt = S_Pointer(t,tt,true) setvalue(ttt,4, "~A8 LDRB W9, [X0]", true) local tt = {0x4A4D64}local ttt = S_Pointer(t,tt,true) setvalue(ttt,4, "~A8 B [PC,#0x24]", true) --case35 local tt = {0x354208}local ttt = S_Pointer(t,tt,true) setvalue(ttt,4, "~A8 NOP", true) --mpcs异常上报 local tt = {0x3FDB90}local ttt = S_Pointer(t,tt,true) setvalue(ttt,4, "~A8 MOV X0, XZR", true) local tt = {0x3FDB94}local ttt = S_Pointer(t,tt,true) setvalue(ttt,4, "~A8 RET", true) local tt = {0x41A454}local ttt = S_Pointer(t,tt,true) setvalue(ttt,4, "~A8 MOV X0, XZR", true) local tt = {0x2E526C}local ttt = S_Pointer(t,tt,true) setvalue(ttt,4, "~A8 MOV X0, XZR", true) local tt = {0x2E5270}local ttt = S_Pointer(t,tt,true) setvalue(ttt,4, "~A8 NOP", true) --mpcs全局扫描 local tt = {0x3AE4E0}local ttt = S_Pointer(t,tt,true) setvalue(ttt,4, "~A8 RET", true) local tt = {0x3AE504}local ttt = S_Pointer(t,tt,true) setvalue(ttt,4, "~A8 RET", true) --hash计算 local tt = {0x44186C}local ttt = S_Pointer(t,tt,true) setvalue(ttt,4, "~A8 NOP", true) local tt = {0x464564}local ttt = S_Pointer(t,tt,true) setvalue(ttt,4, "~A8 RET", true) local tt = {0x46463C}local ttt = S_Pointer(t,tt,true) setvalue(ttt,4, "~A8 RET", true) local tt = {0x415358}local ttt = S_Pointer(t,tt,true) setvalue(ttt,4, "~A8 RET", true) --hash local tt = {0x464564}local ttt = S_Pointer(t,tt,true) setvalue(ttt,4, "~A8 RET", true) local tt = {0x3716C4}local ttt = S_Pointer(t,tt,true) setvalue(ttt,4, "~A8 RET", true) local tt = {0x320930}local ttt = S_Pointer(t,tt,true) setvalue(ttt,4, "~A8 NOP", true) local tt = {0x3298EC}local ttt = S_Pointer(t,tt,true) setvalue(ttt,4, "~A8 NOP", true) --pushantidata3 local tt = {0x460720}local ttt = S_Pointer(t,tt,true) setvalue(ttt,4, "~A8 NOP", true) --hash扫描 local tt = {0x43B8C0}local ttt = S_Pointer(t,tt,true) setvalue(ttt,4, "~A8 NOP", true) local tt = {0x4442D4}local ttt = S_Pointer(t,tt,true) setvalue(ttt,4, "~A8 NOP", true) --hash上下 local tt = {0x377270}local ttt = S_Pointer(t,tt,true) setvalue(ttt,4, "~A8 RET", true) local t = {"libtprt.so"} --tprt local tt = {0xE057C}local ttt = S_Pointer(t,tt,true) setvalue(ttt,4, "~A8 RET", true) local tt = {0x1226EC}local ttt = S_Pointer(t,tt,true) setvalue(ttt,4, "~A8 RET", true) local tt = {0x11ca3c}local ttt = S_Pointer(t,tt,true) setvalue(ttt,4, "~A8 NOP", true) local tt = {0x11d028}local ttt = S_Pointer(t,tt,true) setvalue(ttt,4, "~A8 B [PC,#0x38]", true) local tt = {0x11d080}local ttt = S_Pointer(t,tt,true) setvalue(ttt,4, "~A8 B [PC,#0x34]", true) local tt = {0x122a4c}local ttt = S_Pointer(t,tt,true) setvalue(ttt,4, "~A8 B [PC,#0x24]", true) --hp防闪,专治闪退