吾爱汇编

 找回密码
 立即注册

QQ登录

绑定QQ避免忘记帐号

查看: 2675|回复: 20

[安卓逆向图文] 8.1.4 Xposed Hook-下(第五十九课)

  [复制链接]
playboy 发表于 2022-6-7 11:13 | 显示全部楼层 |阅读模式

以下为图文内容:
8.1.4 Xposed Hook-下
0x01 Hook替换函数与函数置空
我们Hook的时候,常用的回调函数是XC_MethodHook(),用来获取或者修改我
们Hook的参数列表。除了这个回调函数外,还有一个XC_MethodReplacement()函数,
用来替换要Hook的函数或者将Hook的函数置空。实现代码如下:
[Java] 纯文本查看 复制代码
package com.xposed;
import android.util.Log;
import de.robv.android.xposed.IXposedHookLoadPackage;
import de.robv.android.xposed.XC_MethodReplacement;
import de.robv.android.xposed.XposedHelpers;
import de.robv.android.xposed.callbacks.XC_LoadPackage.LoadPackageParam;
public class Hook implements IXposedHookLoadPackage {
public void handleLoadPackage(final LoadPackageParam lpparam) throws
Throwable {
if (lpparam.packageName.equals("com.feichen.xposeddemo")){
final Class<?> clazz =
XposedHelpers.findClass("com.feichen.xposeddemo.Demo",lpparam.classLoad
er);
XposedHelpers.findAndHookMethod(clazz,
"test",
new XC_MethodReplacement(){
@Override
protected Object replaceHookedMethod(MethodHookParam
param)
throws Throwable {
Log.d("====================",
"replaceHook");
return null;
}
});
}
}
}

