针对 Python
编程语言的新功能提议之一是希望为运行时添加“透明度”,并让安全和审计工具查看
Python 何时可能运行潜在危险的操作。

澳门新葡萄京官网注册,对于未进行保护的Android应用,有很多方法和思路对其进行逆向分析和攻击。使用一些基本的方法,就可以打破对应用安全非常重要的机密性和完整性,实现获取其内部代码、数据,修改其代码逻辑和机制等操作。这篇文章主要介绍一些基本的应用逆向和分析方法,演示Android应用的代码机密性和完整性是如何被破坏,进而被应用攻击者所用的。

利用Xposed框架编写模块实现登录劫持

在当前的形式下,Python 不允许安全工具查看运行时正在执行的操作。
除非这些操作之一产生可能引起警报的特定错误,否则安全和审计工具就会视而不见,攻击者可能正在使用
Python 在系统上执行恶意操作。

 

用到的环境:

  • 一台已经root的Android手机
  • AndroidStudio
  • Xposed框架APK:http://repo.xposed.info/module/de.robv.android.xposed.installer
  • Xposed对应API:http://forum.xda-developers.com/xposed/xposed-api-changelog-developer-news-t2714067

澳门新葡萄京官网注册 1

一、Dalvik层源码逆向

在dalvik层代码的分析中,(一般情况下,对于未进行防护的应用)在Dalvik层,我们只关心classes.dex的逆向分析。

 

classes.dex是APK运行时的代码,是由源代码编译成的可以在dalvik上运行的代码。Dalvik虚拟机类似java虚拟机,所以可以用类似java的class文件的反编译方法,反编译classes.dex为java代码。对于未被保护的应用,可以用此方法还原出大部分代码。

 

整个过程中,涉及的代码形式如下:

·
1.dex文件,APK的可执行文件。

·
2.smali文件,Dalvik VM内部执行的代码。

·
3.jar文件和java文件,根据dex文件转换成的java代码文件.。

 

澳门新葡萄京官网注册 2

 

用到的工具介绍:

·
1.smali/baksmali :dex可执行文件向smali字节码文件互相转换的工具,转换的过程不丢失信息。

·
2.dex2jar:dex文件转化成java的jar文件的工具。因为Dalvik虚拟机和Java虚拟机的差异,转换无法做到一一对应,会有信息丢失和代码的错误。(该工具是整个源码逆向中非常有意义的一步 )。

·
3.jd/jd-gui:java的jar文件反编译工具。

·
4.APK改之理(ApkIDE):Windows平台下一个集成了上述工具的有GUI的平台。

 

最终生成的java源码形式如图。此时Dalvik层源码的逆向已经完成,可以对应用进行进一步的准源码级别的分析。

澳门新葡萄京官网注册 3

 

Xposed的使用:

  • Xposed可以在不修改APK的情况下对应用的运行结果产生影响,是一款比较常用的Android
    Hook工具。
  • 首先安装Xposed框架对应APK文件到已经root的手机中,安装完成后打开Xposed如下图所示:

澳门新葡萄京官网注册 4

安装好的Xposed框架

  • 接着点击“安装/更新”。注意:安装Xposed存在手机变砖的风险,如果你不明白什么是变砖,也不知道如何解决此问题,请慎重。
  • 这样Xposed框架就在手机中安装完成了,但是这仅仅是一个框架,我们需要下载或者自行编写功能模块。

PEP-551 为 Python 提出了两个新的 API

但在 Python Enhancement Proposal 551(PEP-551)中,Python 核心开发人员
Steve Dower 已经提出了两个新的 API,这些 API 将使安全工具能够在 Python
执行潜在危险操作时进行检测。

第一个是 Audit Hook API,它可以引发关于某些类型的 Python
操作的警告消息。

“这些操作通常在 Python
运行时或标准库的深处,比如动态代码编译,模块导入,DNS
解析或使用某些模块,如 ctypes,”Dower 说。

安全或审计工具可能会使用这些消息作为可疑事件的警告标志,并在真正造成危害之前标记或阻止
Python 进程继续。

第二种,验证 Open Hook API,这是是一种让 Python
运行时允许执行或篡改哪些文件的机制。 道尔解释道:

大多数操作系统都有一种机制来区分可以执行的文件和不可执行的文件。
例如,这可能是权限字段中的执行位,或者是文件内容的验证散列,以检测潜在的代码篡改。
这些是防止执行未被批准用于给定环境的数据或代码的重要安全机制。
目前,Python 在启动脚本或导入模块时无法与这些集成。

二、Dalvik层代码篡改

Dalvik层的代码篡改主要发生在smali文件上。反编译出的java代码虽然易读,但已经丢失了部分信息,同时可能存在若干错误,基本上没办法再编译回可执行文件。同时dex二进制文件不具备可读性。所以一般情况下,只能在smali中的代码上进行修改,重新打包生成APK。

 

