小迪安全v2023学习笔记(八十五讲)—— APP攻防反证书反代理反模拟器绕过XP框架
文章目录
- 前记
- APP攻防——第八十五天
- 资产收集篇&反证书检验&XP框架&反代理VPN&数据转发&反模拟器
- APP - 防护分析-判断识别
- 防护手段
- 绕过手段
- APP - 某游戏-非HTTP/HTTPS流量包
- APP - 某社交-反模拟绕过
- APP - 某游戏-反证书检验绕过
- 绕过手段
- 代码剖析
- APP - 某社交-反代理&VPN绕过
- APP - 重打包
前记
- 今天是学习小迪安全的第八十五天,本节课正式进入APP安全,主要讲解了APP抓不到包的问题
- 本节课主要是以理解如何解决这些问题的思路为主,在实战中遇到要知道如何去解决
- 所需要用到的资源已放至下方链接,需要自取:
- https://pan.baidu.com/s/1nl68XYunxxL5asA2zyTADw
- 提取码:xxxd
APP攻防——第八十五天
资产收集篇&反证书检验&XP框架&反代理VPN&数据转发&反模拟器
APP - 防护分析-判断识别
防护手段
- 首先APP程序抓包的问题,这里就不再赘述如何配置抓包,详细请看这篇文章:安卓逆向第一步,如何配合BurpSuite抓到模拟器的包?_burp抓逍遥模拟器的数据包-CSDN博客
- 我们这里讲的是配置完成之后,仍然抓不到某些软件的数据包的情况,主要分两种:
- 没有限制过滤的抓包问题:
- 抓不到 - 工具证书没配置好
- 抓不到 - 流量包走的不是HTTP/HTTPS
- 有限制过滤的抓包问题
- 抓不到 - 反安卓模拟器调试
- 抓不到 - 反代理&VPN
- 抓不到 - 反SSL证书验证
- 没有限制过滤的抓包问题:
- 这里我们可以使用如下两个项目去简单看一看出现上面这些情况在代码层面是如何产生的:
- 反抓包Demo:https://github.com/AndroidAppSec/vuls
- 反调试Demo:https://github.com/lamster2018/EasyProtector
- 那对于上述这些无法抓包的情况,我们主要看的是有限制过滤的抓包问题,这里给出他们的具体说明:
- 反模拟器:禁用模拟器对APP进行调试访问
- 反证书检验:SSL证书绑定(单向校验&双向校验)
- 单向检验:客户端校验服务端的证书
- 双向校验:客户端不仅校验服务端的证书,也会在APP内放置一张证书,供服务端校验
- 反代理&VPN:代理检测、VPN检测、发包框架强制不走代理,可能会出现如下情况
- 配置代理后无法访问、强制退出、数据异常等
- 连接VPN节点后无法访问、强制退出、数据异常等
- 配置代理&VPN后能够正常访问且无任何异常,但无数据包
绕过手段
- 当然,针对上面这些问题,我们都有相应的解决方式:
- 非HTTP/HTTPS抓包:
- 用封包工具抓包
- 用科来/Wireshark等工具抓包
- 反模拟器:
- 用真机
- 模拟器模拟真机
- 逆向删反代码重打包
- 反证书验证:
- 单向检测:XP框架
- 双向检测:之后会讲到
- 逆向删反代码重打包
- 反代理&VPN:
- 用APP工具设置代理-
Postern
&SocksDroid
- 用PC工具设置代理-
Proxifier
- 逆向删反代码重打包
- 用APP工具设置代理-
- 非HTTP/HTTPS抓包:
- 那我们就来一个一个演示,看看如何去进行绕过
APP - 某游戏-非HTTP/HTTPS流量包
-
如果它内部走的流量包不是HTTP/HTTPS,我们可以通过之前讲过的封包工具或者科来工具去抓包
-
比如这个微乐斗地主游戏就是我们直接用BP是抓不到包的,因为它内部可能使用的其他协议,那这时就使用其他软件来抓包:
-
可以看到我们能够成功抓到这个包
APP - 某社交-反模拟绕过
-
有的软件可能会检测用户是否使用模拟器,比如它的检测逻辑可能就是看用户所处的平台是否有硬盘;是否有运营商、手机号;是否有IMEI编号等等
-
比如这个软件,用逍遥模拟器一打开就显示无法使用:
-
那我们如何解决这个问题,就可以通过模拟器的设置去更改一些信息:
-
比如模拟器的磁盘、模拟器的运营商信息等等,可以更改这些尝试绕过这个检测逻辑,如果绕不过的话,可以尝试去逆向这个软件,尝试删除它的检测逻辑,然后重打包,如果都不行的话,emmm,还是老老实实用真机吧
-
这个软件的检测逻辑可能就有点深,有点完美,直接改这上面的一些设置是没办法绕过的
APP - 某游戏-反证书检验绕过
绕过手段
-
有的软件可能会在访问它本身的服务器时,校验客户端是否使用了它给定的SSL证书,如果没有那就无法进行数据的交换,这就是单向的证书校验
-
当然,客户端也可能对服务端的证书进行校验,这就是双向的证书校验
-
本节课只是关于单向的证书校验如何绕过,我们可以打开本地的demo项目,先打开 传输安全->HttpsURLConnection->不做任何校验 ,我们可以看到点击之后它会请求一次
https://www.baidu.com/aaa
,这时候是能够成功抓包的:
-
然后我们返回上一级,选择 SSL Pinning->okhttp ,再次点击发现它显示请求失败:
-
但是一旦关掉代理它就显示请求成功,这说明它是有SSL证书校验的,那此时我们这里提供利用XP框架来绕过这种方法
-
首先安装Xposed框架,如果各位安装的是新版逍遥模拟器,它可能是安卓9,但是Xposed框架最多只支持到安卓8,所以需要通过逍遥多开器开一个安卓7的模拟器:
-
然后按照小迪的流程一步步安装就好了,如果出现了
/system
无法读写的情况,我们首先进入开发者模式,打开USB
调试 -
接着将磁盘设置为独立磁盘,然后找到逍遥模拟器的文件夹,里面有个
adb.exe
文件:
-
在终端中打开,然后运行如下命令:
.\adb.exe root
.\adb remount
- 如果这里并没有报错,继续执行如下命令:
.\adb.exe shell
mount -o rw,remount -t auto /system
chmod 777 /system
- 如果都没有报错,那么直接在逍遥模拟器上的终端运行:
su root
cd system/xposed
sh memu-script.sh
-
提示Done!说明安装完成,此时在
XP Install
中载入我们的模块,重启模拟器即可:
-
此时,我们再次点击 SSL Pinning->okhttp 会发现,它成功抓到请求包了:
-
当然,对方是单向校验我们可以这么干,但如果对方采用双向校验,这种方法就没用了
代码剖析
-
我们直接下载vuls的源代码,看一看它是怎么进行校验的,IDEA打开源代码,然后找到
SSLPinningActivity.java
文件,主要逻辑代码是这里:
-
可以看到,它首先会创建一个访问
www.baidu.com
的证书,一个sha256的值,然后把它放在客户端 -
之后再通过这个证书去向
www.baidu.com
发起请求,如果这个过程中发生错误,就显示请求失败,否则显示请求成功 -
那我们如果向之前一样通过BP的证书去发送请求,就会导致sha256的值不同,导致证书校验失败而请求失败
APP - 某社交-反代理&VPN绕过
-
有的软件可能会去检测用户是否使用了代理或者VPN,比如说某个社交APP,如果开启了之前我们常用的WIFI代理,他就会提示无法使用:
-
那么我们要绕过就可以从两方面考虑:一个是考虑走第三方APP软件的代理;一个是考虑既然是模拟器,我们可以抓模拟器的进程数据包
-
于是我们就一个个尝试呗,先看看它是否只检测了WIFI代理,那我们就可以通过第三方软件绕过
-
我们关闭WIFI代理,然后使用第三方软件代理
Postern
去尝试绕过:
-
先删除其他的配置,然后新建一个代理,这里填入本机BP监听的8888端口,然后改为HTTP/HTTPS连接,保存
-
之后找到配置规则,然后填入如下信息并保存:
-
打开VPN,之后再打开这个软件它就不会提示无法使用了,我们也可以成功抓取数据包了:
-
如果它的检测逻辑比较完善,还是提示无法使用的话,我们可以跳出模拟器,通过PC端去抓模拟器的包
-
这里的话是通过
Proxifer
去联动BP抓包,设置Proxifer
的抓包规则如下:
-
然后打开软件也没有任何提示,点点点,也可以在BP中成功抓到数据包:
-
那在实战中遇到反代理&VPN就可以尝试从这两方面去绕过
APP - 重打包
- 重打包的意思就是我们通过逆向拿到了软件的源代码,然后重新修改代码之后再打包成APK文件,以此来绕过某些有限制的代码
- 有的软件可能会有重打包的检测,这个检测也比较简单,就是每个软件在发布的时候都会有一个签名值,如果重打包它的值就会发生变化,导致签名验证失败,因此可以通过这一点来判断软件是否重打包
- 那如何绕过这种机制呢,这里小迪只是提了一嘴,应该之后的课程会讲到