项目地址
Hook点
仍然是android.net.ip.IpServer
的requestIpv4Address
函数。
1 | private LinkAddress requestIpv4Address(final boolean useLastAddress) |
参数增加了一个boolean useLastAddress
,加上即可。
PS:也可以用反射来获取方法,从而适配安卓11和12。这里就直接复制安卓11的代码了。
Hook代码
见GitHub:MainHook.java
仍然是android.net.ip.IpServer
的requestIpv4Address
函数。
1 | private LinkAddress requestIpv4Address(final boolean useLastAddress) |
参数增加了一个boolean useLastAddress
,加上即可。
PS:也可以用反射来获取方法,从而适配安卓11和12。这里就直接复制安卓11的代码了。
见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
1 | https://bd.xxx.com { |
1 | https://bd.xxx.com { |
完整项目见MIUICustom
注意:该模块仅测试于电池与性能
4.2.00
,其他版本未测试。
即使在设置中将屏幕刷新率设置为120Hz,对于某些应用(如哔哩哔哩)仍锁60帧。
通过Xposed
Hook DisplayFrameSetting.isFeatureOn
,实现全局高刷。
1 | // 4.2.00 |
打开设置
-开发者选项
-显示刷新频率
LSPosed
钟对电池与性能
启动模块,并强行停止(长按)。某app使用了curl
+openssl
进行https
通信,并开启了证书校验。
通过分析curl
源码,定位到证书校验位置,Patch汇编代码,绕过证书校验。
SSL_CTX_set_verify
定义:openssl/ssl/ssl_lib.c#L3551
1 | void SSL_CTX_set_verify(SSL_CTX *ctx, int mode, |
调用位置ossl_connect_step1
:curl/lib/vtls/openssl.c#L3200
相关变量verifypeer
:curl/lib/vtls/openssl.c#L2676
PC: Windows 10
NDK: 22.1.7171670
GDB 8.3
(位于<ndk>\toolchains\llvm\prebuilt\windows-x86_64\bin
)lldb version 11.0.5
(位于<ndk>\prebuilt\windows-x86_64\bin
)
<ndk>\prebuilt\android-arm64\gdbserver
<ndk>\toolchains\llvm\prebuilt\windows-x86_64\lib64\clang\11.0.5\lib\linux\arm\lldb-server
<ndk>\prebuilt\android-arm\gdbserver
<ndk>\toolchains\llvm\prebuilt\windows-x86_64\lib64\clang\11.0.5\lib\linux\aarch64\lldb-server