Xposed installer安卓安装和使用

文章目录

  • Xposed installer安卓安装和使用
    • (一)Xposed installer安卓安装
      • 0.百度网盘-我所用的apk(3.1.5)和zip(sdk21,arm,80/89)包(具体版本看安卓机版本)及xposed工程所需XposedBridgeAPI-89.jar包
      • 1.下载xposed installer apk
        • 安卓真机(我最后也未激活成功555)
          • 下载xposed installer
          • xposed框架里面勾上“禁用资源钩子”
          • 报错已安装但未激活,
        • 雷电模拟器
          • 下载xposed installer
          • xposed框架里面勾上“禁用资源钩子”
          • 报错xposed框架未安装
      • 2.下载安装xposed所需zip包
        • 安卓真机,具体版本看所用手机
        • 雷电模拟器
      • 3.将zip刷入安卓机
        • 刷入方式1-通过recovery刷进安卓手机
        • 刷入方式2-通过电脑刷进手机(这个我只试模拟器好使,手机没好使)
          • 刷前准备
          • 开始刷入
            • 安卓真机:
            • 雷电模拟器:
    • (二)安装后如何使用
      • 1.编写xposed项目
        • 注:项目中添加XposedBridge.jar包
      • 2。激活模块
        • 不激活会报错Cannot load any modules because /data/user_de/0/de.robv.android.xposed.installer/conf/modules.list was not found xposed不能加载模块
        • chmod更改文件夹权限(如果还报错没权限什么的)
  • 其他学习
    • Hook(钩子技术)基本知识讲解,原理
    • sendBroadcastAsUser

(一)Xposed installer安卓安装

0.百度网盘-我所用的apk(3.1.5)和zip(sdk21,arm,80/89)包(具体版本看安卓机版本)及xposed工程所需XposedBridgeAPI-89.jar包

链接:https://pan.baidu.com/s/1w3l9-3RxQCbInB41aRN33A
提取码:ofvf

1.下载xposed installer apk

安卓真机(我最后也未激活成功555)

下载xposed installer
  1. 参考帖子https://blog.csdn.net/tymatlab/article/details/80423177
    对应自己的安卓版本去不同网址下载下载xposed install
    对应模块下载apk文件安装即可
  2. Xposed安装
Android版本 链接
Android 4.0.3 ~ 4.4(低) http://repo.xposed.info/module/de.robv.android.xposed.installer
Android 5.0+(高) http://forum.xda-developers.com/showthread.php?t=3034811

Android 5.0+(高)打开网页,ctrl+f搜索apk,就定位到位置了,下载apk3.1.5版本

xposed框架里面勾上“禁用资源钩子”
报错已安装但未激活,

下载安装后,显示已安装但未激活,解决方式如下条

雷电模拟器

下载xposed installer

直接雷电应用商店搜索xposed框架并下载安装

xposed框架里面勾上“禁用资源钩子”
报错xposed框架未安装

2.下载安装xposed所需zip包

参考帖子 https://blog.csdn.net/qq_34627459/article/details/117382475
去 https://dl-xda.xposed.info/framework/ 这个网址,根据sdk版本、cpu=arm/arm64/x86选择压缩包;zip结尾为框架(下载这个),asc结尾为签名(功能暂时未知);具体页面如下:

安卓真机,具体版本看所用手机



雷电模拟器

2021-08-05当前对应的应该下载sdk25,X86的压缩包

3.将zip刷入安卓机

刷入方式1-通过recovery刷进安卓手机

刷入方式2-通过电脑刷进手机(这个我只试模拟器好使,手机没好使)

刷前准备

