写在前面


这个系列本来是在公司的一个分享。内容比較多,所以就把这个PPT又一次组织整理成博客,希望对大家学习有所帮助。我会先以一个”短信拦截“作为样例,抛出问题,并提出了一种基于”注入“的技术方案达到提高拦截优先级,接着再重点解说注入的技术细节。

最后,我会跟大家分享一个我业余时间开发注入框架——AIM(Android IPC Manager)。

当然了,这个框架跟眼下的XPosed、CydiaStructe的側重点不太一样。


短信拦截


场景

假设某款安全支付类应用和一个未知木马安装在同一台手机,木马会截获全部的验证码短信。

问题

有什么办法能够保证安全支付类的应用能够比木马更优先截获到验证码短信呢?

解决方式

事实上这类优先级抢占问题,做短信功能开发的朋友,都应该比較清楚,由于老板都关注的就是这个了,呵呵。一般的可行方案例如以下:
  • 提高BroadcastReceiver的优先级;
  • 採用动态的方式注冊BroadcastReceiver;
  • 注冊时间要越早越好;
基于上述三点,我们的能够做例如以下优化:
  • 监听Android的开机广播事件BOOT_COMPLETED。提早注冊时间。
  • 启动后,开启一个Service。并在里面以动态的注冊BroadcastReceiver;
  • 注冊的优先级调整至最高——Integer.MAX_VALUE;
关键代码例如以下所看到的:
IntentFilter filter = new IntentFilter("android.provider.Telephony.SMS_RECEIVED");
filter.setPriority(Integer.MAX_VALUE);
registerReceiver(new SmsReceiver(), filter);

问题来了

通过上面这个方法。是能够解决部分问题了,但这样的方式全然没有技术含量。对处于技术第一线的黑客们根本不是问题。他们不但也採用了同样的技术,并且做得更好,在”注冊时间越早越好“这一点上,他们加入几个额外的触发点。分别例如以下:
  • WIFI_STATE_CHANED
  • CONNECTIVITY_CHANGE
  • ACCESS_NETWORK_STATE
  • ACCESS_WIFI_STATE
这几个系统事件。都比BOOT_COMPLETED触发得要早。所以木马当然能优先截获到短信了。

基于这样的对抗下,我们是否跟木马就仅仅有打成平手呢?是否有更优的解决方式?答复是肯定的。
促进科技发展最有效的方法就是战争。在这样的技术对抗中,相同也是最easy产生新的思想方案的。


基本思路

既然广播发送之后,我们有可能处于后次序。

那是否有办法,能够在广播发送之前。做一下顺序调整呢?我们知道,Android的广播发送,都是由ActivityManagerService(AMS)做路由转发的,所以AMS里肯定保存了各个BroadcastReceiver的信息以及次序,我们假设有办法能够进入到AMS里头,再通过一些反射的技巧,是否就能够在每次发送广播之前,调整广播的发送顺序呢?


这个就是我要跟大家分享的技术方案——通过注入实现短信的绝对优先拦截。技术的基本思路是这种,我们先注入到系统进程——system_process,然后截获AMS的broadcastIntent方法,加插我们的调整逻辑。

《二》里我会着重介绍注入的技术原理。然后通过一系列的DEMO解说这个方法所涉及到的技术点。


