抱歉,Xposed真的可以为所欲为——1.基础知识储备

标签:2018


一句话概括本文

本节简单介绍了什么是Xposed,基本原理,如何创建一个Xposed项目以及Xposed常用的类与方法。


引言

前面用Python利用itchat库撸了篇:

  • 小猪的Python学习之旅 —— 19.Python微信自动好友验证,自动回复,发送群聊链接

接着小号貌似因为发送信息太频繁和太快,被封了,限制了不能网页端登录;
又开始折腾AccessibilityService无障碍服务,撸了两篇:

  • 妙用AccessibilityService黑科技实现微信自动加好友拉人进群聊
  • 自动抢红包,点赞朋友圈,AccessibilityService解放你的双手

慢慢地越发对这些小玩具感兴趣,毕竟实用性强,好玩。在评论和群里都有人提到
Xposed,我自己之前也有点了解,Xposed并不是什么新东西了,好几年前
就有了,以前看到搞机(基)的人都觉得很牛逼哄哄,刷系统,root下,改下系统UI,
用各种各样的插件模块改什么什么,屌得不行。(真正屌的是做的那个人而不是用的那个…)

真正开始学的时候,其实Xposed并没有想象中那么复杂,原理和相关的API都很
简单,难的是逆向,怎么去实现你要Hook的功能:反编译,调试输出,堆栈
跟踪,抓包等等,在这个过程中你需要去分析很多很多东西,猜测调试,有时候
折腾几天可能毫无进展,不过也会收获更多,比如你自己开发APP的时候也会
慢慢开始考虑安全相关的东西~

基础就一节,源码分析一节,接着都是实战,另外之前写的Python学习之旅
也不会太监,老规矩,随缘更新~

话不多说,开始本系列的教程吧~


1.Xposed是什么

一个很牛逼的框架,可以在不修改APK的情况下影响程序的运行,比如:
直接把APP的界面改成自己想要的样子,去掉界面里不喜欢的东西,
自动抢红包,消息防撤回,步数修改等等;简直酷得不行,网上有
很多插件作者开发出来的优秀插件,随手打开Xposed Installer下载
就有很多:

插件用起来是挺爽的,不过呢,因为Xposed拥有最高权限,如果不法分子
在插件里植入了恶意代码,比如登录劫持,偷偷采集你的账号密码发送到
他们的手里,如果涉及到了金钱,就很恐怖啦,所以在使用Xposed插件的时候,
尽量选那些开源的,并进行代码review,看是否存在恶意代码,再进行安装体验
(开源不一定就没问题,之前有个抢外卖红包的开源项目在里面加了一段挖矿代码,
令人窒息的操作!)

大概简述下Xposed的原理吧,后面有一节会专门研究源码~

Android基于Linux,第一个启动的进程自然是init进程,该进程会
启动所有Android进程的父进程——Zygote(孵化)进程,该进程的启动配置在
/init.rc脚本中,而Zygote进程对应的执行文件是/system/bin/app_process
该文件完成类库的加载以及一些函数的调用工作。在Zygote进程创建后,
再fork出SystemServer进程和其他进程。

而Xposed Framework呢,就是用自己实现的app_process替换掉了系统原本
提供的app_process,加载一个额外的jar包,然后入口从原来的:
com.android.internal.osZygoteInit.main()被替换成了:
de.robv.android.xposed.XposedBridge.main()
然后创建的Zygote进程就变成Hook的Zygote进程了,而后面Fork出来的进程
也是被Hook过的。这个Jar包在
/data/data/de.rbov.android.xposed.installer/bin/XposedBridge.jar

大概原理就是这样,源码我还没去撸,后面会研究一波,有说错的再回来改。
另外使用Xposed模块是需要Root权限的,怎么Root,安装这个框架,
网上的教程很多,不在本系列研究范围以内!

相关文档

  • 官网:http://repo.xposed.info/
  • 作者Github仓库:https://github.com/rovo89
  • 官方教程:https://github.com/rovo89/XposedBridge/wiki/Development-tutorial
  • XposedBridge.jar下载:https://jcenter.bintray.com/de/robv/android/xposed/api/

然后是Xposed Installer,由于Android 5.0以上采用ART,而5.0以下默认采用Dalvik,
所以是有两个版本的Xposed,附上下载链接:
Android 4.0.3-4.4:http://repo.xposed.info/module/de.robv.android.xposed.installer
Android 5.0以上::https://forum.xda-developers.com/showthread.php?t=3034811

PS:点下面这两个地方即可下载:


2.创建一个Xposed工程

接着演示一波如何创建一个Xposed工程

  • Step 1:新建一个工程,然后修改下AndroidManifest.xml,增加下面的代码:

  • Step 2build.gradle文件添加库依赖

可能会有的疑问:provided只提供编译支持不会写到apk里!!!
别手贱改成compile,装上打开后会报错的!

  • Step 3res/asserts文件夹创建一个xposed_init文件

XposedBridge会从assets 目录中的xposed_init文件中获取入口点,比如我的:

  • Step 4编写我们的入口点类