参考链接 https://www.52pojie.cn/thread-1454243-1-1.html
上一步下载好了zip,就把zip本地解压,得到两个文件夹,
把system那个文件夹提取出来(我试了csdn作者的方法,刷新了十多次他也没弹窗口)
( 从下载地址:https://forum.xda-developers.com/attachment.php?attachmentid=4489568&d=1525092710)下载script.txt,改名为script.sh
创建文件夹xposed, 将官网下载的zip包解压,拿出system文件夹,将其和script.sh放入xposed文件夹。
最后组成的xposed文件夹里面是这样,

开始刷入
安卓真机:

(其余见雷电模拟器刷入方法,不过那样我没成功555,所以可能就得用recovery刷,但是我的recovery被我搞坏了好像)
安卓真机要移动文件时:在手机上下载个root explore(root文件管理器)这个app,通过adb shell输入su
cd /system找到手机的system文件夹,知道这个system文件夹什么样子后,再用root文件管理器搜索system找到这个文件夹(因为直接从电脑放到可见的system会出错,因为这个并不是系统文件夹,用root文件管理器在手机搜索system,会出现好几个system),把我们上一步做好的xposed文件夹放进去。

雷电模拟器:

则通过雷电共享文件夹将做好的xposed文件夹放到安卓端/system里面

点击打开电脑文件夹,找到所需文件

再选择打开安卓文件夹

点选要移动到system文件夹的xposed文件夹,找到system文件夹位置
按12步骤操作,移动完毕

用电脑连接手机cmd再输入adb shell打开手机终端/手机下载终端模拟器并安装(百度一搜就搜的到)
并输入以下命令(具体效果见下图)

su
cd /system/xposed
mount -o remount -w /system
sh script.sh

接着他就会自己安装,一串命令完了之后,看到done说明成功,再输入

reboot

reboot会重启手机,重启之后就会显示

(二)安装后如何使用

1.编写xposed项目

参考链接:Android逆向分析之Xposed的hook技术(https://blog.csdn.net/qq_18870023/article/details/51753587)
Android逆向工程里常用到的工具除了的dex2jar,jd-gui, Apktool之外还有一个Xposed。
这个工具是一个在不修改APK的情况下,影响其运行过程的服务框架。可以根据自己的需求编写模块,让模块控制目标应用的运行。
因为本人也是新手,对于Xposed用法还有很多的不熟悉,所以只对其hook技术进行简单的介绍,并让hook技术应用到以后的逆向分析工程中。
至于什么是hook,不了解的话就先去百度一下,这里基于菜鸟有限的经验,我只能说是一种函数拦截技术~
首先,下载Xposed框架,我这里就不提供下载了,然后手机必须得先root,不然是无法安装Xposed框架的,毕竟hook技术已经是个系统级的过程,所以你懂的~

这只是一个框架而已,并没有什么功能,为了实现个人需求,我们还需要自己编写模块,让这个框架去加载你的模块。
举个栗子,你要去知道手机某个应用包中的某个类中的某个方法中的某个参数,那么你的模块就要指明那个包,哪个类,哪个方法,当系统重启时加载目标应用包时,加载了你的模块的Xposed框架会识别到,接下来,如果你指明的应用中的某一方法被系统执行了,那么Xposed也会识别到,然后让你的模块去Hook(顾名思义,就是就是钩子,陷阱的意思;也可以说是拦截)这个方法,并可以利用模块的接口让方法的参数和返回结果暴露出来。
在本次的博客中,只是结合例子简单的介绍Xposed的hook,实际上Xposed的功能貌似不止于此~
框架弄好了,接下来就可以根据需求编写模块了,不过,再此之前先明确一下需求,我们可以用一个简单的登录系统APP进行测试。
先贴个简单的代码出来先:

public class LoginActivity extends Activity {private final String ACCOUNT="samuel";private final String PASSWORD="123456";private EditText etAccount, etPassword;private Button btnLogin;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_login);etAccount=(EditText)findViewById(R.id.et_account);etPassword=(EditText)findViewById(R.id.et_password);btnLogin=(Button)findViewById(R.id.btn_login);btnLogin.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {if (isOK(etAccount.getText().toString(), etPassword.getText().toString())) {Toast.makeText(LoginActivity.this, "登录成功", Toast.LENGTH_SHORT).show();} else {Toast.makeText(LoginActivity.this, "登录失败", Toast.LENGTH_SHORT).show();}}});}private boolean isOK(String account, String password){return account.equals(ACCOUNT) && password.equals(PASSWORD);}

很简单的一个登录页面,其中的关键函数isOk(String, String)是用来验证账号密码是否正确的,其中我已定死为账号:samuel,密码:123456,也就是说我必须输入以上两个字符串,才能完成验证。

