很多人一开始接触移动安全不知道要做什么,该怎么做。下定决心之后,看到一大堆陌生的术语、工具、操作望而生畏。写移动安全的连载blog的初衷就是为了刚入门的伙伴们少走点我走过的弯路,时间才是最宝贵的。不才才疏学浅,有什么不当的地方请各位师傅提出。

[TOC]

一、术语介绍

1. Xposed

Xposed Framework 为来自国外XDA论坛(forum.xda-developers.com)的rovo89自行开发的一个开源的安卓系统框架。

GitHub地址

能够让Android设备在没有修改源码的情况下修改系统中的API运行结果可实现对java层任意HOOK,比如修改IMEI、IMSI、ICCID这些全球唯一的身份标志。HOOK三方应用:微信、QQ、实现抢红包、自动回复。

Xposed框架的原理是修改系统文件,替换了/system/bin/app_process可执行文件,在启动Zygote时加载额外的jar文件(/data/data/de.robv.android.xposed.installer/bin/XposedBridge.jar),并执行一些初始化操作(执行XposedBridge的main方法)。然后我们就可以在这个Zygote上下文中进行某些hook操作。

There is a process that is called "Zygote". This is the heart of the Android runtime. Every application is started as a copy ("fork") of it. This process is started by an /init.rc script when the phone is booted. The process start is done with /system/bin/app_process, which loads the needed classes and invokes the initialization methods.

This is where Xposed comes into play. When you install the framework, an extended app_process executable is copied to /system/bin. This extended startup process adds an additional jar to the classpath and calls methods from there at certain places. For instance, just after the VM has been created, even before the main method of Zygote has been called. And inside that method, we are part of Zygote and can act in its context.

