吾爱汇编

 找回密码
 立即注册

QQ登录

绑定QQ避免忘记帐号

查看: 1970|回复: 20

[安卓逆向图文] 8.1.2 Xposed Hook-上(第五十七课)

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

以下为图文内容:

8.1.2 Xposed Hook-上
0x01 Hook修改变量
在编写hook类的时候会去实现一个IXposedHookLoadPackage接口(加载应用程
序,即“ Android软件包”时获得通知), 重写了handleLoadPackage方法(加载应用程序时
将调用此方法),该方法有一个参数lpparam(有关该应用程序的信息), 这个方法向被实现
的模块提供更多关于运行环境上下文的信息。首先我们实验的app 是一款编写好的
XposedDemo,将其安装到模拟器上,打开运行后没有任何效果,如图所示:
fakename.png
使用jadx-gui反编译工具查看其代码,注意在一个Activity在启动的时候,都会在
onCreat()方法中执行setContentView(R.layout.activity_main)这行代码,来将指
定的资源xml文件加载到对应的activity中。
fakename.png
然后定位到res/layout/activity_main.xml,可以发现当我们点击button的时候会触
发myTest方法,回到MainActivity,跟进myTest()的Demo类。
fakename.png
fakename.png
fakename.png
经过分析test()方法可以发现,当我们点击按钮时会在日志中输出很多对应的日志信
息,其中包括静态变量staticInt = 100,注意静态全局变量hook的时候调用的是使用的
XposedHelpers.setStaticIntField() , 若是全局普通变量用
XposedHelpers.setIntField()。
fakename.png
fakename.png
我们再次运行app点击按钮,不过此次打开我们的ddms查看日志输出。
fakename.png
然后编写hook代码如下:
[Java] 纯文本查看 复制代码
package com.xposed;
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.LoadPackageParam;
import android.util.Log;
public class Hook implements IXposedHookLoadPackage {
public void handleLoadPackage(final LoadPackageParam lpparam) throws
Throwable {
Log.d("feichen", "hook..."); //日志输出方式一
XposedBridge.log("Loaded app: " + lpparam.packageName); //日志输出方
式二
if (lpparam.packageName.equals("com.feichen.xposeddemo")){
final Class clazz =
XposedHelpers.findClass("com.feichen.xposeddemo.Demo",lpparam.classLoad
er);
XposedHelpers.setStaticIntField(clazz,"staticInt",520);
}
}
}

将写好的xposed编译安装到xposed后,勾选上写好的xposed模块,并重启手机,然
后运行app,打开ddms,点击button按钮,查看ddms中的staticInt初始化值已经被我们
hook修改为520,如图:
fakename.png
然后hook 字符串变量的话使用
XposedHelpers.setStaticObjectField(clazz,"Tag","Lvmeng");这一条语句,具体的
效果这里不再演示,有兴趣的小伙伴下去可以自己尝试。
0x02 Hook普通方法
Hook普通方法使用的是XposedHelpers下的findAndHookMethod(类的字节码,
方法名,回调函数)方法(用于Hook当前类下的所有方法),它有一个重载函数接收四
个参数,
findAndHookMethod(类名全路径,类加载器,方法名,回调函数),其中回调函数除了
使用
XC_MethodHook()之外,还有XC_MethodReplacement()。对于有参数的函数需要带
上参数的字节码。在0x03的地方就是四个参数的findAndHookMethod。
因此,Hook普通方法的代码如下:
[Java] 纯文本查看 复制代码
XposedHelpers.findAndHookMethod(clazz, "test", new XC_MethodHook(){
public void beforeHookedMethod(MethodHookParam param){
Log.d("Lvmeng","Lvmeng===============before");
}p
ublic void afterHookedMethod(MethodHookParam param){
Log.d("Lvmeng","Lvmeng=============after");
}
});

其中beforeHookedMethod 会在调用原方法前执行,如果使用setResult则跳过原方法,
并返回setResult参数中的值。
afterHookedMethod 会在调用原方法后执行,setResult可改变返回值。
replaceHookedMethod 会完全替换原方法,即原方法不执行,且返回值可以直接
return,setResult不生效。
然后将写好的xposed编译安装到xposed后,勾选上写好的xposed模块,并重启手
机,然后运行app,打开ddms,点击button按钮,查看ddms中日志情况如下,可以发现
test()函数已经被成功hook,并且添加上两条日志信息
fakename.png
0x03 Hook获取参数与返回值
Hook获取参数是方法中要传入的参数,我们也是可以在beforeHookedMethod和
afterHookedMethod方法中获取我们的参数值,其hook代码如下:
[Java] 纯文本查看 复制代码
XposedHelpers.findAndHookMethod(clazz, "publicFunc",String.class, new
XC_MethodHook(){
public void beforeHookedMethod(MethodHookParam param){
Log.d("Lvmeng","Lvmeng===============before");
Log.d("before-获取参数", ""+param.args[0]);
}p
ublic void afterHookedMethod(MethodHookParam param){
Log.d("Lvmeng","Lvmeng=============after");
Log.d("after-获取参数", ""+param.args[0]);
}
});

