安全矩阵

 找回密码
 立即注册
搜索
查看: 3108|回复: 0

Android抓包攻防技术

[复制链接]

855

主题

862

帖子

2940

积分

金牌会员

Rank: 6Rank: 6

积分
2940
发表于 2021-7-26 10:37:08 | 显示全部楼层 |阅读模式
原文链接:Android抓包攻防技术

一.检测代理1. 原理APP在发起网络请求前会检测系统是否设置了代理,如果发现有代理,就不发起请求。以下是一段APP检测系统是否有代理的实例代码:
  1. public static boolean isWifiProxy(Context context) {
  2.     final boolean IS_ICS_OR_LATER = Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH;
  3.     String proxyAddress;
  4.     int proxyPort;
  5.     if (IS_ICS_OR_LATER) {
  6.         proxyAddress = System.getProperty("http.proxyHost");    //获取代理主机
  7.         String portStr = System.getProperty("http.proxyPort");  //获取代理端口
  8.         proxyPort = Integer.parseInt((portStr != null ? portStr : "-1"));
  9.     } else {
  10.         proxyAddress = android.net.Proxy.getHost(context);
  11.         proxyPort = android.net.Proxy.getPort(context);
  12.     }
  13.    Log.i("代理信息","proxyAddress :"+proxyAddress + "prot : " proxyPort")
  14.    return (!TextUtils.isEmpty(proxyAddress)) && (proxyPort != -1);
  15. }
复制代码


2.特征设置手机代理后,APP无法获取网络数据。
3.绕过方法
  •         直接在系统底层使用iptables强制转发流量(ProxyDroid:全局模式)
           
  •         反编译APP,在smali代码中修改检测代理的代码逻辑

4.参考文章二、No Proxy1.原理APP 用了No Proxy参数发起网络请求,即使系统设置了代理,也会被直接绕过。

以下是一段使用No Proxy参数发起网络请求的代码:

  1. public void run() {
  2.         Looper.prepare();
  3.         OkHttpClient okHttpClient = new OkHttpClient.Builder().
  4.                 proxy(Proxy.NO_PROXY).      //使用此参数,可绕过系统代理直接发包
  5.                 build();
  6.         Request request = new Request.Builder()
  7.                 .url("http://www.baidu.com")
  8.                 .build();
  9.         Response response = null;
  10.         try {
  11.             response = okHttpClient.newCall(request).execute();
  12.             Toast.makeText(this, Objects.requireNonNull(response.body()).string(), Toast.LENGTH_SHORT).show();
  13.         } catch (IOException e) {
  14.             e.printStackTrace();
  15.         }
  16.         Looper.loop();
  17.     }
复制代码


2.特征设置代理后,APP依然能正常获取网络数据,但抓包工具无法抓到该APP的数据包。
3.绕过方法
  •         直接在系统底层使用iptables强制转发流量(ProxyDroid:全局模式)


  •         以VPN形式设置代理(Drony,启动后手机状态栏上会显示VPN图标)
           

4.参考文章三、SSL Pinning证书锁定1.原理(多种实现方式,以下为 “证书特征码比对方式”)开发者将SSL证书的某些字节码硬编码在APP中。当应用程序与服务器通信时,它将检查证书中是否存在相同的字节码。如果存在,则应用程序将请求发送到服务器。如果字节码不匹配,它将抛出SSL证书错误。此技术可防止攻击者使用自己的自签名证书。
实现方法当然不止这一种,例如以下是一段通过预埋证书来进行 SSL Pinning 的代码:
2.特征挂代理后无法抓包,且APP无法获取网络数据。
3.绕过方法
  •         逆向 APP 取出证书,导入到抓包程序中:证书通常在 /assets 里,jadx 反编译后搜索 .p12 .pem .cer ssl 等关键词
  •         JustTruetMe:手机上部署xposed框架,然后安装此模块,对目标APP生效即可
           
  •         Frida:自己对APP逆向分析后,手动使用 Frida 去 hook 证书校验的代码
  •         局限性
            虽然说我们可以使用通用的 HOOK 方式去修改证书校验的结果,但是开发人员也可以使用代码混淆的办法来对抗hook。开发人员只需要将证书校验的那部分代码混淆,就能够防止通用的SSL unpinning方法。这时候我们就只能反编译代码,自己去寻找代码中进行证书校验的位置,然后自己编写hook代码去进行SSL pinning的绕过。

4.参考文章四、双向认证1.原理相比 SSL Pinning,双向认证是服务器也对客户端一个提取预埋的证书进行了SSL Pinning。
2.特征
绕过 SSL Pinning 后仍然无法抓包,且 APP 无法获取网络数据。
3.绕过方法
  •         逆向 APP 提取出客户端证书,并将证书挂载到抓包代理软件上

4.参考文章


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|安全矩阵

GMT+8, 2024-11-29 14:53 , Processed in 0.013175 second(s), 18 queries .

Powered by Discuz! X4.0

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表