设想
在我的手机上,我有一个应用程序。当我登录应用程序并转到我的个人资料时,会出现我的个人资料图片。我想要那张照片,因为我需要它。简单的方法是去当地的商店拍照,但很酷的方法是从应用程序中获取该图像。
问题
如何从手机上的应用程序获取图像?
我认为如何做到:
使用wireshark 监听来自应用程序的移动流量并尝试以某种方式获取图像。这是正确的方法还是有更好的方法?
信息
安卓 8.1.1
设想
在我的手机上,我有一个应用程序。当我登录应用程序并转到我的个人资料时,会出现我的个人资料图片。我想要那张照片,因为我需要它。简单的方法是去当地的商店拍照,但很酷的方法是从应用程序中获取该图像。
问题
如何从手机上的应用程序获取图像?
我认为如何做到:
使用wireshark 监听来自应用程序的移动流量并尝试以某种方式获取图像。这是正确的方法还是有更好的方法?
信息
安卓 8.1.1
如果流量未加密,Wireshark 就可以了。否则,您将不得不设置一个代理来嗅探 SSL 流量。此外,图片可能会以某种特定于应用程序的方式编码发送,因此您无法将其保存为 JPG。
最彻底的方法是反编译应用程序,并找出它是如何从服务器获取图片的。
如果您的设备已 root,您可以尝试在 /mnt/sdcard/Android/data/ 中搜索应用程序存储其临时数据的文件夹。很可能您的个人资料图片已被缓存。但它可能作为 BLOB 存储在某些数据库文件中。所以,有很多可能性……
要从移动应用程序获取图像,您首先想知道它是否存储在您的设备上,或者是否在您登录帐户时加载。在我的情况下,当您登录到您的应用程序时,将加载一个个人资料图片女巫。在这种情况下,您可以执行以下操作:
Packet Capture应用程序并单击“绿色箭头/三角形”,选择您想要收听的应用程序。(第一次必须创建证书,不过这个很简单,按照屏幕上的说明操作即可)Packet Capture通过单击红色停止按钮停止Packet Capture已完成的总捕获。这些是应用程序完成的网络请求和响应。单击一行,将显示所有捕获。现在您有了图像链接,这取决于您要执行的当前情况。
就我而言,它是一个 API 调用。在我创建一个脚本来进行 API 调用之前,我想检查应用程序的源代码,看看是否有任何描述或解码需要完成。以下步骤不是必需的,但如果有一些加密正在编码,您可以执行以下操作。
从应用程序获取 APK 文件并将其保存到您的手机,这可以通过此应用程序完成
将 APK 转换为 Java 源代码,这可以通过本站点完成。下载源代码并为其安装编辑器。
现在我知道我可以从哪里获取我的图像,我可以创建一个 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。