Xposed快速hook关键点
0x01 导读
工作中,常常需要针对各种app进行快速代码定位,找到代码修改和调试各种功能,就不得不面对xposed来进行一系列快速定位关键代码的问题了。那么问题来了,如何快速找到代码呢?
这里值这针对代码在java层的进行分析,在so中的,目前作者是无能为力的。
0x02 众所周知
我们的一般做法就是通过界面定位到具体的Activity ,执行adb 命令 “adb shell dumpsys activity | findstr "mFocusedActivity"”
就可以快速找到我们当前需要hook页面的Activity功能块,然后通过,XposedHelpers的
findAndHookMethod方法来,监控方法。少量的工作没什么,但是如果代码量很多,很难看,就比较麻烦了。 所以这里介绍一种作者目前使用的,自仍未快速的方式。
0x03 推荐使用
1、安装apk后,可以得到app使用的dex文件。
2、然后解包dex文件得到jar文件。
3、通过xposed读取jar中的所有类,
4、然后hook,然后读取所有方法hook.
5、然后通过关键字,匹配参数,匹配返回值,快速得到操作日志。
注意:如果是多个dex,一样是可以的,多个jar。解压然后覆盖保存到一个里面,然后打包成jar就可以,jar就使用zip打包工具就可以,修改后缀就ok.,
dex文件一般都可以通过apk解压得到,然后用apktool工具得到jar文件,针对某些apk无法apktool解包的可以添加-r等操作,不处理资源文件就OK.
懒加载plugin如何操作呢? 找到不类呢?有一种情况,某些dex是专门存放插件,插件是进入到某些页面才会进行加载的,通过懒hook,进入某某页面,然后再进行hook操作,或者hook文件操作即可。
部分参考代码:
public static void hook_byJar(final XC_LoadPackage.LoadPackageParam loadPackageParam, String jarFile) throws Exception {
try {
//通过将给定路径名字符串转换为抽象路径名来创建一个新File实例
File f = new File(jarFile);
URL url1 = f.toURI().toURL();
URLClassLoader myClassLoader = new URLClassLoader(new URL[]{url1}, Thread.currentThread().getContextClassLoader()); //通过jarFile和JarEntry得到所有的类
JarFile jar = new JarFile(jarFile);
//返回zip文件条目的枚举
Enumeration<JarEntry> enumFiles = jar.entries();
JarEntry entry; //测试此枚举是否包含更多的元素
while (enumFiles.hasMoreElements()) {
entry = (JarEntry) enumFiles.nextElement();
if (entry.getName().indexOf("META-INF") < 0) {
String classFullName = entry.getName();
if (classFullName.indexOf(".class") < 0) {
classFullName = classFullName.substring(0, classFullName.length() - 1);
} else {
Map<String, Object> hashMap = new HashMap<String, Object>(); // 这里通过包名对部分类进行过滤,方式由于类不存在引起的错误。
hashMap.put("com/test/test/test/", new ArrayList<String>());
boolean isOkClass = false;
for (Map.Entry<String, Object> m : hashMap.entrySet()) {
String name = m.getKey();
ArrayList<String> list = (ArrayList<String>) m.getValue();
if (classFullName.startsWith(name)) {
isOkClass = true;
for (String str : list) {
if (classFullName.startsWith(str)) {
isOkClass = false;
}
} break;
}
} if (isOkClass) {
//去掉后缀.class
String className = classFullName.substring(0, classFullName.length() - 6).replace("/", ".");
// log(classFullName);
try {
final Class<?> myclass = myClassLoader.loadClass(className);
for (final Method method : myclass.getDeclaredMethods()) {
if (!Modifier.isAbstract(method.getModifiers())) {
XposedBridge.hookMethod(method, new XC_MethodHook() {
@Override
protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
String before_className = myclass.getName();
String methodName = param.method.getName(); super.beforeHookedMethod(param);
} @Override
protected void afterHookedMethod(MethodHookParam param) throws Throwable {
String before_className = myclass.getName();
String methodName = param.method.getName(); super.afterHookedMethod(param);
}
});
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
读取jarhook方法和类
0x04 其他方式
1、针对app使用的开源库进行了解然后方便hook注关键代码,因为开源代码都是开源的,不需要看app解包的混淆,羞涩的代码。
2、针对app作者,写入Log的内容进行hook,因为发布的app一般都是把其中的一个true或者false进行注释掉了,方法调用日志本身没有注释掉,所以可以针对写入的日志的地方进行处理。
Xposed快速hook关键点的更多相关文章
- 关于如何使用xposed来hook某支付软件
由于近期有业务上的需要,所以特地花时间去研究了一下如何使用hook技术.但是当我把xposed环境和程序编写完成时,突然发现手机上的某个支付软件无法使用了.这个时候我意识到,应该是该软件的安全机制在起 ...
- Xposed 框架 hook 简介 原理 案例 MD
Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...
- Xposed MultiDex Hook
使用Xposed Hook多DEX的应用时,Xposed会抛ClassNotFound的异常,原因是它只会在classes.dex查找类.以下官方不完美解决办法,参考 Github上的 #30 iss ...
- Xposed框架Hook Android应用的所有类方法打印Log日志
本文博客地址:https://blog.csdn.net/QQ1084283172/article/details/80954759 在进行Android程序的逆向分析的时候,经常需要Android程 ...
- 关于如何使用xposed来hook微信软件
安卓端 难点有两个 收款码的生成和到帐监听 需要源码加 2442982910
- Android Hook神器:XPosed入门与登陆劫持演示
前段时间写了一篇关于Cydia Substrate广告注入的文章,大家都直呼过瘾.但是,真正了解这一方面的同学应该知道,其实还有一个比Cydia Substrate更出名的工具:XPosed. 不是因 ...
- Xposed框架之函数Hook学习
作者:Fly2015 Xposed是Android下Java层的开源Hook框架类似的有cydiasubstrate框架而且据说cydiasubstrate框架能实现Android的Java层和Nat ...
- ART模式下基于Xposed Hook开发脱壳工具
本文博客地址:http://blog.csdn.net/qq1084283172/article/details/78092365 Dalvik模式下的Android加固技术已经很成熟了,Dalvik ...
- Android apk快速定位、灰色按钮克星--DroidSword
本文博客地址:https://blog.csdn.net/QQ1084283172/article/details/80994434 在进行Android应用程序的逆向分析时,经常需要对Android ...
随机推荐
- [国嵌攻略][149][Yaffs2文件系统应用]
嵌入式系统自启动 MTD技术通过把Nand FLash划分成bootloader分区,Linux kernel分区和file system分区来达到自启动的效果. 配置和编译内核 1.配置Linux内 ...
- [学习OpenCV攻略][007][缩小图片]
cvPryDown(输入图片,输出图片) 根据输出图片的大小,把输入图片进行压缩 cvPryUp(输入图片,输出图片) 根据输出图片的大小,把输入图片进行放大 #include "cv.h& ...
- setTimeout()方法,你真的懂吗?
今天在群里看到了一道经典的javascript题型,之前也遇到过,可是再次遇到时,还是做错,还是不理解,因此这里来做个笔记吧! 不说了,直接上代码吧 for(var i=1; i<=9; i++ ...
- Mysql优化方面的知识
Mysql优化方面的知识 第一方面:30种mysql优化sql语句查询的方法 1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避 ...
- C#如何释放已经加载的图片
使用Image.FromFile取磁盘上的图片时,这个方法会锁定图片文件,而且会导致内存占用增大, 有几种方法解决:一:将Image类转换成Bitmap类System.Drawing.Image im ...
- ASP.NET MVC5 中百度ueditor富文本编辑器的使用
随着网站信息发布内容越来越多,越来越重视美观,富文本编辑就是不可缺少的了,众多编辑器比较后我选了百度的ueditor富文本编辑器. 百度ueditor富文本编辑器分为两种一种是完全版的ueditor, ...
- javascript 类数组对象
原文:https://segmentfault.com/a/1190000000415572 定义: 拥有length属性,其他属性(索引)为非负整数(对象中的所有会被当做字符串来处理,这里你可以当做 ...
- 用MapViewOfFile处理大文件-内存不足
用MapViewOfFile处理大文件时,如果文件过大,如400M,则无法一次性映射入内存,否则会出现1132错误,即内存不足.原因可能为操作系统无法找到连续的内存.因此需要通过分页的方式,逐页将文件 ...
- AMS常见问题
1.安装完AMS是否就可以实现直播点播了? 答:是的,ams运行后,就可以提供各种协议的直播输出地址,和点播地址:不过一般情况下客户还得需要另外的Web系统来配合使用,来完成对前台用户界面的友好化 ...
- Java的NIO
1. 基本 概念 IO 是主存和外部设备 ( 硬盘.终端和网络等 ) 拷贝数据的过程. IO 是操作系统的底层功能实现,底层通过 I/O 指令进行完成. 所有语言运行时系统提供执行 I/O 较高级 ...