`

Xpose框架的入门学习

阅读更多

【关于Xpose】:

第一次接触到Xpose是在网络安全的课上,老师提出的期末考核,当时听到Xpose一脸懵逼,常年做Android竟然不知道这个,而且时间很仓促,只有2个星期准备,同时这两个星期包括了一个星期的考试周。做这样的系统首先要会JAVA,其次要对Android开发的流程比较熟悉,这样的挑战对我来说都是难度比较大的,更不要说是初次接触的同学们了,所以这里将自己初步学习过程记录下来,让同学们少走弯路,以最快的时间最高的效率初步搭建好自己包含Xpose框架的app。

=====================================================================================

【关于eclipse及初次安卓开发】:

建议大家直接去看我的分类博客“Android初步”,运行出自己第一个“Hello world”app就算成功,博客里面写文顺序是按照我学习的过程按时间顺序推进的,当年囫囵吞枣学了一遍,后来觉得基础没打好,于是有重新过了一遍基础,大三,大四基本上课就是在搞这个,自己写代码,运行,找bug没有问题以后写博客,其中也碰到了很多新手遇到的问题,所以大家可以相互借鉴

===================================================================================

                                                                言归正传

关于Xpose框架,框架对于我们Android开发人员来说,远远没有字面上意思来的“高大上”,简单粗暴的解决方式就是在网上下一个“.jar”然后在project里面丢到lib里面,对就是库,咱缺少那个库,下载下来丢进去,然后我们就可用用里面各种API接口了,省事方便。我觉得我大部分时候使用框架是因为自己"懒"。不过想起当年在“蓝杰”让我们手动实现队列的那个时光,自己实现才是真正了解原理的最佳途径,不过鉴于时间紧张,我们就简单粗暴的站在巨人的肩膀上编代码。

搭建:

新建一个Project,名字你随便,记得最好英文



 然后:去网上找框架,就是我们丢到lib里面的东东。


 【注意!】一定是lib而不是libslib自己新建一个文件夹

如果直接将jar包放置到了libs目录下,很可能会产生错 误“IllegalAccessError: Class ref in 
pre-verified class resolved to unexpected 
implementation”。 
估计Xposed作者在其框架内部也引用了BridgeApi,这样操作避免重复引用。

ee就是死在了这个上面然后上网找大牛的代码去看,看到“北漂周”周圣韬大神这句话,顿时觉得十分惭愧不愧是做安全方面的人,作为我们后湖出身的业界楷模,大家注意这里


 就是这个XposedBridgeApi-54就是这个啦。当然啦看了我的文章的人有福利,我会把我这个框架传上来。

下载下来以后直接拖到lib里面,然后再buid path一下+add to path,为什么要这样呢,因为是为了


这两个地方也会出现我们框架的身影,有人问那为什么那么麻烦呢,我直接拖进去,粘贴进去不就得了。答:“欢迎强迫症的孩子一个一个去拖”。

这就是ctr+A+C  和ctr+C(N次)的区别。别问我为什么知道,以前我也傻也是一个个拖进去的。

【配置】:

需要在Androidmanifest配置如下

 

 <meta-data

            android:name="xposedmodule"

            android:value="true" />

        <meta-data

            android:name="xposeddescription"

            android:value="Easy example which makes the status bar clock red and adds a smiley" />

        <meta-data

            android:name="xposedminversion"

            android:value="30" />

 这个是要加的代码:具体加在哪里呢:

看整体

 

 <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <meta-data

            android:name="xposedmodule"

            android:value="true" />

        <meta-data

            android:name="xposeddescription"

            android:value="Easy example which makes the status bar clock red and adds a smiley" />

        <meta-data

            android:name="xposedminversion"

            android:value="30" />
        <activity
            android:name="com.example.xposehook.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

 看到这里的同学最好不要问我AndroidManifest在哪里

在你的眼皮子底下,不在任何包里

【代码】:

src使我们放代码的地方

其中:

 MainActivity是自动生成的。第二个是我们用Xpose功能的地方。这里简单调用xpose框架来动态监测我们的app是否包含这个包名:

import de.robv.android.xposed.IXposedHookLoadPackage;

import de.robv.android.xposed.XC_MethodHook;
import de.robv.android.xposed.XC_MethodHook.MethodHookParam;
import de.robv.android.xposed.XposedBridge;
import de.robv.android.xposed.XposedHelpers;
import de.robv.android.xposed.callbacks.XC_LoadPackage.LoadPackageParam;

public class Main implements IXposedHookLoadPackage{

    @Override
    public void handleLoadPackage(final LoadPackageParam lpparam) throws Throwable {
        // TODO Auto-generated method stub
        if(!lpparam.packageName.equals("com.monkey.myxpose")){
            return;
        }
        
        XposedHelpers.findAndHookMethod("com.monkey.getcoin.MainActivity", lpparam.classLoader, "getCoin",new XC_MethodHook() {
            protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
                // TODO Auto-generated method stub
                //super.beforeHookedMethod(param);
                param.setResult(99999);
                XposedBridge.log("Loaded app: " + lpparam.packageName);
            }
        });
    }
    
}

 

 【非常重要】:上次忘记讲了,非常抱歉,我们做好这个模块以后,需要一个初始化申明,声明加载这个Android包里xposehook所在的class。



 在asset包里新建xposed_init   txt文本,注意名字一定是固定的就是上图那个不能随便改。

然后里面写入你的hook函数所在的class:

如下:

com.example.xposeee.Attacker

 

 

 我们可以看到头文件中Import导入了不少Xpose框架里面的东东,到这里说明你的包都导入成功了,能用了。

到现在一个初步的Android搭建好Xpose框架的app已经实现

虚拟机运行或者真机运行:

我们的app图标,图片字都可以换,这里就不教大家做个性化app了,毕竟“交差”要紧



 

 没做界面,现在基本框架搭建好,下一节课直接讲xpose是拿来干什么的,之所以刚开始不讲是因为希望大家搭好框架心里不慌,慢慢看原理,好吧其实真实原因是:“我也还不懂”

一起学习进步吧

 

下面我已经将XposedBridgeApi-54.zip 导入进来,大家自行下载解压。

如果有任何的问题:

请联系我

QQ邮箱:429899791@qq.com

加人请说明:iteye+问题

 

 

  • 大小: 11.1 KB
  • 大小: 4.1 KB
  • 大小: 6.8 KB
  • 大小: 6.2 KB
  • 大小: 14.5 KB
  • 大小: 4.8 KB
  • 大小: 2.2 KB
  • 大小: 2.9 KB
0
0
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics