【问题标题】:Is there any ways how to prevent SSL Pinning Bypass by using OkHttp3?有什么方法可以通过使用 OkHttp3 来防止 SSL Pinning Bypass?
【发布时间】:2021-01-12 07:23:56
【问题描述】:

关于在Android中使用OkHttp3中的CertificatePinner类绕过SSL Pinning的文章太多了。

https://medium.com/@hojat.sajadinia/bypass-okhttp-certificatepinner-on-android-9a45ad80a58b

https://blog.nviso.eu/2019/04/02/circumventing-ssl-pinning-in-obfuscated-apps-with-okhttp/?fbclid=IwAR3QRvecJl6rlmpN_fpbBGgY2Bvrax3eo-Y7qOf7StYW7_aGsuaIdrr_pQs

https://joncooperworks.medium.com/disabling-okhttps-ssl-pinning-on-android-bd116aa74e05

所以我的问题是,我应该怎么做才能通过使用 OkHttp.CertificatePinner 来防止绕过 SSLPinning ?

我尝试的是在我的项目中混淆 OkHttp。使用 ApkTools 逆向 APK 文件时找不到 OkHttp3 类,但是当我使用 jadx 逆向 APK 文件时,OkHttp3 不会在 dex 文件中被混淆。

【问题讨论】:

  • 我觉得什么都做不了,反编译后还是可以看到CertificatePinner的代码用在了哪里,先猜OkHttp3类的混淆名称是什么。
  • 证书固定可防御中间人攻击。阻止攻击者对他们自己的客户端设备进行反编译和逆向工程是没有用的。
  • 我发现了这个讨论github.com/square/okhttp/issues/4967。但是,我仍然不知道我在实施 proguard 规则时错过了什么。为什么在 classes.dex 中仍然可以找到 OkHttp3?有什么方法可以从 dex 文件中删除或混淆 OkHttp3 吗?

标签: android okhttp


【解决方案1】:

您可能可以调查设备证明以确认正确的应用程序二进制文件正在非 root 手机上运行。 https://developer.android.com/training/safetynet/attestation

SafetyNet Attestation API 是一种反滥用 API,允许应用开发者评估运行其应用的 Android 设备。该 API 应用作滥用检测系统的一部分,以帮助确定您的服务器是否正在与在正版 Android 设备上运行的正版应用进行交互。

但我没有资格就该主题提供专家建议。

【讨论】:

  • 我已经实施了 SafetyNet 来调查设备根检测和 Magisk。我不知道 SafetyNet 如何检测弱 SSL Pinning。
  • @paulsenjs 取决于您的目标是什么。如果您想验证只有未修改的客户端连接到您的服务器,那么它可能会有所帮助。如果您希望应用程序二进制文件验证它没有被篡改,那么可能不会。
  • 是的,同意。 SafetyNet 是验证应用程序二进制文件是否在有根或无根移动设备上运行的方法。
【解决方案2】:

最后我不得不手动覆盖 mapping.txt,因为 proguard 规则不适用于 OkHttp3。希望在我覆盖 OkHttp3 的类名、方法名和对象名之后,能够防止中间人攻击者使用 Okhttp3.CertificatePinner.java 绕过证书固定

【讨论】:

    猜你喜欢
    • 2013-01-26
    • 2018-11-02
    • 2014-01-01
    • 2013-02-04
    • 1970-01-01
    • 1970-01-01
    • 2020-09-13
    • 2022-06-15
    • 2018-07-08
    相关资源
    最近更新 更多