Android逆向|Xposed Hook(中)

admin 2022年5月4日20:42:27移动安全评论22 views3249字阅读10分49秒阅读模式

本篇是《Android逆向入门教程》的第八章第1.3节,具体课程详情可点击下方图片查看:

Android逆向|Xposed Hook(中)

每一章节详细内容及实验材料可通过加入底部免费的【Android逆向成长计划】星球获得!


声明:所有实验含部分虚构,纯属技术练习,未对真实环境造成任何影响。也请勿将相关技术用于非法操作,否则责任自负。


0x01 Hook复杂参数

在我们Hook的时候经常会遇到一些复杂类型的参数,如map、二维数组、自定义类型和集合等参数,这个时候我们应该如何传入我们的参数列表的字节码?本小节将介绍几种方法来传入复杂参数的字节码。

在这里我们还是以上一次案例为例

Android逆向|Xposed Hook(中)

我们这次要Hook的函数为complexParameterFunc(String,String,Map,ArrayList),其中的参数有复杂类型参数,那我们最常规的一种hook参数列表的方式为”类型.class”。代码如下:

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 {if (lpparam.packageName.equals("com.feichen.xposeddemo")){final Class clazz = XposedHelpers.findClass("com.feichen.xposeddemo.Demo",lpparam.classLoader);XposedHelpers.findAndHookMethod(clazz,//Hook参数列表方式一:类型.class"complexParameterFunc",String.class,String[][].class,Map.class,ArrayList.class,new XC_MethodHook(){public void beforeHookedMethod(MethodHookParam param){Log.d("Lvmeng","Lvmeng===============before");Log.d("before-获取参数", ""+param.args[0]);}public void afterHookedMethod(MethodHookParam param){Log.d("Lvmeng","Lvmeng=============after");Log.d("after-获取参数", ""+param.args[0]);Log.d("Lvmeng", ""+param.getResult());}});}}}

然后运行效果如下:

Android逆向|Xposed Hook(中)

通过日志输出可以发现我们已经成功hook到complexParameterFunc的参数。


0x02 Hook自定义参数

对于一些自定义类型的参数,很显然类型.class是不可取的,那么我们介绍另外一种方式,即该方法所在的全路径,还是以complexParameterFunc为例。

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 {if (lpparam.packageName.equals("com.feichen.xposeddemo")){final Class clazz = XposedHelpers.findClass("com.feichen.xposeddemo.Demo",lpparam.classLoader);XposedHelpers.findAndHookMethod(clazz,//Hook参数列表方式二:该方法所在的全路径"complexParameterFunc","java.lang.String","[[Ljava.lang.String;",“java.util.Map",“java.util.ArrayList”,new XC_MethodHook(){public void beforeHookedMethod(MethodHookParam param){Log.d("Lvmeng","Lvmeng===============before");Log.d("before-获取参数", ""+param.args[0]);}public void afterHookedMethod(MethodHookParam param){Log.d("Lvmeng","Lvmeng=============after");Log.d("after-获取参数", ""+param.args[0]);Log.d("Lvmeng", ""+param.getResult());}});}}}

然后运行截图如下:

Android逆向|Xposed Hook(中)

通过日志输出可以发现我们已经成功hook到complexParameterFunc的参数。

另外Hook参数列表即是获取列表的字节码,因此还有两种获取方式,均已获取字符串列表为例,一种是:

XposedHelpers.findClass("java.lang.String",lpparam.classLoader),

另一种为反射获取:

Class.forName("java.lang.String"),

其中反射函数forName有重载,一个是一个参数的,一个是三个参数的,其中三个参数的,可以指明classLoader,而我们一般可以选择三个参数的指明我们选取的类加载器。



团队公开知识库链接:

https://www.yuque.com/books/share/f7515884-c39f-4d2b-ab15-55921c8205b8?# 《WhITECat公开知识积累》密码:kstn

知识星球:

Android逆向|Xposed Hook(中)

Android逆向|Xposed Hook(中)

往期经典


Android逆向入门成长计划【免费知识星球+微信交流群】

《从入门到秃头之PWN蛇皮走位》

漏洞挖掘|条件竞争在漏洞挖掘中的妙用

漏洞笔记|记一次与XXE漏洞的爱恨纠缠

移动安全-APP渗透进阶之AppCan本地文件解密

内网渗透之从信息收集到横向独家姿势总结-linux篇

HVV前奏|最新版AWVS&Nessus破解及批量脚本分享

Android抓包总结-HTTPS单向认证&双向认证突破

图形验证码绕过新姿势之深度学习与burp结合


Android逆向|Xposed Hook(中)

扫描二维码 |关注我们


原文始发于微信公众号(WhITECat安全团队):Android逆向|Xposed Hook(中)

特别标注: 本站(CN-SEC.COM)所有文章仅供技术研究,若将其信息做其他用途,由用户承担全部法律及连带责任,本站不承担任何法律及连带责任,请遵守中华人民共和国安全法.
  • 我的微信
  • 微信扫一扫
  • weinxin
  • 我的微信公众号
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年5月4日20:42:27
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                  Android逆向|Xposed Hook(中) http://cn-sec.com/archives/962048.html

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: