热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

xposed开发1环境搭建

xposed开发1-环境搭建1.安装gitclonehttps:github.comandroid-hackerVirtualXposed.gitcdVirtualXpose

xposed开发1 -环境搭建


1.安装

git clone https://github.com/android-hacker/VirtualXposed.git
cd VirtualXposed
git submodule update --init --recursive

使用android studio打开运行, 就安装成功了.

默认安装了xposed


2.设置安装默认apk


需要修改NewHomeActivity.java, 把需要安装的apk放在跟XposedInstaller_3.1.5.apk_同一个目录(就是assets里), 然后添加遍历assets目录的方法, 最后安装apk.


// 添加遍历assets目录并安装的方法
private void installApks(String name) {ProgressDialog dialog = new ProgressDialog(this);dialog.setCancelable(false);dialog.setMessage("Loading " + name);dialog.show();VUiKit.defer().when(() -> {File installerApk = getFileStreamPath(name + ".apk");if (!installerApk.exists()) {InputStream input = null;OutputStream output = null;try {input = getApplicationContext().getAssets().open(name);output = new FileOutputStream(installerApk);byte[] buffer = new byte[1024];int length;while ((length = input.read(buffer)) > 0) {output.write(buffer, 0, length);}} catch (Throwable e) {VLog.e(TAG, "copy file error", e);} finally {FileUtils.closeQuietly(input);FileUtils.closeQuietly(output);}}if (installerApk.isFile() && !DeviceUtil.isMeizuBelowN()) {try {VirtualCore.get().installPackage(installerApk.getPath(), InstallStrategy.TERMINATE_IF_EXIST);} catch (Throwable ignored) {}}}).then((v) -> {dismissDialog(dialog);mUiHandler.sendEmptyMessageDelayed(2, 500);}).fail((err) -> {dismissDialog(dialog);mUiHandler.sendEmptyMessageDelayed(2, 500);});
}private List<String> names;
private void initNames() {names &#61; new ArrayList<>();try {boolean isXposedInstalled &#61; VirtualCore.get().isAppInstalled(XPOSED_INSTALLER_PACKAGE);if (!isXposedInstalled) {for (String s : getAssets().list("")) {names.add(s);}}} catch (IOException e) {Toast.makeText(this, "Init error!", Toast.LENGTH_SHORT).show();}
}// 重写获取mUiHandler方法
private Handler getmUiHandler() {return new Handler(getMainLooper()) {&#64;Overridepublic void handleMessage(Message msg) {if (msg.what &#61;&#61; 1) {if (names.size() > 0) {installApks(names.get(0));}}if (msg.what &#61;&#61; 2) {if (names.size() > 0) {names.remove(0);sendEmptyMessage(1);}}}};
}

替换原来mUiHandler初始化的方法

mUiHandler &#61; getmUiHandler();
initNames();// 注释原来installXposed的方法
if (checkXposedInstaller) {checkXposedInstaller &#61; false;
// installXposed();mUiHandler.sendEmptyMessage(1);
}

重新运行, 这时候除了XposedInstaller还安装了你放在该目录里的其他apk


不会android开发直接搞xposed确实够呛, 慢慢来, 把过程都记录好, ?
下篇写怎样hook, 一边google一边学, 网上资料确实少或者很多过时的, 还是ios逆向简单?



推荐阅读
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • springmvc学习笔记(十):控制器业务方法中通过注解实现封装Javabean接收表单提交的数据
    本文介绍了在springmvc学习笔记系列的第十篇中,控制器的业务方法中如何通过注解实现封装Javabean来接收表单提交的数据。同时还讨论了当有多个注册表单且字段完全相同时,如何将其交给同一个控制器处理。 ... [详细]
  • Android工程师面试准备及设计模式使用场景
    本文介绍了Android工程师面试准备的经验,包括面试流程和重点准备内容。同时,还介绍了建造者模式的使用场景,以及在Android开发中的具体应用。 ... [详细]
  • 本文介绍了解决Netty拆包粘包问题的一种方法——使用特殊结束符。在通讯过程中,客户端和服务器协商定义一个特殊的分隔符号,只要没有发送分隔符号,就代表一条数据没有结束。文章还提供了服务端的示例代码。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 个人学习使用:谨慎参考1Client类importcom.thoughtworks.gauge.Step;importcom.thoughtworks.gauge.T ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • 本文介绍了南邮ctf-web的writeup,包括签到题和md5 collision。在CTF比赛和渗透测试中,可以通过查看源代码、代码注释、页面隐藏元素、超链接和HTTP响应头部来寻找flag或提示信息。利用PHP弱类型,可以发现md5('QNKCDZO')='0e830400451993494058024219903391'和md5('240610708')='0e462097431906509019562988736854'。 ... [详细]
  • 前景:当UI一个查询条件为多项选择,或录入多个条件的时候,比如查询所有名称里面包含以下动态条件,需要模糊查询里面每一项时比如是这样一个数组条件:newstring[]{兴业银行, ... [详细]
  • Ihavethefollowingonhtml我在html上有以下内容<html><head><scriptsrc..3003_Tes ... [详细]
  • 学习Java异常处理之throws之抛出并捕获异常(9)
    任务描述本关任务:在main方法之外创建任意一个方法接收给定的两个字符串,把第二个字符串的长度减1生成一个整数值,输出第一个字符串长度是 ... [详细]
author-avatar
ayipyipyip
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有