那么,重点就来了,我们就可以利用Xposed的模块hook到isOK(String, String)这个函数,并拦截到账号和密码,甚至可以修改账号和密码!!!

So,需求明确了,那么我们就可以针对性编写模块了。
编写模块步骤:
1、先新建一个Android Project,这个工程不需要界面,所以在工程创建导向时不需要添加MainActivity和layout_main.xml,就一个Empty工程即可;
2、在空工程的java文件夹中新建一个类,该类就是一个模块类,这里命名为“Module”,接下来就要配置一下AndaroidManfest.xml和添加xposed_init文件,如下图;

3、配置AndroidManifest.xml,其中的meta-data内容要照搬,反正我之前没照搬说明上的demo,结果出错了,所以那三个meta-data最好是照着写。

<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.samuelzhan.xposehook"><application android:allowBackup="true" android:label="@string/app_name"android:icon="@mipmap/ic_launcher" android:theme="@style/AppTheme"><meta-dataandroid:name="xposedmodule"android:value="true"/><meta-dataandroid:name="xposeddescription"android:value="Hook Test!"/><meta-dataandroid:name="xposedminversion"android:value="54"/></application></manifest>

4、在main文件夹下创建一个assets文件夹,并在里面创建一个普通的文件,命名为“xposed_init”,然后打开文件,在里面添加一句字符串,即 包名+模块类名。

5、新建一个文件夹,命名为“lib”或者“jar”,然后放进一个XposedBridgeApi.jar包,如上图,并在该jar包上右键Add as Library。这里必须注意两点细节,一是,放jar包的文件夹名字一定是“lib”或“jar”,亲测放到“libs”里没用;二是,需要在build.gradle里的dependencies将compile改为provided,不然会报错。听说是系统里已有该jar包内容,再次打包进去会冲突,所以改为provided,不要管那条红色波浪线,无碍~

6、编写模块类Module:

public class Module implements IXposedHookLoadPackage {@Overridepublic void handleLoadPackage(XC_LoadPackage.LoadPackageParam loadPackageParam) throws Throwable {if (loadPackageParam.packageName.equals("com.samuelzhan.logintest")) {XposedHelpers.findAndHookMethod("com.samuelzhan.logintest.LoginActivity",loadPackageParam.classLoader,"isOK",String.class,String.class,new XC_MethodHook() {@Overrideprotected void beforeHookedMethod(MethodHookParam param) throws Throwable {}@Overrideprotected void afterHookedMethod(MethodHookParam param) throws Throwable {}});}}}

说明:
Module继承了IXposedHookLoadPackage接口,当系统加载应用包的时候回回调 handleLoadPackage;
XposedHelpers的静态方法 findAndHookMethod就是hook函数的的方法,其参数对应为 类名+loadPackageParam.classLoader(照写)+方法名+参数类型(根据所hook方法的参数的类型,即有多少个写多少个,加上.class)+XC_MethodHook回调接口;
这里的第一个参数类名必须要有包名前缀,即“packageName+className”,还有一点,如果代码被混淆过,即使你明知道代码中要hook的类名和方法名,但都不一定能用,必须以smali中的名字为准,比如:isOk()混淆之后在smali中的函数名为a,那么hook的时候就必须写a,而不是isOK,第一个参数类名同理!

参数里有一个监听类XC_MethodHook,该类在hook前后回调,通过回调方法的MethodHookParam可以拦截到函数参数。
Xposed除了hook目标应用的函数之外,还可以hook某些类的构造方法,对应的方法为XposedHelpers.findAndHookConstructor()。

至此,一个模块基本已完成,接下来将其打包 Build->Generate Signed APK…生成一个APK,并安装在手机上。因为没有MainActivity,所以安装后不会弹出任何界面,但若果此时手机已安装了Xposed,那么Xposed会在消息栏弹一个消息,通知你“模块已更新”,此时可以选择Xposed菜单中的 “框架”->“软重启”,重启手机(软重启不会断电,相当于电脑的重启,比硬重启要快)。