日志输出效果图如下:
fakename.png
可以发现test()函数已经被我们成功的替换掉,同理当我们什么也不写只返回Null就相当
于将Hook的函数置空。
0x02 Hook内部类与匿名类
在Hook的时候,我们经常也会遇到一些内部类以及匿名内部类,我们还是以之前的
案例为例进行说明。
fakename.png
fakename.png
然后编写我们的Hook代码如下:
[Java] 纯文本查看 复制代码
package com.xposed;
import android.util.Log;
import de.robv.android.xposed.IXposedHookLoadPackage;
import de.robv.android.xposed.XC_MethodReplacement;
import de.robv.android.xposed.XposedHelpers;
import de.robv.android.xposed.callbacks.XC_LoadPackage.LoadPackageParam;
public class Hook implements IXposedHookLoadPackage {
public void handleLoadPackage(final LoadPackageParam lpparam) throws
Throwable {
if (lpparam.packageName.equals("com.feichen.xposeddemo")){
final Class<?> clazz =
XposedHelpers.findClass("com.feichen.xposeddemo.Demo$InnerClass",lppara
m.classLoader);
XposedHelpers.findAndHookMethod(clazz,
"innerFunc",
String.class,
new XC_MethodReplacement(){
@Override
protected Object replaceHookedMethod(MethodHookParam
param)
throws Throwable {
Log.d("====================", "我是被替换
的内部类");
return null;
}
});
final Class<?> clazz1 =
XposedHelpers.findClass("com.feichen.xposeddemo.Demo$1",lpparam.classL
oader);
XposedHelpers.findAndHookMethod(clazz1,
"eatFunc",
String.class,
new XC_MethodReplacement(){
@Override
protected Object
replaceHookedMethod(MethodHookParam param)
throws Throwable {
Log.d("====================", " 我
是被替换的匿名内部类");
return null;
}
});
}
}
}

Hook日志如下:
fakename.png
我们通过编写的Hook代码可以发现,Hook内部类的字节码为:类路径$类名
Hook匿名内部类的字节码为:类路径$1 类路径$2 类路径$3
0x03 Xposed主动调用
在Hook的时候,我们有时候也是需要对app内部的函数进行主动调用,其中主动调
用的函数为XposedHelpers.callMethod(), 他的第一个参数为类的实例即
clazz.newInstance(),第二个参数是方法名,第三个参数是参数列表,对于没有参数的
函数可省略。那我还是以上个案例为例,找到其中的一个未被调用的函数refl()
fakename.png
然后编写Hook代码如下:
[Java] 纯文本查看 复制代码
package com.xposed;
import android.util.Log;
import de.robv.android.xposed.IXposedHookLoadPackage;
import de.robv.android.xposed.XC_MethodReplacement;
import de.robv.android.xposed.XposedHelpers;
import de.robv.android.xposed.callbacks.XC_LoadPackage.LoadPackageParam;
public class Hook implements IXposedHookLoadPackage {
public void handleLoadPackage(final LoadPackageParam lpparam) throws
Throwable {
if (lpparam.packageName.equals("com.feichen.xposeddemo")){
final Class<?> clazz =
XposedHelpers.findClass("com.feichen.xposeddemo.Demo$InnerClass",lppara
m.classLoader);
XposedHelpers.findAndHookMethod(clazz,
"innerFunc",
String.class,
new XC_MethodReplacement(){
@Override
protected Object replaceHookedMethod(MethodHookParam
param)
throws Throwable {
Log.d("====================", "我是被替换
的内部类");
return null;
}
});
final Class<?> clazz1 =
XposedHelpers.findClass("com.feichen.xposeddemo.Demo$1",lpparam.classL
oader);
XposedHelpers.findAndHookMethod(clazz1,
"eatFunc",
String.class,
new XC_MethodReplacement(){
@Override
protected Object
replaceHookedMethod(MethodHookParam param)
throws Throwable {
Log.d("====================", " 我
是被替换的匿名内部类");
return null;
}
});
//主动调用
final Class<?> clazz2 =
XposedHelpers.findClass("com.feichen.xposeddemo.Demo",lpparam.classLoad
er);
XposedHelpers.callMethod(clazz2.newInstance(),"refl");
}
}
}

运行日志如下:
fakename.png
发现已经成功主动调用到该函数。


评分

参与人数 19HB +24 THX +6 收起 理由
消逝的过去 + 2
花盗睡鼠 + 2 + 1 [吾爱汇编论坛52HB.COM]-学破解防破解,知进攻懂防守!
虚心学习 + 1 [吾爱汇编论坛52HB.COM]-学破解防破解,知进攻懂防守!
逆君 + 6 + 1 [吾爱汇编论坛52HB.COM]-软件反汇编逆向分析,软件安全必不可少!
Jawon + 1
一路走来不容易 + 1
459121520 + 1
爱汇编爱汇编 + 1 [吾爱汇编论坛52HB.COM]-吃水不忘打井人,给个评分懂感恩!
风里去 + 1 [吾爱汇编论坛52HB.COM]-软件反汇编逆向分析,软件安全必不可少!
agan8888 + 1
Cerolluo + 1 [吾爱汇编论坛52HB.COM]-软件反汇编逆向分析,软件安全必不可少!
飞刀梦想 + 1
xgbnapsua + 2
zyyujq + 1
l278785481 + 1
三月十六 + 1
temp + 1
bnjzzheng + 1 [吾爱汇编论坛52HB.COM]-学破解防破解,知进攻懂防守!
zxjzzh + 2 [吾爱汇编论坛52HB.COM]-学破解防破解,知进攻懂防守!

查看全部评分

吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
头像被屏蔽
别管我了行 发表于 2022-6-11 01:50 | 显示全部楼层
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
头像被屏蔽
Wayne 发表于 2022-6-11 09:25 | 显示全部楼层

提示: 作者被禁止或删除 内容自动屏蔽
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
bnjzzheng 发表于 2022-6-11 10:54 | 显示全部楼层
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
天使替我爱你 发表于 2022-6-11 23:26 | 显示全部楼层

谢谢大佬分享
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
头像被屏蔽
Wayne 发表于 2022-6-12 02:51 | 显示全部楼层
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
头像被屏蔽
别管我了行 发表于 2022-6-16 01:04 | 显示全部楼层

提示: 作者被禁止或删除 内容自动屏蔽
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
天使替我爱你 发表于 2022-6-16 10:34 | 显示全部楼层

多谢大佬分享
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
zg2600 发表于 2022-6-20 13:03 | 显示全部楼层

[吾爱汇编论坛52HB.COM]-感谢楼主分享,支持一下!
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
男同在身边 发表于 2022-6-28 12:22 | 显示全部楼层

感谢分享!!!
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

警告:本站严惩灌水回复,尊重自己从尊重他人开始!

1层
2层
3层
4层
5层
6层
7层
8层
9层
10层

免责声明

吾爱汇编(www.52hb.com)所讨论的技术及相关工具仅限用于研究学习,皆在提高软件产品的安全性,严禁用于不良动机。任何个人、团体、组织不得将其用于非法目的,否则,一切后果自行承担。吾爱汇编不承担任何因为技术滥用所产生的连带责任。吾爱汇编内容源于网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除。如有侵权请邮件或微信与我们联系处理。

站长邮箱:SharkHeng@sina.com
站长QQ:1140549900


QQ|RSS|手机版|小黑屋|帮助|吾爱汇编 ( 京公网安备11011502005403号 , 京ICP备20003498号-6 )|网站地图

Powered by Discuz!

吾爱汇编 www.52hb.com

快速回复 返回顶部 返回列表