在此之前我们先修改下我们的MainActivity.java,修改下TextView显示的文字:

代码很简单,就是设置成”渣渣辉”而已,接着编写我们的Xposed入口类:XposedInit.java

继承了IXposedHookLoadPackage接口,重写了handleLoadPackage方法,
判断了下包名,如果是的,XposedHelpers.findAndHookMethod(),
hook掉onCreate()方法,XC_MethodHook()重写afterHookedMethod,
当onCreate()执行后会回调这个方法,在这里获得TextView对象,
把文字修改成”贪玩难约”,接着运行,安装后需要重启设备。

重启后,打开应用,查看是否生效:

生效了,log也能看到打印出来的日志:

注意事项

在运行Xposed之前,记得把InstallRun的钩钩去掉哦!

每次运行都需要重启手机哈~
知道怎么创建一个Xposed项目后,接着就到API解释了!


3.Xposed API相关介绍

PS:发现网上没有什么好的Xposed API的文档啊,这里都是翻阅很多的出来的
网页总结,如果英语好的,建议直接阅读源码注释!!!


1.例子里用到的姿势点

  • IXposedHookLoadPackage接口:App被加载的时候调用,用于App应用的Hook
    回调方法是:handleLoadPackage(final XC_LoadPackage.LoadPackageParam lpparam)

  • XC_LoadPackage.LoadPackageParam:包含与正在加载的应用程序的有关信息。

  • XposedHelpers.findAndHookMethod(要Hook的类,classLoader,方法名,参数,回调对象)
    Hook一个方法的时候使用,回调对象XC_MethodHook()需重写两个方法
    beforeHookedMethod(MethodHookParam param):方法调用前执行
    afterHookedMethod(MethodHookParam param) 方法调用后执行
    注:可以调用param.setResult()设置方法的返回值!

  • MethodHookParam:包含与调用方法有关的信息

比较关注的是这个thisObject,代表调用该方法的对象实例,如果是静态方法
的话,返回一个Null,比如这里调用onCreate()方法的是MainActivity,获得
的自然是MainActivity实例。

接着是获取成员变量,分为私有与非私有变量,非私有直接调用下述方法
即可获得class

Class c = lpparam.classLoader.loadClass("com.coderpig.cpwechatxposed.MainActivity");
Field field = c.getField("tv");

如果是私有,则需要先设置访问权限(setAccessible)

Class c = lpparam.classLoader.loadClass("com.coderpig.cpwechatxposed.MainActivity");
Field field = c.getDeclaredField("tv");
field.setAccessible(true);

接着调用获得该对象

TextView tv = (TextView) field.get(param.thisObject);
tv.setText("贪玩难约");

3.补充姿势点

  • IXposedHookZygoteInit:在Zygote启动时调用,用于系统服务的Hook
    回调方法initZygote()

  • IXposedHookInitPackageResources:在资源布局初始化时会回被执行(inflate方法)
    回调方法:handleInitPackageResources(XC_InitPackageResources.InitPackageResourcesParam resparam)
    InitPackageResourcesParam包含两个参数,包名和XResource(资源相关)

有了这个XResource对象,就可以拿到布局资源树了,通过重写hookLayout方法,

LayoutInflatedParam,里面这个view就是布局资源树了,你可以拿到遍历,拿到某个
特定控件,然后做一些骚操作。

XposeHelpers提供了一些辅助方法

  • callMethod(Object obj,String methodName, Object… args):在APP中调用特定方法
    参数依次是:调用方法的所在类,调用方法名,方法参数
  • findClass(String className,ClassLoader classLoader):获取class类实例
    参数依次是类名,类加载器
  • findMethodExact:通过反射查找类的成员方法(可setAccessible(true)设置非私有)
  • findConstructorExact:通过反射查找构造函数(同样可设置可访问下性)
  • findAndHookXXX:查找并Hook
  • setXxx:通过反射设置对象数据成员的值
  • setStaticXxx:通过反射设置静态变量的值

  • XposedBridge.log(“日志内容”):输入日志和写入到/data/xposed/debug.log
    Xposed Installer日志那里可以看到!

  • 内部类:通过$符号链接内部类

  • 只能Hook方法与构造方法,不能Hook接口和抽象方法

4.小结

基础的东西大概就这些,后续觉得有遗漏的回头补,谢谢~


来啊,Py交易啊

想加群一起学习Py的可以加下,智障机器人小Pig

验证通过后会自动发送群聊链接加群链接,点击加入即可
(不要和机器人聊天=-=,就挂着拉人的,有问题到群里讲!)

欢迎各种像我一样的Py初学者,Py大神加入,一起愉快地交流学♂习,van♂转py。


