好的,我是一名网络程序员,但我对逆向工程完全陌生..
所以,有一个名为 InstaMessage 的 android 应用程序,我想对客户端与服务器的连接进行逆向工程,以便我可以在我的计算机上模拟它并查看那里有哪些命令,也许可以尝试一下并进一步创建一些脚本作为我的用户操作
我正在考虑监控流量,查看它通向何处以及哪个端口,然后尝试从那里开始。
我知道这是一个广泛的问题,所以如果你能给我一些关于从哪里开始的提示,它会很有帮助..
谢谢
好的,我是一名网络程序员,但我对逆向工程完全陌生..
所以,有一个名为 InstaMessage 的 android 应用程序,我想对客户端与服务器的连接进行逆向工程,以便我可以在我的计算机上模拟它并查看那里有哪些命令,也许可以尝试一下并进一步创建一些脚本作为我的用户操作
我正在考虑监控流量,查看它通向何处以及哪个端口,然后尝试从那里开始。
我知道这是一个广泛的问题,所以如果你能给我一些关于从哪里开始的提示,它会很有帮助..
谢谢
我用很多 Android 应用程序做到了这一点,所以我将分享我学到的东西。
在考虑嗅探流量时,首先想到的是“我将根植 Android 设备,在其上运行 tcpdump 就完成了”。这适用于简单的事情,但它很快就会变得非常混乱。如果应用程序使用 SSL(例如 99% 的内容),情况就更糟了。
大多数应用程序使用 HTTP/HTTPS 与服务器通信。嗅探这种流量的最简单方法是使用嗅探代理(也称为调试代理)。常见的是Charles和Fiddler。我使用 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 调试代理将涵盖大多数应用程序。如果应用程序不使用 HTTP(S),事情会变得更复杂一些。您可能想了解 Charles 的 SOCKS 代理功能,以及如何在您的设备上配置 SOCKS 代理。如果这还不够,那么你真的想打破像 tcpdump/Wireshark 这样的工具。您可以设置虚假 DNS、ARP 欺骗设备、使用嗅探 VPN 等。有很多方法可以解决。如果您想模拟服务器而不是客户端,则假 DNS 也很好。
在处理 SSL 时,大多数应用程序信任操作系统信任的内容。因为您可以在 Android 上安装外部证书,所以您很好。应用程序很少会根据嵌入式 CA 根检查服务器证书。这可以通过几种方式绕过:
我会选择第一个或最后一个。
在某些时候,您将不得不查看应用程序代码。也许它使用专有的二进制协议,也许流量被加密或压缩,也许你无法理解某些值。我建议尝试多个反编译器/引擎。它们并不完美,而且很多时候,一个在另一个失败的情况下运行良好。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 指向那里。比监控流量和过滤掉所有不相关的东西更快、更容易。