到这里,已经可以hook函数了。
现在,试着去拦截isOK(String, String)函数中的账号密码,先在回调函数中添加日记打印代码将其账号密码参数暴露出来,顺便把返回结果也显示一下:

                    new XC_MethodHook() {@Overrideprotected void beforeHookedMethod(MethodHookParam param) throws Throwable {XposedBridge.log("账号:"+(String)param.args[0]+"   密码:"+(String)param.args[1]);Log.d("zz","账号:"+(String)param.args[0]+"   密码:"+(String)param.args[1]);}@Overrideprotected void afterHookedMethod(MethodHookParam param) throws Throwable {Log.d("zz", param.getResult().toString());}});

我在beforeHookedMethod中写了两种方法日志,第一个是XposedBridge的静态log,这个日志会显示在Xposed的日志选项里,个人不喜欢这种方法,因为每次运行你要hook的程序,又必须切换页面到Xposed查看日志,太麻烦了,但它有个优点,相比Android中的Log.d(), 它能显示抛出的异常
,而Android Log不可以。第二个Android Log就不用说了,这里我两种都用了。
编写完后,我们重新打包这个模块,并安装到手机上,然后让手机软重启,每次更新安装模块都必须得重启才生效。

好,重启后,我们运行一下目标应用,输入账号密码~

然后看看Android Studio中的Logcat和 Xposed中的日志选项:

