逆向工程应用程序的客户端连接到主机

逆向工程 安卓
2021-07-07 07:29:02

好的,我是一名网络程序员,但我对逆向工程完全陌生..

所以,有一个名为 InstaMessage 的 android 应用程序,我想对客户端与服务器的连接进行逆向工程,以便我可以在我的计算机上模拟它并查看那里有哪些命令,也许可以尝试一下并进一步创建一些脚本作为我的用户操作

我正在考虑监控流量,查看它通向何处以及哪个端口,然后尝试从那里开始。

我知道这是一个广泛的问题,所以如果你能给我一些关于从哪里开始的提示,它会很有帮助..

谢谢

2个回答

我用很多 Android 应用程序做到了这一点,所以我将分享我学到的东西。

在考虑嗅探流量时,首先想到的是“我将根植 Android 设备,在其上运行 tcpdump 就完成了”。这适用于简单的事情,但它很快就会变得非常混乱。如果应用程序使用 SSL(例如 99% 的内容),情况就更糟了。

使用代理

大多数应用程序使用 HTTP/HTTPS 与服务器通信。嗅探这种流量的最简单方法是使用嗅探代理(也称为调试代理)。常见的是CharlesFiddler我使用 Charles,所以我将向您展示如何使用它,但 Fiddler 应该是类似的。

首先,您的计算机和 Android 设备需要在同一个 LAN 中。启动 Charles 后,它会自动开始代理您计算机的流量。你可能不想要这个,所以从代理 -> 代理设置... -> Windows 禁用它。现在将您的 Android 网络设置指向使用您的计算机作为 HTTP 代理(Charles 默认端口为 8888)。Charles 将向您显示来自您设备的所有 HTTP 流量。

如果您需要 SSL (HTTPS) 代理,您必须在您的设备上安装 Charles 证书。Android 要求您有一个受保护的(至少是模式)锁屏来安装外部证书。您可以在 Charles 安装路径的 doc/ 目录中找到证书,也可以从设备浏览器访问http://www.charlesproxy.com/getssl/然后,在 Charles 中,转到 Proxy -> Proxy Settings... -> SSL,启用 SSL 代理并添加要代理的主机(或仅添加*代理所有内容)。

非 HTTP(S) 通信

HTTP 调试代理将涵盖大多数应用程序。如果应用程序不使用 HTTP(S),事情会变得更复杂一些。您可能想了解 Charles 的 SOCKS 代理功能,以及如何在您的设备上配置 SOCKS 代理。如果这还不够,那么你真的想打破像 tcpdump/Wireshark 这样的工具。您可以设置虚假 DNS、ARP 欺骗设备、使用嗅探 VPN 等。有很多方法可以解决。如果您想模拟服务器而不是客户端,则假 DNS 也很好。

SSL证书检查

在处理 SSL 时,大多数应用程序信任操作系统信任的内容。因为您可以在 Android 上安装外部证书,所以您很好。应用程序很少会根据嵌入式 CA 根检查服务器证书。这可以通过几种方式绕过:

  • 使用apktool、smali等工具,将自己的证书注入到app中,替换原来的证书;
  • 编写一个挂钩数据发送/接收方法的 xposed 模块,以嗅探解密的消息;
  • 编写一个 xposed 模块来连接证书检查程序,绕过它。

我会选择第一个或最后一个。

反编译

在某些时候,您将不得不查看应用程序代码。也许它使用专有的二进制协议,也许流量被加密或压缩,也许你无法理解某些值。我建议尝试多个反编译器/引擎。它们并不完美,而且很多时候,一个在另一个失败的情况下运行良好。Virtuous Ten Studio是一个很好的开始。然后我总是从 APK 中提取 classes.dex 文件(它只是一个 ZIP 文件)并通过 dex2jar 运行它。然后我通过 JD-GUI(JD-Core 引擎)和 SecureTeam Java Decompiler(Procyon 引擎)运行生成的 JAR。此外,jadx 可以直接针对 DEX,无需 dex2jar。

即时消息

我检查了您要反转的应用程序。它使用标准的 HTTPS 通信,使用 Charles 或 Fiddler 很容易嗅探。服务器有各种 GET 端点,客户端发送一个 base64 编码的data字段。这是二进制数据,我还没有真正研究过它,但是所有请求中的前 70% 都是相同的,所以我怀疑它是某种会话令牌。最后一部分因请求而异,但整个字段的熵非常高,所以我认为它要么被压缩,要么被加密。我会尝试反编译该应用程序,看看发生了什么。另一方面,服务器响应是纯 JSON。

如果您无论如何都想自己模拟服务器,我将从服务器开始,它只会打印出任何传入的连接数据并将我的 android 指向那里。比监控流量和过滤掉所有不相关的东西更快、更容易。