如何逆向工程移动应用程序图像?

逆向工程 安卓 线鲨
2021-06-26 16:01:19

设想

在我的手机上,我有一个应用程序。当我登录应用程序并转到我的个人资料时,会出现我的个人资料图片。我想要那张照片,因为我需要它。简单的方法是去当地的商店拍照,但很酷的方法是从应用程序中获取该图像。

问题

如何从手机上的应用程序获取图像?

我认为如何做到:

使用wireshark 监听来自应用程序的移动流量并尝试以某种方式获取图像。这是正确的方法还是有更好的方法?

信息

安卓 8.1.1

2个回答

如果流量未加密,Wireshark 就可以了。否则,您将不得不设置一个代理来嗅探 SSL 流量。此外,图片可能会以某种特定于应用程序的方式编码发送,因此您无法将其保存为 JPG。

最彻底的方法是反编译应用程序,并找出它是如何从服务器获取图片的。

如果您的设备已 root,您可以尝试在 /mnt/sdcard/Android/data/ 中搜索应用程序存储其临时数据的文件夹。很可能您的个人资料图片已被缓存。但它可能作为 BLOB 存储在某些数据库文件中。所以,有很多可能性……

要从移动应用程序获取图像,您首先想知道它是否存储在您的设备上,或者是否在您登录帐户时加载。在我的情况下,当您登录到您的应用程序时,将加载一个个人资料图片女巫。在这种情况下,您可以执行以下操作:

  1. 首先要做的是下载并安装Packet Capture此应用程序可用于嗅探您想要的任何应用程序的网络流量。
  2. 打开Packet Capture应用程序并单击“绿色箭头/三角形”,选择您想要收听的应用程序。(第一次必须创建证书,不过这个很简单,按照屏幕上的说明操作即可)
  3. 如果顶部出现红色停止按钮,则表示数据包捕获现在正在侦听应用程序使用的所有数据。
  4. 打开您想听的应用程序,然后转到将加载图像的页面。现在您可以Packet Capture通过单击红色停止按钮停止
  5. 当您停止收听时,您现在会在列表中看到一个新行,其中包含应用程序Packet Capture已完成的总捕获这些是应用程序完成的网络请求和响应。单击一行,将显示所有捕获。
  6. 您必须搜索所有捕获并检查 json 响应,看看您是否看到图像页面中的任何链接。找到链接后,复制并保存以备后用。

现在您有了图像链接,这取决于您要执行的当前情况。

  1. 该链接可以是带有照片的 HTML 文档。然后您可以简单地保存图像。
  2. 该链接可以来自 api 女巫返回一些二进制数据。

就我而言,它是一个 API 调用。在我创建一个脚本来进行 API 调用之前,我想检查应用程序的源代码,看看是否有任何描述或解码需要完成。以下步骤不是必需的,但如果有一些加密正在编码,您可以执行以下操作。

  1. 从应用程序获取 APK 文件并将其保存到您的手机,这可以通过此应用程序完成

  2. 将 APK 转换为 Java 源代码,这可以通过本站点完成下载源代码并为其安装编辑器。

  3. 现在您有了源代码,可以找到将从 API 或仅通过 HTTP 调用加载图像的代码。只需找到有关应用程序使用的解密解码或自动识别的任何线索。你必须弄清楚这一点,因为每种情况都可能不同。在我的情况下,该应用程序没有对 API 进行任何授权,并且数据返回没有加密。我只是搜索了存储我的个人资料图片的代码,我搜索了所有参考资料,并找到了从 API 调用加载个人资料图片的位置。

现在我知道我可以从哪里获取我的图像,我可以创建一个 C# 程序来从 API 获取字节并将其转换为图像。

// Create a request for the URL.   
WebRequest request = WebRequest.Create(
            "weburl/to/the/api");

// Get the response.  
WebResponse response = request.GetResponse();

// Get the stream containing content returned by the server.  
Stream dataStream = response.GetResponseStream();

var bitmap = Bitmap.FromStream(dataStream);

response.Close();

bitmap.Save("mypicture.png");

如果您的设备已 root,您可以尝试在 /mnt/sdcard/Android/data/ 中搜索应用程序存储其临时数据的文件夹。很可能您的个人资料图片已被缓存。但它可能作为 BLOB 存储在某些数据库文件中。实际上,您并不总是需要 root 访问权限来访问应用程序的缓存。转到文件夹:/mnt/sdcard/Android/data//Cache. 如果未找到此文件夹,则可能是应用程序使缓存不可见,在这种情况下,您需要将手机设为 root。