代码层的篡改,可以修改应用的逻辑流程,插入恶意代码、绕过关键的安全流程(注册、验证、付款),打印敏感数据等。篡改代码、重打包技术一般应用在破解软件的注册验证机制(AD
block破解注册,海卓破广告VIP,MIUI收费主题破解),修改游戏的规则(微信飞机大战破解),应用的敏感API调用的监控(APIMonitor,通过Android重打包加固APK拦截软件行为)。

 

Dalvik层代码篡改的使用的一个比较著名的例子是:APIMonitor。

APIMonitor的工作原理是,反编译apk文件,遍历smali代码,搜索配置文件中配置的需要监控的Api,如果找到一个Api的调用,则分析其参数,然后调用droidbox包空间下对应的类的静态函数。这些静态函数实现都是解析参数,打印输出log信息。处理完毕后,重新编译生成apk。

 

编写测试应用

  • 我们要模拟一个登陆劫持,下面给出一个模拟登录的APP,界面如图:

澳门新葡萄京官网注册 5

登录失败

澳门新葡萄京官网注册 6

登录成功

  • 下面附上测试应用关键登陆验证代码:

澳门新葡萄京官网注册 7

登录验证.png

  • 测试应用的包名为:’com.example.administrator.logintest’

Python 的性能影响可以忽略不计

道尔去年8月份提出了 PEP-551。 早期的测试表明,添加这两个 API
所带来的性能影响可以忽略不计,“绝大多数基准测试显示速度在 1.05
倍之间”的结果。

最初的计划是让 PEP-551 搭载 Python 3.7,并计划于 2018 年 6
月中旬发布,但根据下个月发布的新功能列表,该提案没有进行最终削减。
但这并不意味着 PEP-551 不会在未来版本的 Python 中提供。

原文:BleepingComputer 
编译:开源中国

三、Dalvik层代码的Hook

samli代码的篡改需要重新打包,新的包的签名和文件校验都和原有的包不同,可以被应用内的完整性检查模块识别,进而限制进一步的操作。解决这个问题的一个方法是,可以通过把自定义代码注入到应用的进程空间,实时的代码hook,不修改代码,实现对应用的代码逻辑的修改。

可以实现上述功能的的框架工具是xposed,和cyida
substrate。xposed应用相对广泛。xposed的原理可以参考之前分享的文档《Xposed原理及实现》。

 

Xposed的应用比较有名的两个例子分别是

1.Zjdroid,通过hook系统挂载dex文件的函数,自动化脱掉大部分android的加密壳。

2.Xprivicy,通过hook大部分隐私函数的调用,监控或者阻断应用对隐私API的调用。

Dalvik层代码的hook会在第三篇文章中详细介绍。

 

编写Hook模块

  • 使用AndroidStudio新建一个Android工程,可以没有Activity
  • 找到AndroidMainfest文件,添加如下几个标签:

澳门新葡萄京官网注册 8

添加标签.png

  • 其中xposedminversion是API的最小版本,这里我们使用的版本为54
  • 将API导入工程:

澳门新葡萄京官网注册 9

导入jar包.png

  • 注意不要放在libs里,新建一个lib文件夹粘贴进去,然后add library
  • 修改build.gradle,把compile改为provided:

澳门新葡萄京官网注册 10

gradle.png

  • 新建一个类,继承
    IXposedHookLoadPackage,Hook的关键步骤在此,下面直接上代码:

澳门新葡萄京官网注册 11

Hook.png

  • 这里有两个比较关键的方法:handleLoadPackage获取包加载时候的回调并拿到其对应的classLoader;findAndHookMethod对指定类的方法进行Hook。

四、本地.so文件的分析

本地.so文件一般提供敏感函数的封装。对于未被保护的.so文件,可以通过IDA进行静态分析和动态挂载调试。so文件的分析会在第四篇文章中详细介绍。

 

编译并安装模块

  • Build APK后使用adb install XXXX.apk 命令将模块APK安装到手机中:

澳门新葡萄京官网注册 12

InstallHookMoudle.png

  • 手机上的Xposed框架检测的模块安装:

澳门新葡萄京官网注册 13

检测到模块

  • 激活模块,重启手机:

澳门新葡萄京官网注册 14

激活模块

  • 打开模拟登陆应用,进行登录操作,在Xposed的日志中查看劫持到的信息:

澳门新葡萄京官网注册 15

查看劫持到的信息

五、浅谈Android应用保护系列文章

Acknowledge

  • 感谢《Android安全技术揭秘与防范》这本书和其作者 周圣韬
  • Hook的关键在于对目标应用的逆向,找到关键方法
  • 写的比较粗略,如果疑问欢迎留言交流

浅谈Android应用保护(零):出发点和背景


作者:纳池@阿里移动安全,更多安全类技术文章,请点击阿里聚安全博客