珠峰逆向-xposed-001-超级详细版本

该文章配合珠峰逆向的xposed-001视频一起参考学习。

这个版本是超级详细版本,按照这个方法,绝对是可以一击致命的入门的,大家尽可放心。

1.什么是xposed

框架是一款开源框架,其功能是可以在不修改APK的情况下影响程序运行(修改系统)的框架服务,基于它可以制作出许多功能强大的模块,且在功能不冲突的情况下同时运作。 其实简单的说,xposed就是一个能够劫持底层应用进程,如果了解切面编程算法的话,它的作用非常像aop框架,提供切面,和修改切点前后的逻辑。

2.准备资料

  1. xposed installer 百度网盘地址:
    android 5.1 对应的xposed地址 链接:https://pan.baidu.com/s/1_9sCUlxqGjYuX1FgqpPFlQ 密码:8gmf
    android 4.4 对应的xposed地址 链接:https://pan.baidu.com/s/1d-z6SQU2V-7–oH9rORZ9w 密码:sgkh
  2. xposed-bridge54.jar 百度网盘地址: 链接:https://pan.baidu.com/s/1H69Jh9xNnd4ODkwFbRgW2A 密码:3f9x
  3. root真机 或者 夜神模拟器 雷电模拟器 等 这个大家自备
  4. idea开发工具 笔者认为这个比 android studio好用 官网地址:https://www.jetbrains.com/idea/

3.开始干活

  1. 新建Android工程 如图
    选择Android 工程,选择Empty Activity
    2.点击next,输入项目信息
    1. 选择Android 5.1 这个大家根据自己手机或者模拟器的系统来选择
    3.点击finish 看到项目启动画面
    点击set sdk 这里的sdk指的是 java的sdk,选择jdk1.8
    项目完成后展开项目结构如图
    到这个地方恭喜你,你已经完成了自己写一个android apk的任务,不过它还不是一个xposed模块,没有关系,跟着我的思路走。

  2. 打开雷电模拟器 安装xposed installer.apk 对应版本 ,讲 xposed installer apk拖入雷电模拟器中,打开如图 在这里插入图片描述
    点击确定,这个异常的情况是新手经常碰到的, Could not load available ZIP files. Pull down to try again.
    碰到这样子的问题不要慌,一般情况下是因为网络问题,切换下wifi或者 连上手机热点,这个问题就能够解决,如果还不行,就换一个模拟器试试,总之根本原因是网络原因。
    新手经常碰到的一个问题
    正常情况下,会出点一个install 按钮,点击install,然后等待下载,这个下载会略微有点慢,点在成功后,会自动安装,这个时候点击允许root,然后重启模拟器,这个时候xposed installer就算是安装成功了,笔者换了逍遥模拟器之后就好了,如图
    安装成功之后的正常状态

  3. 这个时候我们来试一下刚才我们创建的apk,点击 idea中的 这个按钮
    在这里插入图片描述
    会出现这个情况
    我们会发现此时并没有连接的设备,如果是手机的话 ,打开开发者模拟,信任设备后,在这个地方会出现,模拟器的话还需要执行一个adb命令
    执行adb命令的目的就是为了 让模拟器作为一个设备和pc端连接通,能够被pc识别,具体 命令是:
    adb connect 127.0.0.1:xxxxx 这个地方xxxx表示端口,可以参考我的这个文章: https://blog.csdn.net/neruda1991/article/details/106343759
    我们执行下命令
    adb connect 127.0.0.1:21503
    如图已经连接成功
    这些都是容易出错的地方,如果新手出现了问题,不要慌,反复的进行操作,一定可以搞定的。有问题的话私信笔者留下qq号和问题,符合条件的可以加入我们的珠峰逆向交流群进行沟通
    我们再次点击 debug按钮,如图
    这个时候就会出现连接的设备
    大家会奇怪,为什么是这个手机品牌啊,我的是模拟器啊,不要慌,大家可以打开模拟器的设置,如图
    在这里插入图片描述
    这个地方就是模拟器模拟器的手机品牌,选择这个手机,点击ok
    稍等片刻之后,我们写的第一个apk就会安装到模拟器中
    第一个apk安装成功
    Demo1
    如果大家在安装的过程中出现问题,大概率就是gradle出了问题,碰到问题不要慌,直接私信作者,留下qq和问题,符合条件的拉你进我们的珠峰逆向交流群。