抱歉,Xposed真的可以为所欲为——1.基础知识储备相关推荐

  1. 抱歉,Xposed真的可以为所欲为——1.基础知识储备(转载)

    一句话概括本文: 本节简单介绍了什么是Xposed,基本原理,如何创建一个Xposed项目以及Xposed常用的类与方法. 引言: 前面用Python利用itchat库撸了篇: 小猪的Python学习 ...

  2. 抱歉,Xposed真的可以为所欲为——2.改为OV机型流畅玩耍高帧率王者农药

    抱歉,Xposed真的可以为所欲为--2.改为OV机型流畅玩耍高帧率王者农药 标签:2018 一句话概括本文: 只需20行代码,利用Xposed Hook掉王者农药王者获取手机系统机型的方法, 改成O ...

  3. 抱歉,Xposed真的可以为所欲为——3.微信运动占领封面出售广告位

    抱歉,Xposed真的可以为所欲为--3.微信运动占领封面出售广告位 标签: 2018 一句话概括本文 简单的二十行代码,利用Xposed Hook掉计步传感器,以此达到刷步数的目的. 引言 现在的年 ...

  4. 抱歉,Xposed真的可以为所欲为——4.猜拳投骰子你能赢算我输

    抱歉,Xposed真的可以为所欲为--4.猜拳投骰子你能赢算我输 标签: 2018 一句话概括本文 人品大法利用Xposed Hook掉微信猜拳和投骰子,让你无需再担忧拿外卖和搞卫生. 引言 关于这节 ...

  5. 抱歉,Xposed真的可以为所欲为——6.你的表白撤不回了

    抱歉,Xposed真的可以为所欲为--6.你的表白撤不回了 标签: 2018 一句话概括本文 一步步Hook微信,实现微信消息防撤回. 引言 上周六下班,与往常一样,和公司同事去吃个饭,然后打个球,在 ...

  6. 抱歉,Xposed真的可以为所欲为——5.我自己刷的Xposed凭什么不给我用

    抱歉,Xposed真的可以为所欲为--5.我自己刷的Xposed凭什么不给我用 标签: 2018 一句话概括本文 分析定位排查下厨房APP检测手机是否安装了Xposed框架的方法,然后一步步 Hook ...

  7. 【深入剖析Tomcat笔记】第一篇 基础知识储备

    基础知识储备 最近突然在想,做了这么久的WEB相关,像tomcat.apache这些服务器究竟是什么东西,恰好碰到<How Tomcat Works>(中文版<深入剖析Tomcat& ...

  8. 小猪的Python学习之旅 —— 1.基础知识储备

    小猪的Python学习之旅 -- 1.基础知识储备 引言: (文章比较长,建议看目录按需学习-) 以前刚学编程的时候就对Python略有耳闻,不过学校只有C,C++,Java,C#. 和PHP有句&q ...

  9. 学习新概念第一册 第一堂课 音标和基础知识储备(1)

    这是我第一次写博客,将自己学习新概念的笔记整理到上面希望对大家有帮助. 总共44堂课.今天是第一堂课.3节课音标和基础知识储备.剩余41节课讲新概念第一册. 在英语中音标就相当于汉语中的拼音,字母就相 ...

  10. ISP(一) 基础知识储备

    ISP(image signal processing),图像信号处理芯片,在手机摄像头和车载摄像头等领域有着广泛应用,是图像信号处理的核心芯片. ISP pipeline 流程图如下: 光线经过le ...

最新文章

  1. OpenCV编程案例:使用轮廓函数检测连通区域
  2. 论文大盘点|卷积神经网络必读的100篇经典论文,包含检测/识别/分类/分割多个领域...
  3. 区块链智能合约入门:Hello world(2)
  4. Codeu_576_问题 D: 查找
  5. HTTP概念详解与案例测试
  6. 小程序 - 参考数据 - ASC字符码表和常用的中文字符编码表
  7. js将long日期格式转换为标准日期格式
  8. Spring+MyBatis多数据源配置实现
  9. 安卓夜神模拟器设置代理
  10. 检测华为网络设备的常用命令
  11. 标准柯西分布_柯西分布的随机数
  12. 关于人工智能的几点看法
  13. php中$this-是什么意思?
  14. 腾讯QQ2008年笔试题中的附加题(30分)
  15. mysql插入百万级_百万级数据插入mysql
  16. 详解C语言最快关键字——register
  17. android gif图片闪烁,Android中动态显示gif图片
  18. 《洋妞》万像电影节揽四奖 或打造同名综艺节目
  19. navicat prenium如何只显示oracle用户自己的表空间
  20. Go 笔记之为什么要学 Go

热门文章

  1. linux中wifi抓取包,使用wireshark捕获wifi包(linux)
  2. 【Mimics】口腔牙齿三维重建
  3. webservice接口开发学习笔记(一)
  4. java ts流,Windows 合并多个*.ts文件
  5. 深入浅出对话系统——任务型对话系统技术框架
  6. 2022年低压电工考试题库及模拟考试
  7. python3爬取微博评论教程_python3爬取微博评论并存为xlsx
  8. 2019最新易桥(HttpPrinter) web打印控件完整版版|HttpPrinter web打印控件下载
  9. leach算法 matlab,求助LEACH的MATLAB仿真代码
  10. 同济大学高等数学下册第八章向量代数与空间解析几何以及每日一题