首页
社区
课程
招聘
[分享]hook框架-xposed安装使用
2022-2-2 15:36 12942

[分享]hook框架-xposed安装使用

2022-2-2 15:36
12942

0x1 xposed简介

  1.介绍

 

由于frida和objection每次都需要我们注入到app来对程序进行修改,有了xposed hook框架,我们可以编写xposed模块,实现对app的永久修改。

0x2 xposed原理

  1.原理

 

所有的app都是通过zygote fork出来的,xposed通过替换zygote的进程文件app_process, 就实现了对所有app进程的控制。

0x3 xposed的使用

  1.安装XposedInstaller_3.1.5.apk

 

1)打开模拟器,安装XposedInstaller_3.1.5.apk,运行,提示xposed框架未安装。

 

 

2)去https://dl-xda.xposed.info/framework/下载SDK,我们看到上一步的图片中API是25,所以这里下载x86版本的sdk25。

 

 

3)adb push /sdcard/Android/data/de.robv.android.xposed.installer/cache/downloads/framework,但是后面两个目录默认没有,需要我们手动创建一下。

1
2
3
4
5
6
7
8
mount -o rw,remount /
cd /sdcard/Android/data/de.robv.android.xposed.installer/cache
mkdir downloads
cd downloads
mkdir framework
 
C:\Users\LENOVO\Desktop>adb push xposed-v89-sdk25-x86.zip /sdcard/Android/data/de.robv.android.xposed.installer/cache/downloads/framework
xposed-v89-sdk25-x86.zip: 1 file pushe...d. 27.3 MB/s (5206379 bytes in 0.182s)

4)如图所示,重启xposed,然后进行勾选,出现了安装/更新,右键instanll安装,然后会出现读取root权限的提示,这里选择允许,永久记住选择。

 

 

5)重启模拟器,显示已激活。

 

 

  2.找到需要hook的函数

 

  3.编写hook模块

0x4 实战

  1.安装看雪KCTF-xposed.apk文件,打开,有签名校验。

 

 

  2.还是通过Androidkiller反编译,找到函数入口点com.kanxue.xposed.MainActivity,然后找到签名类,找到函数.method public setRealCer(Ljava/lang/String;)V。

 

  3.先去下载Android studio,之前下载过sdk,这里就不用再下载了,找到bin目录下idea.properties文件,末尾加一句disable.android.first.run=true,表示首次启动不检测sdk,进入软件后,依次指定jdk,sdk安装目录,下载必须的组件后就可以正常使用了。
https://www.androiddevtools.cn/

 

  4.新建一个空白Android项目(java语言),切换到protect file,然后为模块编写做准备:

 

1)第一步:修改build.gradle文件添加依赖(打开app/build.gradle文件,找到dependencies在里面添加,添加完后右上边点一下sync now同步一下,会自动下载一些依赖包)

1
2
compileOnly 'de.robv.android.xposed:api:82'
compileOnly 'de.robv.android.xposed:api:82:sources'

 

2)第二步:修改app/src/main/andoirmanifest.xml文件 在aplication中添加以下属性

1
2
3
4
5
6
7
8
9
<meta-data
    android:name="xposedmodule"  //xposed模块
    android:value="true" ///值为true,当我们安装xposed框架的时候就会认为这是一个xposed模块。
<meta-data
    android:name="xposeddescription"  //关于这个xposed模块的描述
    android:value="description" ///这个值我们可以自己改
<meta-data
    android:name="xposedminversion"  //要求的最低版本,这里默认就好了
    android:value="82" />

 

3)第三步:新建hook类

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import de.robv.android.xposed.IXposedHookLoadPackage;
import de.robv.android.xposed.XC_MethodHook;
import de.robv.android.xposed.XposedBridge;
import de.robv.android.xposed.XposedHelpers;
import de.robv.android.xposed.callbacks.XC_LoadPackage;
 
//MyHook类名可以修改,但一定要和新建的类名一致
public class MyHook implements IXposedHookLoadPackage {
 
    public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) throws Throwable {
        if(lpparam.packageName.equals("包名")) {
            XposedHelpers.findAndHookMethod("类名", lpparam.classLoader,"函数名", new XC_MethodHook() {
                @Override
                protected void afterHookedMethod(MethodHookParam param)
                        throws Throwable {
 
 
                    Boolean result = true;//默认返回true
                    param.setResult(result);
                }
            });
        };
    }
}

将上面代码中的包名、类名、函数名替换成我们要hook的包名com.kanxue.xposed、类名com.kanxue.xposed.SignCheck、函数名check,默认返回值result是true,可以根据实际情况修改。

 

4)第四步:修改入口类
在main下新建assets目录,在assetss目录下新建xposed_init文件,添加入口类 com.example.hooksig.MyHook 根据实际情况添加入口类

 

 

  5.准备工作完成,就可以点击build,build apk,生成apk文件,报错。

1
2
> Could not resolve all files for configuration ':app:debugCompileClasspath'.
   > Could not find de.robv.android.xposed:api:82.

  6.经过查询,依赖的第三方仓库已经改成了这个域名 api.xposed.info,修改全局的settings.gradle文件,然后重新点build apk,生成apk文件。

1
2
3
4
5
6
7
8
allprojects {
    repositories {
        google()
        mavenCentral()
        // 添加此库
        maven { url "https://api.xposed.info/" }
    }
}

  7.安装生成的apk模块,提示已安装,未激活,打开xposed框架,左上角点开,点模块,勾选激活,然后重启模拟器。

 

 

  8.打开目标apk,发现签名校验已经绕过去了,还有root检测。

 

 

  9.使用前面的方法,找到root检测的类和函数,继续修改hook代码:

 

 

  10.使用前面的方法,找到flag判断的类和函数,继续修改hook代码:

 

0x5 总结

  1.按照步骤来,生成apk一直报错,刚开始看到文章说要用本地的jar包,可是网上xposed:api:82.jar包都是收费的,最后找了一个54版本的jar,虽然成功编译了,但是达不到hook效果,一直没hook成功。

 

  2.最后又看到说修改全局build.gradle文件,添加第三方依赖库,还是报错,说是要修改settings.gradle文件,最后终于成功了。


[培训]二进制漏洞攻防(第3期);满10人开班;模糊测试与工具使用二次开发;网络协议漏洞挖掘;Linux内核漏洞挖掘与利用;AOSP漏洞挖掘与利用;代码审计。

收藏
点赞4
打赏
分享
最新回复 (3)
雪    币: 234
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
和风起 2022-2-7 16:03
2
0
问一下,看雪KCTF-xposed.apk文件在哪下载?
雪    币: 1269
活跃值: (3092)
能力值: ( LV2,RANK:15 )
在线值:
发帖
回帖
粉丝
小菜鸟一枚 2022-2-7 16:37
3
0
和风起 问一下,看雪KCTF-xposed.apk文件在哪下载?
https://www.kanxue.com/book-section_list-96.htm 这门课程
雪    币: 234
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
和风起 2022-2-7 21:46
4
0
啊,这,我想找个apk练练,这怎么推上课程了,,,,
游客
登录 | 注册 方可回帖
返回