6、XPOSED二、叉叉助手框架--用XPOSED实现

继《 xposed框架初探》之后,编写一个小小的demo应用,刚好之前分析叉叉的游戏辅助框架(参考《 叉叉助手逆向分析续集--模拟实现游戏插件框架--再扩展到脱壳机 》, 我们是用了libsubstrate的hook框架来完成的 ),这次就用XPOSED实现一下。

相关参考:
官方教程《 Making the project an Xposed module》
《 Android Hook框架Xposed原理与源代码分析》
看雪论坛《 XPOSED的小笔记 ,文章介绍的很详细很清晰。
Xpoded模块开发教程

准备工作:
上一篇中我们用的是“ 华为专用Xposed框架”,也并不是很完美,于是还是从官网上下载稳定版本的,这个要视不同手机而定。
http://repo.xposed.info/module/de.robv.android.xposed.installer,点下面的“Show older versions”逐个版本安装试用,每个版本都要激活一次并重启手机,还是挺麻烦的,好在试到2.5.1版本的时候成功了!这个版本确实比 华为专用Xposed框架 ”要稳定完美许多,果断换用2.5.1官方版本。

实现思路:
实现接口IXposedHookLoadPackage的接口函数handleLoadPackage,判断参数包名是否是目标APK,若是则调用findAndHookMethod对目标启动类的onCreate函数进行HOOK,在afterHookedMethod函数中动态加载插件,将参数中有关activity的实例传给插件。

一个 XposedModule 本质上是设定了部分特殊元数据标志位的普通应用程序,需要在 AndroidManifest.xml 文件中添加如下设置: 
AndroidManifest.xml => Application => Application Nodes (at the bottom) => Add => Meta Data
添加节点:name = xposedmodule,value = true。name = xposedminiversion, value = API level。
<application android:allowBackup="true"android:icon="@drawable/ic_launcher"android:label="@string/app_name" android:theme="@style/AppTheme"android:name=".MainApplication"> <!-- Xposed --> <meta-dataandroid:name="xposedmodule" android:value="true" /> <meta-dataandroid:name="xposedminversion" android:value="42+" /> <meta-data android:name="xposeddescription"android:value="GameAssistant" /> <activityandroid:name="com.netease.ga.view.MainActivity"android:theme="@android:style/Theme.NoTitleBar.Fullscreen"><intent-filter> <actionandroid:name="android.intent.action.MAIN" /> <categoryandroid:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activityandroid:name=".view.MyGamesActivity"android:theme="@android:style/Theme.NoTitleBar.Fullscreen"/><activity android:name=".view.PluginsActivity" /> <activityandroid:name=".view.MoreActivity" /> <receiverandroid:name=".receiver.MyReceiver" /> </application>
添加标记的作用估计是让 XPOSED安装器识别为插件。

添加库文件:XposedBridgeApi.jar
需要注意的是这个jar包不能放到工程的libs目录,否则运行会出现异常。最好是放到工程主目录下,然后在eclipse里右键选择该jar-Build Path => Add to Build Path。
注意这个jar包版本选择,经测试XposedBridgeApi-54.jar在2.5.1版本的xposedinstaller下是兼容的,但是最新版的靠谱助手(2.5.1143)上默认集成安装了2.6.1版本的xposedinstaller,测试发现XposedBridgeApi-54.jar并不是很稳定,后来改用XposedBridgeApi-42.jar是可以的。

Next, make the XposedBridge API known to the project. You can downloadXposedBridgeApi-<version>.jar from the first post of this XDA thread. Copy it into a subfolder called lib. Then right-click on it and select Build Path => Add to Build Path. The <version> from the file name is the one you insert asxposedminversion in the manifest.

Make sure that the API classes are not included (but only referenced) in your compiled APK, otherwise you will get an IllegalAccessError. Files in thelibs (with "s") folder are automatically included by Eclipse, so don't put the API file there.

这个设置对应到androidstudio的操作步骤:
F4打开工程结构,选择Modules-当前项目-Dependencies-+-选择“Jar or directiories”,
选择jar包后,在“Scope”栏选择“Provided”,不要选择“Complie”。

然后声明一个类XposedXXHook实现接口 IXposedHookLoadPackage

在 assets 目录下新建一个 xposed_init 文件,这个文件声明了需要加载到 XposedInstaller  的入口类:com.netease.ga.XposedXXHook

