6、XPOSED二、叉叉助手框架--用XPOSED实现
<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>
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.
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.class, newXC_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其他应用程序则把包名过滤的判断去掉,并动态解析应用程序的主启动类即可。
findAndHookMethod(TARGET_CLASS, param.classLoader, TARGET_FUNCTION, newXC_MethodHook(){...});
因为onCreate是有参数的,所以正确的调用方式是:
findAndHookMethod(TARGET_CLASS, param.classLoader, TARGET_FUNCTION, Bundle.class, newXC_MethodHook(){...});
6、XPOSED二、叉叉助手框架--用XPOSED实现相关推荐
- 4、叉叉助手逆向分析续集--模拟实现游戏插件框架--再扩展到脱壳机
这里以HOOK程序启动后调用天天星联盟为例,下面是2014年4月30日抠出来的天天星联盟插件APK代码: package com.xxAssistant.UI; import android.app. ...
- 3、叉叉助手逆向分析(下)
plugin/117/xxFknsg.apk --ui-name:com/xxAssistant/FknsgUI/xxMain --activity-name:com/babeltimes/main/ ...
- android 叉叉助手 弹幕原理
叉叉助手能实现从它的app打开另外的app,并实现弹幕,请问下这种弹幕效果是用的什么技术呢?
- 叉叉框架_叉/连接框架
叉叉框架 本文是我们名为Java Concurrency Essentials的学院课程的一部分. 在本课程中,您将深入探讨并发的魔力. 将向您介绍并发和并发代码的基础知识,并学习诸如原子性,同步和线 ...
- 二维叉乘求三角形面积_角形
二维叉乘求三角形面积 Today we will look into Angular Form elements. We are all familiar with HTML forms and it ...
- android每天定时打卡,钉钉定时打卡脚本下载|叉叉助手钉钉定时打卡插件安卓版下载 v4.3.1 - 跑跑车安卓网...
叉叉助手钉钉定时打卡插件是一个实用的工具,让用户自定义打卡的时间,无论是上班还是下班都能通过这个应用来自动打卡. 软件介绍 钉钉是中国领先的智能移动办公平台,由阿里巴巴集团开发,免费提供给所有企业,用 ...
- 2、叉叉助手逆向分析(上)
描述:主要讲解如何有条例地逆向分析出软件的主要逻辑. 工具:APKIDE,JD-GUI 方法:顺藤摸瓜,smali代码主要看invoke关键函数调用,定位到相应的类中看代码. 使用APKIDE反编译x ...
- 三维叉乘怎么算_圆锥曲线第十四节:二次点乘与二次叉乘
目录: 质点:圆锥曲线题目的三维矢量解法zhuanlan.zhihu.com 我们在第八节中已经涉及到了"二次点"和"二次线"(它们统称二次曲线)的概念,我们 ...
- 剑网3指尖江湖开局门派选TA最好 叉叉助手伴你快意江湖
万众期待的<剑网3:指尖江湖>将于6月12日上线!在国创武侠网游界,剑网三的大名可谓无人不知无人不晓.该作是西山居以端游IP研发的一款角色扮演类手游,有别于大部分角色扮演游戏的单人物多职业 ...
最新文章
- react select默认选项_reactjs – 如何为Picker提供默认的“Please select …”选项?
- 距离高效率学习CV算法我还有多远的距离?
- 4.1.9 OS之文件系统的层次结构
- 图论为什么这么难_图论是什么,为什么要关心?
- 计算领域的致敬与前行
- 机器学习速成课程 | 练习 | Google Development——编程练习:逻辑回归
- [cocos2dx]斗地主制作之洗牌算法
- linux系统编译时make出错,centos 编译安装cmake和常见过程错误解决办法(linux系统均适用,以爬坑。。)...
- 脚本基础(未完待续)
- 了凡四训——改变命运之学
- 视频直播系统源码,简单计时器
- shutdown配合at命令 实现定时关机,重启---
- win10启用长路径
- Button设置elevation阴影
- 超级文本编辑器Sublime Text3
- 国内计算机类核心期刊投稿交流——分享给后进小硕
- 解决UU加速器导致电脑不能正常睡眠(休眠)的问题
- 2022G3锅炉水处理考试100题模拟考试平台操作
- 基于RestTemplate的在线武器库
- c语言实现京东秒杀软件,python实现京东秒杀功能