美文网首页移动端测试
移动app安全测试 - 客户端篇(二)防篡改及反调试

移动app安全测试 - 客户端篇(二)防篡改及反调试

作者: h080294 | 来源:发表于2020-06-16 16:39 被阅读0次

前言:

喜欢搞事情的朋友一定都知道手机上有各种各样的“插件”,这些“插件”有着近乎神奇的魔法。有的能让用户不看手机就能抢到红包;有的能不花钱就可以体验内购VIP服务;也有的会植入恶意代码,悄悄上传通讯录或锁机等等。

通过反编译得到应用的源代码后,逆向人员就可以根据自己的需要进行代码的调试及修改了。例如,将所有购买的失败的回调都修改成success来达到破解内购的功能;也可能是仅仅打开log开关,用来一窥内部日志等等。

本篇主要还是基于目前的Android系统做分析,其中的一些点也适用于iOS。

1、“静态”篡改应用

所谓“静态”篡改应用,就是指修改了原应用的代码、资源文件,然后经过二次打包重新生成了新的应用安装包。

为了增加安全性,一些应用会利用自身的签名信息对应用做一层防护,目的就是为了防止应用被二次打包。目前签名校验一般有以下几种方案:

第一种:本地防护 -> 签名不一致直接退出应用
第二种:将签名信息携带请求参数中参与加密,服务端进行校验
第三种:应用加固

1.1 本地防护

本地防护有多种方式,可以添加的校验的位置也非常多,但即便这样,仍然不能对逆向者造成太多的困扰。

例如用系统方法获取签名信息校验,就很不安全。在kstools或者xx管理器类似的软件中,都有实现去签名校验的功能。简单来说,它们的签名校验使用动态代理PackageManagerService接口生成的对象替换系统原PMS服务。这还只是java层的,增强版中更是Hook了Native层标准函数库里的open函数以及对Java层的各种IO类进行了继承重写,然后使用反射替换系统的IO。没有经过特殊处理的应用,即便代码中添加了签名校验也无济于事。

虽然针对这些工具,也有一些对抗策略,[原创]对AndroidInlineHook的一些研究以及对抗策略。但是理论上,只要本地存在校验,就有被过滤掉的风险。

除了利用系统方法获取签名校验,还可以对dex文件进行校验或者其他文件信息的校验。

1.2 签名信息携带在请求参数中加密

对于非法篡改应用,防护是一种思路,如何识别应用是否被篡改也是一种对抗思路。将签名信息隐藏在加密请求中,就是这样一种方式。

初级破解者通常会忽略掉一些细节方面的问题,例如请求参数中一些看起来正常又不起眼的字段,例如header中某一项。服务端可以利用请求中的签名信息来进行校验,直接返回错误码,或者识别特征后进入风控流程。

1.3 应用加固

应用加固对于体量不大的小公司来说是一个不错的选择。市面上有很多家做应用加固的服务商,大多都提供了一揽子的安全策略,能够解决签名校验、防二次打包等等安全问题。

2、防hook

除了静态修改应用代码之外,还有插件、调试等手段干扰应用的正常执行。同时,市面上还存在着大量的hook框架,有Xposed、CydiaSubstrator、Frida、VirtualXposed、太极、Magisk等等,并且无一例外的都非常强大。

最为大众熟知的微信自动抢红包功能,就有一部分是基于Xposed框架开发出来的。通过干扰甚至改变程序的执行流程,破解者们可以实现各种“实用”功能,但很不幸,这些技术通常都利用在了黑灰产上。

每种Hook框架都有自己的特征,针对这些特征,开发人员就可以有针对性的进行检测。

3、反调试

反调试作为一种攻防策略,并不能完全阻止逆向行为,其目的在于不断的提高逆向难度。一段经过ollvm的代码,在没有经过反混淆之前,根本无法做静态分析。此时加上反调试策略,可以让动态调试的过程变得极端恶心。

下面只是简答的列举一些常用的反调试策略。

3.1 调式端口检测

例如,IDA的默认调试端口为23946。读取/proc/net/tcp,若发现则说明正在被IDA调试。

3.2 调试进程名称检测

查找一些调试器的进程名称,像android_server、gdb_server等等

3.3 父进程名称检测

一些逆向者会把动态库单独拿出来进行调试,这是检测父进程的名称就会发现和正常启动apk的名称是不一致的。

3.4 系统自带调试检测函数

dalvik和art模式下,都有相应的函数和变量值。

3.5 ptrace检测

原理是每个进程同时刻只能被1个调试进程ptrace主动ptrace本进程。

3.6 时间反调试

正常情况下,一段代码的运行时间都是很短暂的,但是像单步骤调试的过程中,这段代码总体的运行时间会明显的长很多。

看雪上有大佬全面的做了总结了,可以移步原文进行学习,[原创]【SO壳】17种安卓native反调试收集

4、安全性测试

基于这些防hook和反调试的策略,可以对应用进行以下方式的安全性测试。

1、应用是否允许被调试
2、应用是否添加了签名校验等校验方式
3、应用是否有检测Hook的能力
4、应用是否有反调试策略

扫描二维码获取更多内容

相关文章

  • 移动app安全测试 - 客户端篇(二)防篡改及反调试

    前言: 喜欢搞事情的朋友一定都知道手机上有各种各样的“插件”,这些“插件”有着近乎神奇的魔法。有的能让用户不看手机...

  • 移动端测试知识

    移动端测试:指对移动应用进行的测试,即实体的特性满足需求的程度分类:app功能测试、app自动化测试、app安全测...

  • 每日安全资讯(2020.03.21)

    手机APP客户端安全性测试相关本文测试流程仅为个人的思路想法。本文会以这个APP为出发点、也会拓扑出一些其他的移动...

  • 每日安全资讯(2020.03.23)

    手机APP客户端安全性测试相关本文测试流程仅为个人的思路想法。本文会以这个APP为出发点、也会拓扑出一些其他的移动...

  • 移动APP漏洞自动化检测平台建设

    前言:本文是《移动APP客户端安全笔记》系列原创文章中的第一篇,主要讲的是企业移动APP自动化漏洞检测平台建设,移...

  • 移动APP漏洞自动化检测平台建设【转】

    前言:本文是《移动APP客户端安全笔记》系列原创文章中的第一篇,主要讲的是企业移动APP自动化漏洞检测平台建设,移...

  • Android客户端安全测试内容

    一般在App客户端发布之前,公司除了会进行业务测试之外,如公司建有安全团队的话,会在发布之前进行对App客户端及服...

  • App安全

    移动端App安全主要涉及客户端本身数据安全,客户端到服务端网络传输的安全,客户端本身安全又包括代码安全和数据存储安...

  • iOS App的几种安全防范

    iOS App安全防范总结: 1.防止抓包篡改数据 2.防止反编译 3.阻止动态调试 4.防止二次打包 关键检测:...

  • 移动应用抓包调试利器Charles

    一、Charles是什么? 二、为什么是Charles? 为什么要用抓包工具?大家在平常移动App调试测试中是如何...

网友评论

    本文标题:移动app安全测试 - 客户端篇(二)防篡改及反调试

    本文链接:https://www.haomeiwen.com/subject/okpcxktx.html