如何从逆向工程应用中查找 Android 广告库的版本号?

逆向工程 安卓 爪哇 图书馆 软件安全
2021-07-03 18:14:17

我正在分析 Android 广告库。我已经从 Google play 下载了应用程序并使用dex2jarJDGUI来恢复应用程序的 Java 代码。正如预期的那样,许多应用程序使用广告库(例如广告 Google Ads、Inmobi、Millenalmedia 等)。正如人们所料,广告库有不同的版本(例如,inmobi 的最新版本是4.3)。我下载的一些应用程序使用 Inmobi 4.3 但更大的没有。的应用程序使用旧版本的 Inmobi(从 3.6 版开始)。

因此,我希望找到应用程序中包含的广告库的版本一种新手方法是在应用程序中搜索字符串“version”。有没有更好的方法来做到这一点?广告库通常会通过一些代码片段在 Android 框架中提及/注册他们的版本吗?如果是这样,我可以搜索它。

请提出一些专业/适当的方法。

2个回答

对此没有完美的答案,这在很大程度上取决于您对误报的容忍度。尽管根据您愿意付出的努力程度,您会想到三个答案。这些选项从最简单/最少工作到最难/最多工作列出 - 如果每个都正确完成 - FP 的风险也也应该下降。

  1. 您提到的新手方法,寻找版本控制字符串,并不是一个坏方法。尽管您依赖 SDK 的开发人员正确增加此值并相信它们是正确的。当 Ad SDK 本身更改时,此值可能会更改或不更改。我个人见过一些仅在 API 样式更改时更改这些类型的值。
  2. 您可以采用的一种“简单”方法是对要分析的广告 SDK 进行建模。获取 SDK,通过dx运行它以获取 Davlik 代码,然后baksmali this。在与具有此广告网络代码的应用程序进行比较时,理论上您可以将其与您收集的 SDK 的每次迭代进行比较。假设 SDK 没有以任何方式改变(ProGuard/DexGuard/etc 可能已经改变了一些东西)——这可以告诉你它最像 SDK 的哪个迭代。这将比简单地查找字符串更值得信赖,尽管对 SDK 进行编目并构建脚本以自动进行比较需要更多的工作。
  3. 使用现成的差异查找器,例如AndroDiff尽管所有代码都用于创建签名并找到 Android APK 之间的差异,但这对于您尝试执行的操作来说可能有点繁重。虽然这主要是恶意软件/盗版应用程序的开发人员,但您可以修改它以比较您之前提取的 Ad SDK 并针对这些应用程序运行新应用程序。

根据您想要的确切输出,您可以选择不同的答案。尽管第一步肯定是开始对您想要的 SDK 进行编目,并找出它们之间的实际差异。

您是否尝试过 JEB 的库签名?

https://www.pnfsoftware.com/blog/jeb-1-3-how-to-sign-and-match-third-party-library-code/

这是在该反编译器平台的最早版本中实现的,我认为随着时间的推移只会变得更好