lsposed的编译和定制
大约 2 分钟
1.环境准备
本文主要介绍lsposed的编译流程;
lsposed仓库:https://github.com/LSPosed/LSPosed
libxposed100仓库:https://github.com/LSPosed/LSPosed
jdk:17
2.lsposed编译
首先拉取lsposed的仓库:
git clone https://github.com/LSPosed/LSPosed.git .
此时lsposed仓库中的子模块需要再次拉取:
git submodule update --init --recursive

待子模块拉取完成后,可以进行编译,不过可能会错误,则可以本地编译出xposed100的框架
set JAVA_HOME="E:\LanguageEnvironment\Java\jdk17"
git clone --depth 1 https://github.com/libxposed/api.git libxposed/api
git clone --depth 1 https://github.com/libxposed/service.git libxposed/service
cd libxposed/api
gradlew :api:publishApiPublicationToMavenLocal
cd ../service
gradlew :interface:publishInterfacePublicationToMavenLocal
编译完后,就发现本地就有libxposed 100的库了

我们还可以将lsposed100的框架加入到工程中

然后执行命令开始编译
gradlew zipAll
编译成功

magisk-load下面就编译出来了

3.问题解决
编译过程中可能会遇到一些问题,这里列举一下
过程中会遇到xposed100的类冲突问题,将多dex开关打开
image.png 堆栈问题
org.gradle.jvmargs=-Xmx2048m -Xms512m -XX:MaxMetaspaceSize=2048m
4.lsposed定制
我们编译好源码后,可以针对lsposed一些特征进行进一步定制,例如可以进行粗粒度定制和细粒度定制
粗粒度定制
我们可以针对一些常见特征进行定制
LspModuleClassLoader lSPosedContext LSPosed-Bridge LSPosedLogcat --inline-max-code-units=1
粗粒度定制好处就是定制的范围不大,lsposed的框架模块基本都可以使用
细粒度定制
我们还可以针对细粒度定制,例如全局的posed、xposed等特征全部进行定制,这样隐藏效果更好
不过细粒度定制我们需要针对lsposed模块进行重新适配
无论哪种定制方式,可以过一些常见的lsposed检测,但针对inlinehook、crc校验、匿名内存等方式都没用,因此这里可以进一步针对一些常见的检测点编译lsposed框架进一步的反制,这样就可以达到不错的效果;
5.参考文章
https://blog.csdn.net/u012787710/article/details/131509943