Dexposed

非侵入式运行期 AOP 框架
授权协议 Apache
开发语言 Java C/C++
所属分类 手机/移动开发、 手机开发包
软件类型 开源软件
地区 国产
投 递 者 法和安
操作系统 Android
开源组织 阿里巴巴
适用人群 未知
 软件概览

Dexposed 是阿里巴巴无线事业部第一个重量级 Andorid 开源软件,基于 ROOT 社区著名开源项目 Xposed 改造剥离了 ROOT 部分,演化为服务于所在应用自身的 AOP 框架。它支撑了阿里大部分 App 的在线分钟级客户端 bugfix 和线上调试能力。

Dexposed 的 AOP 是实现了纯非侵入式,没有任何注释处理器,weaver 或者字节码重写程序。Dexposed 的集成非常简单,就像加载一个 JNI 库一样,只需要在初始化的时候插入一行代码。

经典用例

  • 典型的 AOP 编程

  • 仪表化 (测试,性能监控等等)

  • 在线热修复(重要,关键,安全漏洞等等)

  • SDK hooking,更好的开发体验

Gradle 依赖:

native_dependencies {
    artifact 'com.taobao.dexposed:dexposed_l:0.2+:armeabi'
    artifact 'com.taobao.dexposed:dexposed:0.2+:armeabi'
}
dependencies {
    compile files('libs/dexposedbridge.jar')
}

初始化:

public class MyApplication extends Application {

    @Override public void onCreate() {        
        // Check whether current device is supported (also initialize Dexposed framework if not yet)
        if (DexposedBridge.canDexposed(this)) {
            // Use Dexposed to kick off AOP stuffs.
            ...
        }
    }
    ...
}

基础使用示例代码1:

 // Target class, method with parameter types, followed by the hook callback (XC_MethodHook).
    DexposedBridge.findAndHookMethod(Activity.class, "onCreate", Bundle.class, new XC_MethodHook() {

        // To be invoked before Activity.onCreate().
        @Override protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
            // "thisObject" keeps the reference to the instance of target class.
            Activity instance = (Activity) param.thisObject;

            // The array args include all the parameters.
            Bundle bundle = (Bundle) param.args[0];
            Intent intent = new Intent();
            // XposedHelpers provide useful utility methods.
            XposedHelpers.setObjectField(param.thisObject, "mIntent", intent);

            // Calling setResult() will bypass the original method body use the result as method return value directly.
            if (bundle.containsKey("return"))
                param.setResult(null);
        }

        // To be invoked after Activity.onCreate()
        @Override protected void afterHookedMethod(MethodHookParam param) throws Throwable {
            XposedHelpers.callMethod(param.thisObject, "sampleMethod", 2);
        }
    });

基础使用示例代码2:

    DexposedBridge.findAndHookMethod(Activity.class, "onCreate", Bundle.class, new XC_MethodReplacement() {

        @Override protected Object replaceHookedMethod(MethodHookParam param) throws Throwable {
            // Re-writing the method logic outside the original method context is a bit tricky but still viable.
            ...
        }

    });
  • package com.taobao.dexposed; import java.io.File; import java.lang.reflect.Field; import java.lang.reflect.Modifier; import com.taobao.android.dexposed.DexposedBridge; import com.taobao.android.dexp

  • What is it? Dexposed is a powerful yet non-invasive runtime AOP (Aspect-oriented Programming) framework for Android app development, based on the work of open-source Xposed framework project. The AOP

  • AndroLua开源项目:https://github.com/mkottman/AndroLua 阿里dexposed基于AOP思想:https://github.com/alibaba/dexposed 原理: https://blog.csdn.net/yueqian_scut/article/details/50939034 https://blog.csdn.net/hgfujffg/a

  • Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina.com 目录 目录 dexposed 基本实现原理简介 Dalvik 和 ART 虚拟机 加载 so 库的逻辑 findAndHookMethod 的执行过程 支持的版本 官方文档 集成 基本使用

  • dexposed是阿里巴巴在xposed框架上面开发的hotpatch一套框架 当然hotpatch的方式有很多,这里先介绍下dexposed原理 Demo中有个test函数, 在调用hook之前正常返回”11111”; 调用hook之后, 却返回”newTestMethod”, 被我们给修改了 public class Demo { String TAG = "===[hookdemo]

  • 在网上看到了阿里推出的一个android开源项目,名为Dexposed, 是一个Android平台下的无侵入运行期AOP框架。旨在解决像性能监控、在线热补丁等移动开发常见难题,典型使用场景为: AOP编程 插桩 (如测试、性能监控等) 在线热补丁 SDK hooking以提供更好的开发体验 它基于ROOT社区著名开源项目Xposed改造剥离了ROOT部分,演化为服务于所在应用自身的AOP框架,并在

 相关资料
  • 本文向大家介绍C++编写非侵入式接口,包括了C++编写非侵入式接口的使用技巧和注意事项,需要的朋友参考一下 终于写到c++的非侵入式接口了,兴奋,开心,失望,解脱,…… 。在搞了这么多的面向对象科普之后,本人也已经开始不耐烦,至此,不想做太多阐述。 虽然,很早就清楚怎么在c++下搞非侵入式接口,但是,整个框架代码,重构了十几次之后,才终于满意。支持给基本类型添加接口,好比int,char,cons

  • 问题内容: 好的,这是交易,我已经看到一些有关此问题的SO帖子,但是对我来说没有任何用处。 基本上,我有从局部视图中加载的选择下拉列表,我试图根据先前选择的下拉列表过滤每个后续下拉列表的内容。 如果仅将调用放在div容器中的部分视图中并加载页面,则从数据注释进行的验证就可以正常工作, 主要是Required属性 。 但是,如果我尝试通过AJAX加载与此处设置相同的部分,则必填验证无效,任何人都可以

  • 这些方法如下所示: 编辑 我尝试使用、和。 我曾尝试直接在上调用,但它也没有捕捉到这一点。

  • 思路 扫描木马工具:clamAV 官网:http://pkgs.repoforge.org/clamav/ CentOS 安装:yum install -y clamav* 启动 clamAV 服务:service clamd restart 更新病毒库:freshclam 扫描方法: 扫描 /etc 目录,并把扫描结果放在 /root 目录下:clamscan -r /etc --max-dir

  • 完成上一节的初次运行后,你肯定会发现一点:一旦你按下 Ctrl+C,停下标准输入输出,logstash 进程也就随之停止了。作为一个肯定要长期运行的程序,应该怎么处理呢? 本章节问题对于一个运维来说应该属于基础知识,鉴于 ELK 用户很多其实不是运维,添加这段内容。 办法有很多种,下面介绍四种最常用的办法: 标准的 service 方式 采用 RPM、DEB 发行包安装的读者,推荐采用这种方式。发

  • 我们可以使用各种方法/方法作为执行攻击的参考。 Web应用程序 - PenTesting方法 在开发攻击模型时可以考虑以下标准。 在以下列表中,OWASP是最活跃的,并且有许多贡献者。我们将重点关注OWASP技术,每个开发团队在设计Web应用程序之前都会考虑这些技术。 PTES - 渗透测试执行标准 OSSTMM - 开源安全测试方法手册 OWASP测试技术 - 开放式Web应用程序安全协议 OW