可以看到,两者都可以看到拦截到的密码账号。因为正确的账号密码为samuel 123456,这里只是随便输入zzz aaa,所以返回的结果是false,当然也在回调函数afterHookedMethod中可以捕获得到,这里显示false,说明登陆验证失败。
除了能读取参数之外,hook技术还可以修改函数参数。
比如,接下来我修改模块,让其无论输入什么,我都实现登陆,那我先在hook中把账号密码修改成samuel 123456,也就是说,通过hook技术,我怎样输入都能成功登陆。

                    new XC_MethodHook() {@Overrideprotected void beforeHookedMethod(MethodHookParam param) throws Throwable {//修改参数param.args[0]="samuel";param.args[1]="123456";}@Overrideprotected void afterHookedMethod(MethodHookParam param) throws Throwable {Log.d("zz", param.getResult().toString());}});

然后重新打包,安装,重启手机,再次运行登陆页面的程序,再次输入zzz aaa看看:

不错,显示登陆成功,说明修改参数成功。
其实Xposed貌似还有其他更强大的功能,这里只用了冰山一角进行逆向分析而已~

注:项目中添加XposedBridge.jar包

2。激活模块

不激活会报错Cannot load any modules because /data/user_de/0/de.robv.android.xposed.installer/conf/modules.list was not found xposed不能加载模块

启动安卓xposed项目,会在手机/模拟器上安装项目apk,然后到xposed installer里面的模块界面,给要激活的模块打勾。 再重新启动安卓机

chmod更改文件夹权限(如果还报错没权限什么的)

其他学习

Hook(钩子技术)基本知识讲解,原理

Hook(钩子技术)基本知识讲解,原理
对于Windows系统,它是建立在事件驱动机制上的,说白了就是整个系统都是通过消息传递实现的。hook(钩子)是一种特殊的消息处理机制,它可以监视系统或者进程中的各种事件消息,截获发往目标窗口的消息并进行处理。所以说,我们可以在系统中自定义钩子,用来监视系统中特定事件的发生,完成特定功能,如屏幕取词,监视日志,截获键盘、鼠标输入等等。

sendBroadcastAsUser

sendBroadcastAsUser——Calling a method in the system process without a qualified user

xposed安装,与android逆向工程之xposed的hook相关推荐

  1. Android逆向工程之dx工具jar2dex失败,使用d8

    遇到问题 在使用apktool做apk逆向工程时,我们一般都需要将apk反编译为smail,然后将要加入其中的SDK也编译成smail,然后将二者合并起来之后打包成一个新的apk,其中将SDK的jar ...

  2. android逆向工程之apktool工具集

    Android apktool是一个用来处理APK文件的工具,可以对APK进行反编译生成程序的源代码和图片.XML配置.语言资源等文件,也可以添加新的功能到APK文件中. apk反编译软件有个组合套餐 ...

  3. iOS逆向工程之Theos

    iOS逆向工程之Theos 如果你对iOS逆向工程有所了解,那么你对Tweak并不陌生.那么由Tweak我们又会引出Theos, 那么什么是Theos呢,简单一句话,Theos是一个越狱开发工具包,T ...

  4. Android逆向分析之Xposed的hook技术

    转载自:http://blog.csdn.net/qq_18870023/article/details/51753587 Android逆向工程里常用到的工具除了的dex2jar,jd-gui,   ...

  5. Android逆向:通过Xposed解密柠某直播本地数据

    声明:案例分析仅供学习交流使用,勿用于任何非法用途.如学习者进一步逆向并对版权方造成损失,请自行承担法律后果,本人概不负责. 简介 很多软件在保护文件安全.用户隐私时,都会对本地文件数据进行加密处理. ...

  6. iOS逆向工程之App脱壳

    本篇博客以微信为例,给微信脱壳."砸壳"在iOS逆向工程中是经常做的一件事情,,因为从AppStore直接下载安装的App是加壳的,其实就是经过加密的,这个"砸壳&quo ...

  7. Android 大杂烩工程之ListView的开发2以及数据仓库开发模式

    今天是放完假后工作的第一天,为了证明我不是一段幽灵代码,我给各位看客老爷们说句:祝大家节日过得愉快(过得不愉快那也是人之常情). 我们继续来讲一讲ListView的开发,上次讲到了ListView的适 ...

  8. 安卓手机安装虚拟定位的方法Xposed安装器+模拟位置(Xposed模块)

    原文:https://www.52pojie.cn/thread-571328-1-1.html 未测试,据说只支持某些手机,小米和华为很难安装,建议买其他品牌. Xposed安装器步骤: ·ROOT ...

  9. 【原创】【2021 android逆向系列】2:MIUI安装xposed问题全览(从本人简书博客移入)

    书接上文[原创][android逆向系列]1:真机(小米note 3)root,本文和大家说一说MIUI安装xposed爬过的坑,以及如何安装xposed~ 一.xposed基础知识: xposed ...

最新文章

  1. UBOOT启动内核过程
  2. RocketMq是什么
  3. Openstack组件部署 — Netwotking service组件介绍与网络基本概念
  4. linux查看显卡核心数,linux查看硬件信息,linux查看硬盘信息,linux查看CPU信息,linux查看显卡,硬件型号信息 | 帮助信息-动天数据...
  5. python tkinter图片为什么要设置全局变量_为什么这里一定要设置全局变量
  6. jquery实现的视差滚动教程(视差大背景效果)
  7. python switch高效替代_Python中用什么代替switch
  8. 第二场周赛(递归递推个人Rank赛)——题解
  9. JS设计模式——12.装饰者模式
  10. linux嵌入式gdb调试指南,建立嵌入式gdb调试环境
  11. Object.assign 浅拷贝还是深拷贝
  12. 3.Shell 编程从入门到精通 --- 编程基础的基本元素
  13. qt结合arcgis进行开发
  14. 商业计划书范文3000_大学生商业计划书范文
  15. 微信小程序查询数据库
  16. raid5两块硬盘掉线数据恢复-服务器磁盘阵列数据恢复方法
  17. MaxListenersExceededWarning: Possible EventEmitter memory leak detected.警告的处理
  18. 关于思源笔记与docker的部分问题
  19. 怎么选择靠谱的IP地理位置定位产品?
  20. Linux常用 bash命令

热门文章

  1. 《月亮与六便士》:追寻头顶的月亮
  2. 基于趋动云部署复旦大学MOSS大模型
  3. 爬取微博用户行为数据语义分析数据挖掘报告
  4. 《明日方舟》游戏拆解
  5. vue-element上传视频并预览、上传多个视频+laravel8后台(larke-admin)
  6. Email_Tracing系统 邮件跟踪系统升级
  7. SIGPIPE 原因和解决办法
  8. mysql取消根据当前时间戳更新_mysql timestamp类型 根据当前时间戳更新
  9. QT、C++电子相册
  10. 视频框架 Vitamio 使用教程+部分心得(一)准备