Xposed hook技术学习笔记

最近做一个安卓apk的逆向,需要用到xposed 中的hook技术,所以便学习了一下,在此纪录一下。

demo:apk用的是非虫大神的一个demo例子:crackme02

首先需要在manifest中填写三段

 <!--添加标识-->
        <meta-data 
        android:name="xposedmodule" 
        android:value="true"/>
        
        <!--载入Hook模块之后显示的信息-->
    <meta-data
        android:name="xposeddescription"
        android:value="Xposed Demo For Hook !" />
   
    <!--规定jar包的版本信息-->
    <meta-data
        android:name="xposedminversion"
        android:value="30" />      //网上的例子中此处一般为54,这是支持的最低的xposedbridge.jar的版本,由于新版的xposed框架不是用好用,很多人还在用2.5.1版本,该版本框架用的是较低版本xposedbridge.jar.所以还是改一下吧。

接下来就是指定入口,在assets下创建一个名为xposed_init文件 输入apk包名及实现的类名。这里我们新建一个类名为:Module

下面开始实现这个类

首先指定需要hook的函数所在的activity,其次获取需要hook的函数名。废话不多说,如下所示。

if (lpparam.packageName.equals("com.droider.crackme0201")){
XposedBridge.log("Loaded App:" + lpparam.packageName);

//查找要Hook的函数
XposedHelpers.findAndHookMethod(
"com.droider.crackme0201.MainActivity", //被Hook函数所在的类com.droider.crackme0201.MainActivity
lpparam.classLoader, 
"checkSN",     //被Hook函数的名称checkSN
String.class, //被Hook函数的第一个参数String
String.class, //被Hook函数的第二个参数String
new XC_MethodHook(){
@Override
protected void beforeHookedMethod(MethodHookParam param)
throws Throwable {
// Hook函数之前执行的代码

//传入参数1
XposedBridge.log("beforeHookedMethod userName:" + param.args[0]); 
//传入参数2 
XposedBridge.log("beforeHookedMethod sn:" + param.args[1]);
//函数返回值
XposedBridge.log("beforeHookedMethod result:" + param.getResult());
}

@Override
protected void afterHookedMethod(MethodHookParam param)
throws Throwable {
// Hook函数之后执行的代码

//通过对checkSN函数的分析发现,只要修改函数的返回值即可实现注册的破解
param.setResult(true); //改变返回值

//传入参数1
XposedBridge.log("afterHookedMethod userName:" + param.args[0]); 
//传入参数2 
XposedBridge.log("afterHookedMethod sn:" + param.args[1]);
//函数返回值
XposedBridge.log("afterHookedMethod result:" + param.getResult());
}
});
}

主要是afterhookedmothod函数,这个函数实现了对函数返回值的更改,即将返回值改为了true。因为我们通过分析非虫大神的demo可知,checksn这个函数是对输入进行校验,如果正确则返回true。所以只要修改了返回值,则可以成功注册。

这是一种不改变apk源码的情况下而影响apk运行结果的方法,应该算是apk动态调试的一种重要方法,刚刚入了个门,以后有更多的见解还会继续分享。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值