终于 把apk安装成功了,xposed的内容才刚刚开始,不过只要按照我的步骤来,就一定不会有问题。

首先将四大要素,就是如何让一个普通的apk变身成一个xposed的module
大家要谨记着四点,我先列出来,如果大家碰到了自己写的apk没有被xposed识别成模块的话,那么就来看着四点对照下。
1. 虽然android工程中自带了libs文件夹,但是但是但是 我们要做的是 在app下新建一个 lib文件夹,,放入 XposedBridgeApi-54.jar,然后点击这个jar,右键选择 Add as library
2. 在 src/main 文件夹下 新建 assets文件夹,然后再该文件夹中新建 xposed_init文件 该文件中写的是 hook主类的全类名
3. 修改AndroidManifest.xml 修改内容参考后文模板
4. 记住 记住 是在 app里边的 build.gradle文件中 项目依赖

这四点虽然有点模糊,但是是一个检查点,我们详细的开始讲如何做
第一步截图:
在这里插入图片描述
在这里插入图片描述
点击 ok 确定 如图
ok 第一步完成了
第二步 我们先把空白的文件搞出来,如图
在这里插入图片描述
第三步

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
          package="com.zhufeng.demo1">

    <application
            android:allowBackup="true"
            android:icon="@mipmap/ic_launcher"
            android:label="@string/app_name"
            android:roundIcon="@mipmap/ic_launcher_round"
            android:supportsRtl="true"
            android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>

                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
        </activity>
        <meta-data
                android:name="xposedmodule"
                android:value="true"/>
        <meta-data
                android:name="xposeddescription"
                android:value="我的第一个xposed模块"/>
        <meta-data
                android:name="xposedminversion"
                android:value="54"/>
    </application>

    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
    <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.INTERNET" />

</manifest>

第四步
如图
compile group: ‘com.alibaba’, name: ‘fastjson’, version: ‘1.2.62’
compileOnly fileTree(includes: [’*.jar’], dir: ‘lib’)
之所以要添加alibaba的fatsjon是为了 引入一个json组件,方便后边使用,个人习惯,大家也可以引入别的json组件
好了 现在四个步骤基本完成了。我们就是今天的重头戏,就是如何让xposed工作起来。后边的代码,涉及到了 Android开发的一些东东,有些新手可能对Android开发不是很了解,不过没关系,下边的代码,粘贴复制就好。我们想实现的效果就是 让xposed去修改一个方法的返回值。

  1. 我们在MainActivity 代码修改如下:
package com.zhufeng.demo1;

import android.util.Log;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;

public class MainActivity extends AppCompatActivity {
    
    

    private static final String TAG = "firstXposed";

    @Override
    protected void onCreate ( Bundle savedInstanceState ) {
    
    
        super.onCreate( savedInstanceState );
        setContentView( R.layout.activity_main );

        String sign = getSign();

        TextView textView = this.findViewById(R.id.hello);
        textView.setText( sign );

    }

    public String getSign(){
    
    
        return "这是我的第一个xposed";
    }
    
}

同时我们点击 这个地方,跳转到Android的页面中去

然后在原来的代码中,只需要增加一行即可
android:id="@+id/hello"
在这里插入图片描述
大家要加油啊,离胜利不远了
其实到了这个地方,我们先来看一下努力的成功,我们这个时候重新点击 debug按钮,对的就是这个地方,
在这里插入图片描述
安装成功后,如果如果界面和上图一直,并且在Android的下拉菜单中有了这个东东,就说明我们已经把这个apk变成了一个 xposed的插件

