写在前面


这个系列本来是在公司的一个分享。内容比較多,所以就把这个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. Java RSA加密算法生成公钥和私钥

    原文:http://jingyan.baidu.com/article/6dad5075f33466a123e36ecb.html?qq-pf-to=pcqq.c2c 目前为止,RSA是应用最多的公钥 ...

  2. Android学习进阶路线导航线路(Android源码分享)

                                                                                                       转 ...

  3. PTC问答

    1.什么是PTC点击网站? 答:PTC点击网站是一类网赚网站,通过点击广告来获取收益.当然,单纯通过点击广告获取的收益很少,甚至可以说可以忽略不计.如果单干不推广的话主要通过投资租赁下线来获得收益. ...

  4. propertychange方法

    1.html文件 <td> <input id="clientPhone" type="text" name="clientPhon ...

  5. websocket+golang聊天室

    原文地址: http://www.niu12.com/article/3 websocket+golang聊天室 main.go和index.html放在同一目录下 main.go package m ...

  6. 【好】strong-password-checker,我自己做出来的:)

    我自己做出来的,分了几种情况来考虑.(再后面有加了注释的版本) https://leetcode.com/problems/strong-password-checker/ // 加油! public ...

  7. ISP图像调试工程师——自动对焦(熟悉3A算法)

    https://wenku.baidu.com/view/40ec4a14fc4ffe473368ab96.html

  8. 【云计算】Docker build解决父镜像层级关系过多问题:Cannot create container with more than 127 parents

    docker export 8a6e92c71a77 > malakas.tzr.gz cat malakas.tzr.gz|docker import - /nscloud/malakas:1 ...

  9. Appium九宫格滑动解锁

    1.适配各种机型,首先获取整个解锁元素的坐标 2.代码实现 WebElement lockPattern = driver.findElement(By.id("com.android.se ...

  10. 使用LNMP常见问题解答

    使用LNMP常见问题解答 一.LNMP的安装过程详解,注:绿色文字为注释,实际使用过程中没有. ##先要下载,并根据不同系统进行安装: wget -c http://soft.vpser.net/ln ...