起因
得知Kindle可以越狱,于是把吃灰四年的KPW4充电开机,登录上美区账号,准备按教程越狱。
结果发现锁屏自动更新到5.18.1版本了,只能使用ADBreak越狱,第一步就是刷出广告。
虽然亚马逊显示Special Offer Active,但是不下发广告。
多次重置,注册新号,换区仍无效,于是决定法区花10欧关闭广告,再重新开启。
仍然是android.net.ip.IpServer的requestIpv4Address函数。
1 | private LinkAddress requestIpv4Address(final boolean useLastAddress) { |
参数增加了一个boolean useLastAddress,加上即可。
通过反射调用getDeclaredMethods获取方法,从而适配安卓11和12。
见GitHub:MainHook.java
在AndroidGotHook项目中,对于ARM64架构,在重定位表中找不到目标符号,无法基于Segment进行GOT Hook。
通过打印日志,与readelf -r的结果比对,最终发现,代码错误地解析了重定位表(将.rela.plt处理为了.rel.plt),导致偏移值查找失败。
查看git历史记录可知,Android的linker从5.0(API等级21)开始支持DT_RELA。使用宏USE_RELA控制。
1 | // Android uses RELA for LP64. |
解决方案:ARM64架构下使用elf64_rela数据结构。
PS:也可以通过DT_PLTREL来判断使用的是哪种重定位表。
1 | typedef struct elf64_rel { |
抄linker.cpp代码即可。
增加对DT_RELA和DT_RELASZ的处理,并使用宏定义进行条件判断,例如:
1 | #if defined(__LP64__) |
完整代码见AndroidGotHook
完整项目见MIUICustom
注意:该模块仅测试于电池与性能 4.2.00,其他版本未测试。
即使在设置中将屏幕刷新率设置为120Hz,对于某些应用(如哔哩哔哩)仍锁60帧。
通过Xposed Hook DisplayFrameSetting.isFeatureOn,实现全局高刷。
1 | // 4.2.00 |
打开设置-开发者选项-显示刷新频率
LSPosed钟对电池与性能启动模块,并强行停止(长按)。