进击的Android注入术《一》的更多相关文章

  1. 进击的Android注入术《二》

    继续 在<一>里,我把基本思路描写叙述了一遍,接下为我们先从注入開始入手. 注入 分类 我们平时所说的代码注入,主要静态和动态两种方式 静态注入,针对是可运行文件,比方平时我们改动ELF, ...

  2. Android 注入详解

    Android下的注入的效果是类似于Windows下的dll注入,关于Windows下面的注入可以参考这篇文章Windows注入术.而Android一般处理器是arm架构,内核是基于linux,因此进 ...

  3. Spring 属性注入(二)BeanWrapper 结构

    Spring 属性注入(二)BeanWrapper 结构 Spring 系列目录(https://www.cnblogs.com/binarylei/p/10117436.html) BeanWrap ...

  4. Android注入完全剖析

    0 前沿 本文主要分析了一份实现Android注入的代码的技术细节,但是并不涉及ptrace相关的知识,所以读者如果不了解ptrace的话,最好先学习下ptrace原理再来阅读本文.首先,感谢源代码的 ...

  5. Android仿微信二维码扫描

    转载:http://blog.csdn.net/xiaanming/article/details/10163203 了解二维码这个东西还是从微信中,当时微信推出二维码扫描功能,自己感觉挺新颖的,从一 ...

  6. Android Fragment使用(二) 嵌套Fragments (Nested Fragments) 的使用及常见错误

    嵌套Fragment的使用及常见错误 嵌套Fragments (Nested Fragments), 是在Fragment内部又添加Fragment. 使用时, 主要要依靠宿主Fragment的 ge ...

  7. Android反编译(二)之反编译XML资源文件

    Android反编译(二) 之反编译XML资源文件 [目录] 1.工具 2.反编译步骤 3.重新编译APK 4.实例 5.装X技巧 6.学习总结 1.工具 1).反编译工具  apktool http ...

  8. 小白日记44:kali渗透测试之Web渗透-SqlMap自动注入(二)-sqlmap参数详解REQUEST

    Sqlmap自动注入(二) Request ################################################### #inurl:.php?id= 1. 数据段:--d ...

  9. Android进阶笔记06:Android 实现扫描二维码实现网页登录

    一. 扫描二维码登录的实现机制: 详细流程图: (1)PC端打开网页(显示出二维码),这时候会保存对应的randnumber(比如:12345678). (2)Android客户端扫码登录,Andro ...

随机推荐

  1. [Ubuntu Setup] Ubuntu 13.04 安装 ia32-libs

    http://stackoverflow.com/questions/23182765/how-to-install-ia32-libs-in-ubuntu-14-04-lts sudo -i cd ...

  2. osx的10款文本编辑器

    ) Eddie Eddie 是 Mac OS X 和 Gnome 下的一个程序员编辑器,灵感来自于 Macintosh Programmer’s Workshop, Eddie 包含很多强大的特性,而 ...

  3. BrowserSync-多浏览器测试工具

    阅读目录 自动刷新 介绍BrowserSync BrowserSync具体使用 BrowserSync配合gulp 自动刷新 自动刷新,顾名思义,就是不用我们去F5刷新.假设有一天我们写代码,只需要c ...

  4. humanoid ik unity 配件 animation的问题

    遇到这样一个问题 想给角色设置ik 以实现代码控制的 更为自然的 角色动作 比如角色头跟随点击转动 身体也有相应扭转 https://docs.unity3d.com/Manual/InverseKi ...

  5. Oracle imp关于fromuser 和 touser的用法

    fromuser就是把当前的dmp文件中的某一个用户下的数据取出.touser就是把现在dmp文件中的数据导入到目标库的指定user下.具体命令这样.exp userid=system/manager ...

  6. DevExpress 小计 GridControl 隔行换行

    摘自: http://www.cnblogs.com/yuerdongni/archive/2012/09/08/2676753.html 1. 如何解决单击记录整行选中的问题 View->Op ...

  7. hadoop运行报错Wrong FS: hdfs:/, expected: file:///

    内容源自:https://blog.csdn.net/u014470581/article/details/51480600 报错信息: Exception in thread "main& ...

  8. MVC工作原理

    MVC(Model-View-Controller,模型—视图—控制器模式)用于表示一种软件架构模式.它把软件系统分为三个基本部分:模型(Model),视图(View)和控制器(Controller) ...

  9. DirectX游戏开发——从一个小游戏開始

    本系列文章由birdlove1987编写,转载请注明出处. 文章链接: http://blog.csdn.net/zhurui_idea/article/details/26364129 写在前面:自 ...

  10. 使用Material Design 创建App翻译系列---列表和卡片集的创建

    上一篇是使用Material Design 创建App翻译系列--材料主题的使用(Using Material Theme),进入正题: 想要在应用里创建Material Design风格的复杂列表和 ...