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文件操作即可。

部分参考代码:

  1. public static void hook_byJar(final XC_LoadPackage.LoadPackageParam loadPackageParam, String jarFile) throws Exception {
  2. try {
  3. //通过将给定路径名字符串转换为抽象路径名来创建一个新File实例
  4. File f = new File(jarFile);
  5. URL url1 = f.toURI().toURL();
  6. URLClassLoader myClassLoader = new URLClassLoader(new URL[]{url1}, Thread.currentThread().getContextClassLoader());
  7.  
  8. //通过jarFile和JarEntry得到所有的类
  9. JarFile jar = new JarFile(jarFile);
  10. //返回zip文件条目的枚举
  11. Enumeration<JarEntry> enumFiles = jar.entries();
  12. JarEntry entry;
  13.  
  14. //测试此枚举是否包含更多的元素
  15. while (enumFiles.hasMoreElements()) {
  16. entry = (JarEntry) enumFiles.nextElement();
  17. if (entry.getName().indexOf("META-INF") < 0) {
  18. String classFullName = entry.getName();
  19. if (classFullName.indexOf(".class") < 0) {
  20. classFullName = classFullName.substring(0, classFullName.length() - 1);
  21. } else {
  22. Map<String, Object> hashMap = new HashMap<String, Object>();
  23.  
  24. // 这里通过包名对部分类进行过滤,方式由于类不存在引起的错误。
  25. hashMap.put("com/test/test/test/", new ArrayList<String>());
  26. boolean isOkClass = false;
  27. for (Map.Entry<String, Object> m : hashMap.entrySet()) {
  28. String name = m.getKey();
  29. ArrayList<String> list = (ArrayList<String>) m.getValue();
  30. if (classFullName.startsWith(name)) {
  31. isOkClass = true;
  32. for (String str : list) {
  33. if (classFullName.startsWith(str)) {
  34. isOkClass = false;
  35. }
  36. }
  37.  
  38. break;
  39. }
  40. }
  41.  
  42. if (isOkClass) {
  43. //去掉后缀.class
  44. String className = classFullName.substring(0, classFullName.length() - 6).replace("/", ".");
  45. // log(classFullName);
  46. try {
  47. final Class<?> myclass = myClassLoader.loadClass(className);
  48. for (final Method method : myclass.getDeclaredMethods()) {
  49. if (!Modifier.isAbstract(method.getModifiers())) {
  50. XposedBridge.hookMethod(method, new XC_MethodHook() {
  51. @Override
  52. protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
  53. String before_className = myclass.getName();
  54. String methodName = param.method.getName();
  55.  
  56. super.beforeHookedMethod(param);
  57. }
  58.  
  59. @Override
  60. protected void afterHookedMethod(MethodHookParam param) throws Throwable {
  61. String before_className = myclass.getName();
  62. String methodName = param.method.getName();
  63.  
  64. super.afterHookedMethod(param);
  65. }
  66. });
  67. }
  68. }
  69. } catch (Exception e) {
  70. e.printStackTrace();
  71. }
  72. }
  73. }
  74. }
  75. }
  76. } catch (IOException e) {
  77. e.printStackTrace();
  78. }
  79. }

读取jarhook方法和类

0x04 其他方式

  1、针对app使用的开源库进行了解然后方便hook注关键代码,因为开源代码都是开源的,不需要看app解包的混淆,羞涩的代码。

  2、针对app作者,写入Log的内容进行hook,因为发布的app一般都是把其中的一个true或者false进行注释掉了,方法调用日志本身没有注释掉,所以可以针对写入的日志的地方进行处理。