在这里插入图片描述
好的,大概讲下上述代码的逻辑,就是说,我们通过getSign方法来获取sign的值,然后显示在这个 hello这个 组件中,原来的Hello world已经我们覆盖了。那么我们需要做的事情是什么呢,就是去书写一个xposed 的hook类,来见证我们的效果,废话不多说直接上图上代码
我们新建一个HookEntry类 ,并且注意注意 要在assets下的xposed_init文件中,填写这个HookEntry的全类名
上图:
在这里插入图片描述

package com.zhufeng.demo1;

import android.util.Log;
import de.robv.android.xposed.IXposedHookLoadPackage;
import de.robv.android.xposed.XC_MethodHook;
import de.robv.android.xposed.XposedHelpers;
import de.robv.android.xposed.callbacks.XC_LoadPackage;

/**
 * 这个类是否生效  别忘了  在 assets文件夹下 的xposed_init文件中写上全类名
 */
public class HookEntry implements IXposedHookLoadPackage {
    
    

    private static final String TAG = "firstXposed";

    @Override
    public void handleLoadPackage ( XC_LoadPackage.LoadPackageParam loadPackageParam ) throws Throwable {
    
    


        Log.i( TAG , "packageName is" + loadPackageParam.packageName );


        //这个名字从哪里来的,去AndroidManifest.xml上边找package
        //这个表示apk的包名
        if(loadPackageParam.packageName.equals("com.zhufeng.demo1")){
    
    
            String hookClassName = "com.zhufeng.demo1.MainActivity";//你想去hook的目标类的全雷鸣
            Class<?> hookClass = loadPackageParam.classLoader.loadClass( hookClassName );

            XposedHelpers.findAndHookMethod( hookClass , "getSign" , new XC_MethodHook() {
    
    
                @Override
                protected void beforeHookedMethod ( MethodHookParam param ) throws Throwable {
    
    
                    super.beforeHookedMethod( param );
                }

                @Override
                protected void afterHookedMethod ( MethodHookParam param ) throws Throwable {
    
    
                    super.afterHookedMethod( param );
                    
                    param.setResult( "哈哈 我终于成功了~~~" );
                }
            } );
            
        }

        


    }
}

好的 到这里 我们 重新来安装下apk,老规矩,点击debug按钮,安装,这里我就不用截图了吧
我们点击激活并重启
激活并重启
这个地方 有些模拟器比较傻乎乎的,所以需要我们自己打开xposed,然后再模块中勾选我们刚才写的那个模块,然后回到主界面,选择重启或者软重启均可
在这里插入图片描述
在这里插入图片描述
不过我一般碰到的情况都是点击这个就卡住,所以我就直接关掉重启没简单粗暴
重启成功后 ,打开我们写的Demo1 apk,舒服的东东终于来了

在这里插入图片描述
此处应该有掌声,笔者在写这个文章的时候,几乎是一气呵成,因为已经鼓捣了很多遍,各种坑都踩过。也深知在逆向这条路上,会碰到各种各自的拦路虎,不过没有关系,结伴同行,一起打怪,有任何问题都可以私信留下qq和问题给我。

大家关心的源代码问题,我这边会放到我们的珠峰逆向群中,符合条件的小伙伴可以私信我入群。不过各位也可以根据我这个文章,自己成功的搞定,如果你也成功了,一定要回来给文章留个言或者收藏下哈~ 感谢各位,这个是我们珠峰逆向xposed的001课程
我们的002课程将教大家如何 手写一个 Android的 注入式的API框架,这个技术如果大家懂的话,就是我们可以 主动的去调用 hook的app中的某个方法,从来实现我们想要的东东~~ 对于第二节课感兴趣的小伙伴,也可以私信给我
好的 我们下一节课再见~

猜你喜欢

转载自blog.csdn.net/neruda1991/article/details/106351552
今日推荐