前言:
喜欢搞事情的朋友一定都知道手机上有各种各样的“插件”,这些“插件”有着近乎神奇的魔法。有的能让用户不看手机就能抢到红包;有的能不花钱就可以体验内购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、应用是否有反调试策略
![](https://img.haomeiwen.com/i7633163/69aa4501be4252a1.jpg)
网友评论