Xposed快速hook关键点的更多相关文章

  1. 关于如何使用xposed来hook某支付软件

    由于近期有业务上的需要,所以特地花时间去研究了一下如何使用hook技术.但是当我把xposed环境和程序编写完成时,突然发现手机上的某个支付软件无法使用了.这个时候我意识到,应该是该软件的安全机制在起 ...

  2. Xposed 框架 hook 简介 原理 案例 MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

  3. Xposed MultiDex Hook

    使用Xposed Hook多DEX的应用时,Xposed会抛ClassNotFound的异常,原因是它只会在classes.dex查找类.以下官方不完美解决办法,参考 Github上的 #30 iss ...

  4. Xposed框架Hook Android应用的所有类方法打印Log日志

    本文博客地址:https://blog.csdn.net/QQ1084283172/article/details/80954759 在进行Android程序的逆向分析的时候,经常需要Android程 ...

  5. 关于如何使用xposed来hook微信软件

     安卓端  难点有两个  收款码的生成和到帐监听   需要源码加 2442982910

  6. Android Hook神器:XPosed入门与登陆劫持演示

    前段时间写了一篇关于Cydia Substrate广告注入的文章,大家都直呼过瘾.但是,真正了解这一方面的同学应该知道,其实还有一个比Cydia Substrate更出名的工具:XPosed. 不是因 ...

  7. Xposed框架之函数Hook学习

    作者:Fly2015 Xposed是Android下Java层的开源Hook框架类似的有cydiasubstrate框架而且据说cydiasubstrate框架能实现Android的Java层和Nat ...

  8. ART模式下基于Xposed Hook开发脱壳工具

    本文博客地址:http://blog.csdn.net/qq1084283172/article/details/78092365 Dalvik模式下的Android加固技术已经很成熟了,Dalvik ...

  9. Android apk快速定位、灰色按钮克星--DroidSword

    本文博客地址:https://blog.csdn.net/QQ1084283172/article/details/80994434 在进行Android应用程序的逆向分析时,经常需要对Android ...

随机推荐

  1. python 元组学习

    元组用tuple表示,用,分割开,和列表类似,但是没有排序修改等高级操作.简单地说就是终态的...... >>> tuple1 = (1,2,3)>>> type( ...

  2. 详解String类中的intern()方法

    我们用一个经典的例子来理解 package com.jvm.heap; public class MyTest { public static void main(String[] args) { S ...

  3. Spark_总结七_troubleshooting

    转载标明出处 http://www.cnblogs.com/haozhengfei/p/07ef4bda071b1519f404f26503fcba44.html Spark_总结七_troubles ...

  4. Yourphp是一款完全开源免费的.核心采用了Thinkphp框架

    Yourphp企业网站管理系统,是一款完全开源免费的PHP+MYSQL系统.核心采用了Thinkphp框架,同时也作为开源软件发布.集众多开源项目于一身的特点,使本系统从安全,效率,易用及可扩展性上更 ...

  5. dede被注入后台提示用户名不存在解决方法

    如果已经发现/data,有很长一个txt记事本,说明已经被其他人SQL注入了,或是已经有人进行尝试SQL注入了了. 记事儿本如:75252sdaswfdfsfq538ef2ad3556_safe.tx ...

  6. 在js中怎样获得checkbox里选中的多个值?

    https://zhidao.baidu.com/question/203897221.html 思路:利用name属性值获取checkbox对象,然后循环判断checked属性(true表示被选中, ...

  7. 常用SQL笔记总结

    DDL(data definition language)创建和管理表 1.创建表 1.直接创建 例如: create table emp( name varchar(20), salary int ...

  8. Docker 创建ubuntu ,ssh,vnc 可连接

    **************************************************************************************************** ...

  9. Ring3句柄表的枚举

    由于windows并没有给出枚举所有句柄所用到的API,要获得句柄,我们必须使用未公开的Native API才可以,使用如下函数: NTSTATUS WINAPI NtQuerySystemInfor ...

  10. Windows10下用Anaconda3安装TensorFlow教程

    这是我在自己的笔记本电脑上用Anaconda3安装TensorFlow的教程 1. 安装好Anaconda3版本 (1) 注:可以发现最新版本是Anaconda5了(没关系,下载就是了) (2) 注意 ...