The jar is located at /data/data/de.robv.android.xposed.installer/bin/XposedBridge.jar and its source code can be found here. Looking at the class [XposedBridge] (https://github.com/rovo89/XposedBridge/blob/master/src/de/robv/android/xposed/XposedBridge.java), you can see the main method. This is what I wrote about above, this gets called in the very beginning of the process. Some initializations are done there and also the modules are loaded (I will come back to module loading later).

项目 说明
Xposed Xposed框架的native部分(主要是改性app_process二进制文件)
XposedInstaller Xposed框架的Android端本地管理,环境架构搭建,以及第三方module资源下载的工具。
XposedBridge Xposed向开发者提供的API与相应的工具类库

2. Zygote

Zygote本身是一个应用层的程序,和驱动、内核模块之类的没关系,可以认为是Android framework大家族的祖先。详见

在Android中,zygote是整个系统创建新进程的核心进程。zygote进程在内部会先启动Dalvik虚拟机,继而加载一些必要的系统资源和系统类,最后进入一种监听状态。

在之后的运作中,当其他系统模块(比如AMS)希望创建新进程时,只需向zygote进程发出请求,zygote进程监听到该请求后,会相应地fork出新的进程,于是这个新进程在初生之时,就先天具有了自己的Dalvik虚拟机以及系统资源。

zygote进程是由init进程启动起来,由init.rc 脚本中关于zygote的描述可知:zygote对应的可执行文件就是/system/bin/app_process,也就是说系统启动时会执行到这个可执行文件的main()函数里。

3. Hook技术

Hook 英文翻译过来就是「钩子」的意思,那我们在什么时候使用这个「钩子」呢?在 Android 操作系统中系统维护着自己的一套事件分发机制。应用程序,包括应用触发事件和后台逻辑处理,也是根据事件流程一步步地向下执行。而「钩子」的意思,就是在事件传送到终点前截获并监控事件的传输,像个钩子钩上事件一样,并且能够在钩上事件时,处理一些自己特定的事件。

Hook 的这个本领,使它能够将自身的代码「融入」被勾住(Hook)的程序的进程中,成为目标进程的一个部分。API Hook 技术是一种用于改变 API 执行结果的技术,能够将系统的 API 函数执行重定向。在 Android 系统中使用了沙箱机制,普通用户程序的进程空间都是独立的,程序的运行互不干扰。这就使我们希望通过一个程序改变其他程序的某些行为的想法不能直接实现,但是 Hook 的出现给我们开拓了解决此类问题的道路。当然,根据 Hook 对象与 Hook 后处理的事件方式不同,Hook 还分为不同的种类,比如消息 Hook、API Hook 等。

详见

4. 反射

JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制(注意关键词:运行状态)换句话说,Java程序可以加载一个运行时才得知名称的class,获悉其完整构造(但不包括methods定义),并生成其对象实体、或对其fields设值、或唤起其methods。

详见

二、环境准备

  1. 一部安卓机

    已经获得root权限,最好能刷安卓原生系统或者LineageOS,或者并开启开发者模式,usb调试选项打开.

  2. 安装虚拟机(可选)

    现在市场上主流的安卓模拟器,都很多广告,Android Studio的AVD模拟器又太卡。模拟器最大缺点是无法调试so文件,因为现在市场上主流的模拟器都是基于Intel/AMD架构的x86/x64模拟器,而不是ARM的,指令集有所不同。我暂时还没找到一款能调试so文件的模拟器(AS自带的模拟器倒是有ARM架构的系统,但是打开那个系统,都要几十分钟吧,不要说调试了,所以物理机才是王道啊!),有找到的师傅欢迎留言。推荐逍遥(画质高,清晰度好,流畅),夜神(用户多),海马、BlueStacks、天天不是广告多就是功能不全,接下来以逍遥模拟器安装为例(看到有个师傅一直搞安卓虚拟机, 于是我也想掺和帮帮忙, 费了不少功夫...移动安全玩下来的,都是爱折腾的大佬啊!)
    官方链接 百度云链接(密码:md0g)

    • 进入模拟器里的设置,连续多次点击"版本号",进入开发者模式,并打开"开发者选项":

    • 找到模拟器安装目录,能看到adb.exe
    • 打开powershell或cmd,到该目录下,运行adb.exe(如果系统环境的adb进不了,就用这个方法。原因是: adb.exe版本不一样. 或者可以用模拟器安装目录下的adb.exe替代环境变量目录下的adb.exe)
  3. 安装Xposed(用语Hook,写插件)

    XposedInstaller.apk(密码:u65c)

  4. 安装Android Studio(后续编写Xposed插件需用)

    官方下载:http://www.android-studio.org

  5. Xposed Framework(后面AS编写XP插件要用)

    XposedBridgeApi-20150213.jar(密码:9odw) 官网下载

    XposedMain.java(密码:aqg3)

  6. 安装IDA7.0(用于动态调试so文件或者apk)

    IDA_Pro_v7.0_and_Hex-RaysDecompiler(ARMx64,ARM,x64,x86).zip(密码:vuus)

  7. 安装AndroidKiller(用于反编译APK)

    AndroidKiller_v1.3.1.zip(密码:dl2k)

  8. 安装JEB2(用于反编译APK)

    jeb-2.2.7.201608151620_crack_qtfreet00.zip

  9. 安装ApkIDE(用于反编译APK)

    ApkIDE_v3.3.rar

  10. 额外推荐一个很基情的"绿色"网站:

    http://www.androiddevtools.cn

三、推荐

推荐链接

https://www.2cto.com/kf/201609/550043.html

https://www.csdn.net/article/2015-08-14/2825462

http://blog.csdn.net/niubitianping/article/details/52571438

推荐书籍

《移动应用安全》

链接:https://pan.baidu.com/s/1o9DEzrG (密码:55m4)

《linux二进制分析》

暂无扫描版,想往深的学,买实体书吧

《Android应用安全防护和逆向分析》

暂无扫描版,质量挺高的一本书,比较新颖,相信会成为经典之作

Android开发书籍推荐:从入门到精通系列学习路线书籍介绍

https://www.diycode.cc/wiki/androidbook

四、结语

写连载博客也是我的初次尝试,看看大家的热度再决定是否投入时间写下去,师傅们如果觉得写得不好,请提出来,我加以修缮。祝大家都能在自己的领域里有所

源链接

Hacking more

...