由于改动不大,因此直接在原来的GA工程(基于libsubstrate的叉叉游戏辅助框架)上添加。

完善 XposedXXHook的代码:
package com.netease.ga; import android.app.Activity; import android.content.Context;import android.content.SharedPreferences; import android.os.Build; importandroid.os.Bundle; import android.util.Log; import java.lang.reflect.Method; importdalvik.system.DexClassLoader; import de.robv.android.xposed.IXposedHookLoadPackage;import de.robv.android.xposed.XC_MethodHook; importde.robv.android.xposed.callbacks.XC_LoadPackage; import staticde.robv.android.xposed.XposedHelpers.findAndHookMethod; import staticde.robv.android.xposed.XposedHelpers.findClass; /** * Created by sing on 14-9-17. * desc: */ public class XposedXXHook implements IXposedHookLoadPackage { private staticfinal String TAG = "XposedXXHook"private static final String TARGET_PACKAGE = "com.example.helloapplication"private static final String TARGET_CLASS = "com.example.helloapplication.MainActivity"private static final String TARGET_FUNCTION = "onCreate"//private SharedPreferences sp; /** * * @param param *@throws Throwable */ @Override public voidhandleLoadPackage(XC_LoadPackage.LoadPackageParam param) throws Throwable { String packageName = param.packageName; Log.d(TAG, "handleLoadPackage: " + packageName); if(packageName.equals(TARGET_PACKAGE) == false) { return; } Log.d(TAG,"handleLoadPackage: star hook"); XC_MethodHook.Unhook unhook = findAndHookMethod(TARGET_CLASS, param.classLoader, TARGET_FUNCTION, Bundle.classnewXC_MethodHook() { @Override protected void beforeHookedMethod(MethodHookParam param)throws Throwable { Log.d(TAG, "[handleLoadPackage]beforeHookedMethod"); } @Overrideprotected void afterHookedMethod(MethodHookParam param) throws Throwable { Log.d(TAG,"[handleLoadPackage]afterHookedMethod: " + param.thisObject.toString()); String plugApkPath = "/data/data/com.netease.ga/app_plugin/lianmengplug.apk"; String plugSoPath = "/data/data/com.netease.ga/app_plugin/libxxlianmeng_mm.so"; String dexOutputDir = "/data/data/" + TARGET_PACKAGE + "/cache"; ClassLoader localClassLoader = ClassLoader.getSystemClassLoader(); DexClassLoader localDexClassLoader new DexClassLoader(plugApkPath, dexOutputDir, null, localClassLoader); java.lang.Class<?> plugClass = localDexClassLoader.loadClass("com.xxAssistant.UI.UniversalUI"); Method mInit = plugClass.getDeclaredMethod("init", Activity.class, String.class); mInit.invoke(null, param.thisObject, plugSoPath); } }); if (unhook!=null) { Log.d(TAG,"handleLoadPackage: hook ok"); }else{ Log.d(TAG, "handleLoadPackage: hook failed"); } } }
注意这段代码只HOOK包名为com.example.helloapplication的应用程序,如果要HOOK其他应用程序则把包名过滤的判断去掉,并动态解析应用程序的主启动类即可。

编译安装好后在xposed安装器的模块中激活GA并重启手机。

启动手机后不用运行xposed安装器和GA,直接运行 helloapplication程序:
可以看出插件已经被我们成功加载了。

常见错误:
09-17 07:58:42.049: I/Xposed(2447): java.lang.NoSuchMethodError: com.example.helloapplication.MainActivity#onCreate()#exact
错误为未找到对应的函数,在hook的时候需要指定函数的参数形式。
findAndHookMethod(TARGET_CLASS, param.classLoader, TARGET_FUNCTION, newXC_MethodHook(){...});
因为 onCreate是有参数的,所以正确的调用方式是:
findAndHookMethod(TARGET_CLASS, param.classLoader, TARGET_FUNCTION, Bundle.classnewXC_MethodHook(){...});

xposed与libsubstrate的对比:
测试都需要经过反复的重启,此次 xposed的测试demo也是如是,即便写的只是java层代码,也需要每次改动都要重启手机。而之前用 libsubstrate 实现的底层hook,在每次改动JNI代码后也是需要重启手机的。
代码量方面还是 xposed框架下少很多,而且都是java层代码,写起来速度也快不容易出错,测试的时间自然也少很多。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/350321.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

2、叉叉助手逆向分析(上)

描述&#xff1a;主要讲解如何有条例地逆向分析出软件的主要逻辑。 工具&#xff1a;APKIDE&#xff0c;JD-GUI 方法&#xff1a;顺藤摸瓜&#xff0c;smali代码主要看invoke关键函数调用&#xff0c;定位到相应的类中看代码。 使用APKIDE反编译xxzhushou_android.apk。 各个游…

3、叉叉助手逆向分析(下)

plugin/117/xxFknsg.apk --ui-name:com/xxAssistant/FknsgUI/xxMain --activity-name:com/babeltimes/main/MainActivity --so-path:/data/data/com.xxAssistant/app_plugin/117/libxxfknsg.so 我们将手机里的apk提取出来&#xff1a;com.babeltime.fknsango_360-1.apk&#xf…

android 我叫mt 插件,叉叉我叫MT助手

叉叉mt助手是我叫mt的安卓版辅助插件&#xff0c;提供加速、自动点箭头、自动点异常、自动售卡、买体力、一键收/送体力、副本计数等功能&#xff0c;只需要一键精英就已经OK&#xff0c;叉叉mt助手旨在为玩家节省时间&#xff0c;提高游戏效率&#xff0c;给玩家最贴心的服务&…

使用GCN根据颗粒图像预测对应性能

之前做一个小实验写的代码&#xff0c;本想创建个git repo&#xff0c;想了想好像没必要&#xff0c;直接用篇博文记录一下吧。 对应资源 &#xff1a; https://download.csdn.net/download/rayso9898/87865298 0. 大纲 0.1 代码说明 dataGeneration.py -> RSA生成n张图像&…

电表网关BL102采集DL/T645电表的操作步骤

使用钡铼BL102网关&#xff1a;西门子S7-200PLC对接ThingsBoard流程 本文主要讲述了钡铼技术BL102物联网网关如何通过RS485采集DL/T645规约电表 BL102是一款采集西门子、三菱、欧姆龙、台达、AB、施耐德等各种PLC数据转换为Modbus TCP、OPC UA、MQTT、ThingsBoard等协议的工业…

JAVA开发(神乎其神的区块链技术之数据上链)

这是我第二遍写关于区块链的博文&#xff0c;前一篇文章《神乎其神的区块链概念和技术》主要介绍区块链的由来和基本概念。因为博主最近在做一个区块链项目&#xff0c;所以有时候也遇到一些概念性的知识需要去理解&#xff0c;比如数据的上链。谈到数据上链&#xff0c;我们先…

OpenCV(图像处理)-基于Python-图像的基本变换-平移-翻转-仿射变换-透视变换

1. 概述2. 接口介绍resize()flip()rotate()仿射变换warpAffine()getRotationMatrix2D()-变换矩阵1getAffineTransform()-变换矩阵2 透视变换warpPerspective()getPerspectiveTransform() 1. 概述 为了方便开发人员的操作&#xff0c;OpenCV还提供了一些图像变换的API&#xff…

计算机改名字后找不到网络,改了wifi名字后电脑搜不到网络怎么办? | 192路由网...

问&#xff1a;为什么我改了wifi名字后&#xff0c;我的电脑就搜不到wifi信号了&#xff1f; 答&#xff1a;修改wifi名称后如果搜索不到wifi信号了&#xff0c;可以按照下面的步骤进行操作&#xff0c;以解决此问题。 1. 如果将wifi名字改成了中文&#xff0c;建议你将其修改为…

柠檬班python自动化百度云_柠字取名2019-尚名网

柠字取名2019-尚名网 名字不是一个简单、随便的称号&#xff0c;它隐含着不容忽视的信息力量。寓意好的名字有积极的暗示作用&#xff0c;使人更有信心和勇气去实现理想&#xff0c;寓意欠佳的名字反之。可见&#xff0c;名字对人们而言是非常重要的&#xff0c;为人父母者一定…

为了取一个花名,我爬下了中草药网所有的名字!

很酷哦&#xff01;不过&#xff0c;对我这个选择恐惧症来说&#xff0c;也很纠结…我们先看一下有哪些要求吧&#xff1f; 中草药名&#xff1f;人参&#xff1f;西洋参&#xff1f;还有啥&#xff1f;&#xff1f;&#xff1f; 作为一个不怎么吃药的非医学生&#xff0c;这题…

使用MySQL查找姓名重名_查询名字有多少人重名,全国同名同姓查询全国姓名数据库...

查询名字有多少人重名&#xff0c;全国同名同姓查询全国姓名数据库 时间&#xff1a;2020-04-04 15:30:01 很多爸爸妈妈在帮孩子取姓名的时候&#xff0c;会想了解在全国范围内重名的人数&#xff0c;希望宝宝的名字不会跟太多人一样。或者有的小伙伴单纯想弄明白全中国同自己姓…

百度排名优化工具 V3.0 正式版

介绍 百度排名优化工具正式版是款可以迅速提升网址百度搜索排名的工具。软件拥有智能计算关键词点击数&#xff0c;点击规则自动添加等。软件还提供了维护模式&#xff0c;自动维护您的关键词排名&#xff0c;让您的关键词排名更加稳定可靠。百度排名优化工具可以将你的网站在…

给Android系统瘦身,安卓优化大师:给系统瘦身

安卓优化大师是一款基于Android平台的系统优化软件&#xff0c;最新版本界面设计简单&#xff0c;功能全面&#xff0c;可以帮助Android手机用户给系统瘦身&#xff0c;优化手机性能。 程序名称&#xff1a;安卓优化大师 平台&#xff1a;Android 类型&#xff1a;系统优化 软件…

Windows优化大师7.96版下载

Windows优化大师提供了全面且有效而简便安全的系统检测、系统优化、系统清理、系统维护四大功能模块以及数个附加的工具软件。它能够有效地帮助用户了解自己的计算机软硬件信息&#xff1b;简化操作系统设置步骤&#xff1b;提升计算机运行效率&#xff1b;清理系统运行时产生的…

SEO优化工具-免费SEO优化工具下载-SEO优化工具大全中心

什么是SEO优化工具&#xff1f;SEO优化工具&#xff08;Seo tools&#xff09;能在搜索引擎优化过程中起到辅助的作用&#xff0c;如数据查询工具、网站排名工具、网站流量分析功能&#xff0c;站群管理工具等&#xff0c;用来提高每个SEO人员工作中的效率。 seo优化工具&#…

Android性能优化之APK优化,完整版开放下载

前言 移动研发火热不停&#xff0c;越来越多人开始学习 android 开发。但很多人感觉入门容易成长很难&#xff0c;对未来比较迷茫&#xff0c;不知道自己技能该怎么提升&#xff0c;到达下一阶段需要补充哪些内容。市面上也多是谈论知识图谱&#xff0c;缺少体系和成长节奏感&a…

win10优化大师v1.0去插件免费版

名称&#xff1a;win10优化大师v1.0去插件免费版 版本&#xff1a;1.0 软件大小&#xff1a;5.70MB 软件语言&#xff1a;中文简体 软件授权&#xff1a;免费版 应用平台&#xff1a;Win10 win10优化大师是一款面向Win10操作系统提供的优化软件&#xff0c;提供常用系统功能的…

Android性能优化工具

一、性能优化工具基础 1.1 概述 在Android开发中&#xff0c;开发者可通过"系统跟踪"观察Android设备的运行情况并生成跟踪报告&#xff0c;在此基础上进行分析优化。Android 平台提供了多种获取跟踪信息的工具&#xff1a; Android Studio CPU 性能剖析器Systrace…

PS 的常见抠图工具

PS 的常见抠图工具 1. 套索工具2. 多边形套索工具3. 磁性套索工具4. 对象套索工具5. 快速套索工具6. 魔棒工具7. 其他 1. 套索工具 能完成快速抠图, 缺点是不好控制. 2. 多边形套索工具 绘制多边形区域抠图, 缺点是不够圆滑, 返回上步是 Backspace 键. 3. 磁性套索工具 吸附边缘…

PS抠图的6种方法

1. 魔棒工具 用于去除单色背景色图片。 选中魔棒工具后&#xff0c;可以点击选中图片中的背景色进行选取&#xff0c;选中后可以去除背景。魔棒工具一般用来去除背景色为单调色的背景&#xff0c;比如背景是白色或者其他纯色之类的。 在选择时可以选择容差\连续&#xff1a; 连…