LSPosed 模块开发入门和踩的坑

2024-09-02 16:36
文章标签 模块 入门 开发 lsposed

本文主要是介绍LSPosed 模块开发入门和踩的坑,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

最近工作中一直在使用LSPosed工具,所以想着记录下来,总结一下,顺便分享给有需要的人
 

环境

我使用的是 Magisk + LSPosed。

如何使用

官方有写好的wiki,这里不再赘述。

模块开发

温馨提示:

        在开发之前,一定要弄清楚:

        1. 模块工作的原理:模块处于哪个进程?有哪些目录的权限?

        2. classloader双亲委托机制:为什么我用模块类的classloader 无法找到要hook的类?怎么反射获取目标类?获取到目标类之后,hook只是调用api的事情了。

模块创建时如何配置:

Module Scope · LSPosed/LSPosed Wiki · GitHub

Native Hook相关: Native Hook · LSPosed/LSPosed Wiki · GitHub

基本上只要安装官方的文档来操作,运行第一个模块不会有什么问题。

Native 注意事项

1. 开发的动态库不要跟原app的动态库的符号冲突了。

        没有native开发经验的同学可以和遇到该问题,并且遇到代码逻辑不是安装自己预期工作的。

        避免出现该问题的方法:

        1. 检查目标app自身使用了哪些第三方动态库,我们自己的模块是否也有使用?如果也有相同的动态库,则要考虑去掉自己的那个动态库,要么复用目标app的要么不用。
        系统动态库和ndk自带的动态库共用则没关系。

2. 如果遇到hook 动态库函数后,程序崩溃的情况,除了是我们代码写的有问题之外,很可能是应用程序做了hook检测。一般app会检测某些关键的函数,如 jni相关的接口。        怎么区分是bug还是目标app做了检测呢?验证方法:hook自己的写的一个demo, 如果demo能正常工作,就说明接口hook是正确的。

实操经验(踩过的坑)分享

LSPosed Manager 如何安装?

1.  下载magisk对应的模块(需要弄清楚自己用的是Zygisk还是riru方案,我用的是Zygisk),推荐下载最新版 下载地址

2. 在magisk Modules界面安装模块即可

LSPosed Manager在哪?

我第一次启动模块的时候就遇到了问题,这个module状态magisk里面了,但是没有启动的方法。后面看看文档才知道,原来入口在通知栏。LSPosed默认会启动一个常住通知在通知栏,通过点击通知即可打开LSPosed界面。

每次模块更新都要重启手机?

我目前测试的效果是 如果把需要hook的应用数据清除了,则模块代码会立即生效,也就是说

        如果能接受清除数据,可以不重启;但我也遇到过异常情况,应用非常卡,修改的代码也没生效,重启后解决。

另外网上有人写了可以动态加载apk的模块,可以解决每次重启的问题,不过我没有使用该方法。未经本人验证,有需要的拿去: 参考博客  代码仓库地址

root检测怎么过?

1. 安装Shamiko可以过很多检测,推荐下载最新版本 下载地址

2. 如果发现有的app还是能检测出root,那请先逆向分析找到它检测root的方式,再针对性hook检测的代码来解决

Magsik中一项很重要的配置-DenyList

Magisk hide/Denylist 是一种用于隐藏ROOT 权限的工具,它可以让用户在ROOT 状态下使用一些应用程序,同时隐藏ROOT 权限,以避免被一些应用程序检测到ROOT 权限而无法正常运行。

如果要hook的应用具有多个进程,并且安装root防检测模块后还是被发现了root权限,请检查该配置

点击Magisk 首页左下角Home,再点击右上角设置按钮,下滑找到 Configure DenyList(对应的中文是 配置排除列表),接着点击目标应用,然后可以看到一个展开的进程列表,点击应用右侧的方块复选框,就可以全选所有的进程啦。

如果我要记录日志,日志放在哪?

很多同学可能有这样的习惯,日志路径使用context获取外置存储或内置存储,初始化放在application attach的时候,这么做自然没错,但在lsposed模块中则不可以。

因为程序的入口变了,不再是application。所以这时要做的也是先获取到当前应用的context,再去获取日志存储路径。

模块在hook进程工作时,怎么和模块app通信?

模块在工作的时候,属于目标app进程,做的很多跨进程通信的行为是可以被感知到的,如:拉起activity、绑定服务、ContentProvider调用、FireProvider分享文件、不在原app中存在的广播action等等。