其中,我们hook的方法是publicFunc,查看代码可以发现该方法是接收参数的,如图所
示:
fakename.png
然后安装运行后的日志信息如下:
fakename.png
Hook获取返回值一般都是在afterHookedMethod方法中,Hook的代码如下:
public void afterHookedMethod(MethodHookParam param){
Log.d("Lvmeng", ""+param.getResult());
}
在这里不再进行演示获取返回值,有兴趣的小伙伴可以下去自行测试。
0x04 Hook构造函数
Hook构造函数可分为有参构造函数前、无参构造函数前、有参构造函数后和无参构
造函数后。这里Hook 构造函数使用的是XposedHelpers 下的
findAndHookConstructor,详细代码如下:
[Java] 纯文本查看 复制代码
XposedHelpers.findAndHookConstructor(clazz, new XC_MethodHook() {
public void beforeHookedMethod(MethodHookParam param) throws
Throwable {
Log.d("===================", "这是无参构造函数前");
}
public void afterHookedMethod(MethodHookParam param) throws
Throwable {
Log.d("===================", "这是无参构造函数后");
XposedHelpers.setIntField(param.thisObject, "publicInt", 20000000);
}
});
XposedHelpers.findAndHookConstructor(clazz, String.class, new
XC_MethodHook() {
public void beforeHookedMethod(MethodHookParam param) throws
Throwable {
Log.d("===================", "这是有参构造函数前");
param.args[0] = "= - =";
}
public void afterHookedMethod(MethodHookParam param) throws
Throwable {
Log.d("===================", "这是有参构造函数后");
}
});

然后安装运行后的Hook日志如下:
fakename.png

评分

参与人数 26HB +18 THX +14 收起 理由
再来壹瓶 + 1 [吾爱汇编论坛52HB.COM]-学破解防破解,知进攻懂防守!
消逝的过去 + 1
花盗睡鼠 + 2 + 1 [吾爱汇编论坛52HB.COM]-软件反汇编逆向分析,软件安全必不可少!
Jawon + 1
sjtkxy + 1 + 1
虚心学习 + 1 [吾爱汇编论坛52HB.COM]-软件反汇编逆向分析,软件安全必不可少!
一路走来不容易 + 1
Cerolluo + 1 [吾爱汇编论坛52HB.COM]-吃水不忘打井人,给个评分懂感恩!
459121520 + 1
行行行行行行 + 1
爱汇编爱汇编 + 1 [吾爱汇编论坛52HB.COM]-软件反汇编逆向分析,软件安全必不可少!
boot + 1
飞刀梦想 + 1
xgbnapsua + 2
akk1898 + 1 [吾爱汇编论坛52HB.COM]-学逆向防逆向,知进攻懂防守!
l278785481 + 1
bnjzzheng + 1 [吾爱汇编论坛52HB.COM]-学破解防破解,知进攻懂防守!
zxjzzh + 2 [吾爱汇编论坛52HB.COM]-学破解防破解,知进攻懂防守!
fengyuan0128 + 1
temp + 1 + 1
zyyujq + 1
hodada + 1 [吾爱汇编论坛52HB.COM]-软件反汇编逆向分析,软件安全必不可少!
549625751 + 1 [吾爱汇编论坛52HB.COM]-吃水不忘打井人,给个评分懂感恩!
hbyaojing + 1 [吾爱汇编论坛52HB.COM]-感谢楼主热心分享,小小评分不成敬意!
小菜虫 + 1 [吾爱汇编论坛52HB.COM]-感谢楼主热心分享,小小评分不成敬意!
霁幽 + 1

查看全部评分

吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
PbE35648 发表于 2022-6-5 11:27 | 显示全部楼层
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
小菜虫 发表于 2022-6-5 13:54 | 显示全部楼层

感谢楼主热心分享!
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
hodada 发表于 2022-6-6 11:26 | 显示全部楼层
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
陈沦 发表于 2022-6-6 19:20 | 显示全部楼层


感谢楼主
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
天使替我爱你 发表于 2022-6-6 22:15 | 显示全部楼层
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
头像被屏蔽
别管我了行 发表于 2022-6-7 01:53 | 显示全部楼层

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

提示: 作者被禁止或删除 内容自动屏蔽
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
凌夏随缘 发表于 2022-6-19 23:04 | 显示全部楼层

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

谢谢分享!!
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!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

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