我觉得比较安全的方式是进行自定义加密的socket通信,其次是携带加密数据的广播。其他几种被检测到的风险则比较大。

总结

今天只是讲讲基本的入门和注意事项,以后有空再讲讲 lsposed hook细节和实战,如 okhttp自吐、文件操作、加解密自吐等等。

这篇关于LSPosed 模块开发入门和踩的坑的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1130486

相关文章

Python中logging模块用法示例总结

《Python中logging模块用法示例总结》在Python中logging模块是一个强大的日志记录工具,它允许用户将程序运行期间产生的日志信息输出到控制台或者写入到文件中,:本文主要介绍Pyt... 目录前言一. 基本使用1. 五种日志等级2.  设置报告等级3. 自定义格式4. C语言风格的格式化方法

SpringBoot 多环境开发实战(从配置、管理与控制)

《SpringBoot多环境开发实战(从配置、管理与控制)》本文详解SpringBoot多环境配置,涵盖单文件YAML、多文件模式、MavenProfile分组及激活策略,通过优先级控制灵活切换环境... 目录一、多环境开发基础(单文件 YAML 版)(一)配置原理与优势(二)实操示例二、多环境开发多文件版

使用docker搭建嵌入式Linux开发环境

《使用docker搭建嵌入式Linux开发环境》本文主要介绍了使用docker搭建嵌入式Linux开发环境,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录1、前言2、安装docker3、编写容器管理脚本4、创建容器1、前言在日常开发全志、rk等不同

从入门到精通详解Python虚拟环境完全指南

《从入门到精通详解Python虚拟环境完全指南》Python虚拟环境是一个独立的Python运行环境,它允许你为不同的项目创建隔离的Python环境,下面小编就来和大家详细介绍一下吧... 目录什么是python虚拟环境一、使用venv创建和管理虚拟环境1.1 创建虚拟环境1.2 激活虚拟环境1.3 验证虚

Python 基于http.server模块实现简单http服务的代码举例

《Python基于http.server模块实现简单http服务的代码举例》Pythonhttp.server模块通过继承BaseHTTPRequestHandler处理HTTP请求,使用Threa... 目录测试环境代码实现相关介绍模块简介类及相关函数简介参考链接测试环境win11专业版python

Python实战之SEO优化自动化工具开发指南

《Python实战之SEO优化自动化工具开发指南》在数字化营销时代,搜索引擎优化(SEO)已成为网站获取流量的重要手段,本文将带您使用Python开发一套完整的SEO自动化工具,需要的可以了解下... 目录前言项目概述技术栈选择核心模块实现1. 关键词研究模块2. 网站技术seo检测模块3. 内容优化分析模

基于Java开发一个极简版敏感词检测工具

《基于Java开发一个极简版敏感词检测工具》这篇文章主要为大家详细介绍了如何基于Java开发一个极简版敏感词检测工具,文中的示例代码简洁易懂,感兴趣的小伙伴可以跟随小编一起学习一下... 目录你是否还在为敏感词检测头疼一、极简版Java敏感词检测工具的3大核心优势1.1 优势1:DFA算法驱动,效率提升10

Java List 使用举例(从入门到精通)

《JavaList使用举例(从入门到精通)》本文系统讲解JavaList,涵盖基础概念、核心特性、常用实现(如ArrayList、LinkedList)及性能对比,介绍创建、操作、遍历方法,结合实... 目录一、List 基础概念1.1 什么是 List?1.2 List 的核心特性1.3 List 家族成

Nginx添加内置模块过程

《Nginx添加内置模块过程》文章指导如何检查并添加Nginx的with-http_gzip_static模块:确认该模块未默认安装后,需下载同版本源码重新编译,备份替换原有二进制文件,最后重启服务验... 目录1、查看Nginx已编辑的模块2、Nginx官网查看内置模块3、停止Nginx服务4、Nginx

Python开发简易网络服务器的示例详解(新手入门)

《Python开发简易网络服务器的示例详解(新手入门)》网络服务器是互联网基础设施的核心组件,它本质上是一个持续运行的程序,负责监听特定端口,本文将使用Python开发一个简单的网络服务器,感兴趣的小... 目录网络服务器基础概念python内置服务器模块1. HTTP服务器模块2. Socket服务器模块