最近有个朋友让我帮个忙,原来以前他的女朋友把他们一块拍的照片都放上传了一款叫小恩爱的软件里边了,大概有几千张多,鉴于隐私问题想把图片都下载下来然后清空相册,但是app又不支持批量下载,只能一张一张地保存,所以想让我破解这个软件,可以批量下载,不要那么费事.听到这个要求,我
不过朋友的忙还是要帮的,首先想到的就是解包 jadx分析代码,内部实现一个下载功能,下载相册数据,所以app中应该有一个相册列表接口,然后获取具体数据进行下载即可,但是解包分析代码打包是一个很繁琐的事情,还不一定搞得定,时间精力都是投入,有时候解决问题可以考虑折中的方案.其实是第一步就发现这个软件加固了,费劲,只得作罢~
这个折中的方法就是使用fiddler!下图为软件截图,确实没找到批量下载按钮,只能一张一张浏览下载.所以我的思路就是浏览的过程中,app肯定是要下载图片的,通过fiddler拦截到图片流直接转存入电脑中,这样只需要闭着眼睛不停划图片,从第一张滑到最后一张的时候,也就是图片下载完成之时.
听上去确实有些笨,但是这个方法节省了破解的时间和精力,而且实际操作十分简单!
Fiddler是一个http协议调试代理工具,它能够记录并检查所有你的电脑和互联网之间的http通讯,设置断点,查看所有的“进出”Fiddler的数据(指cookie,html,js,css等文件)。Fiddler 要比其他的网络调试器要更加简单,因为它不仅仅暴露http通讯还提供了一个用户友好的格式
以上来自百科,只要知道fiddler是抓包的就行了,废话少说直接操作
第一步下载安装fiddler
fiddler官网地址
https://www.telerik.com/download/fiddler
安装完成后首先要设置的两个地方
\1. 允许远程连接
(https://gitee.com/cookanger/image/raw/master/image/fiddler/12.jpg)
\2. 安装https证书
(https://gitee.com/cookanger/image/raw/master/image/fiddler/13.jpg)
操作完上述步骤后:可以win+r 输入cmd 再输入 ipconfig 查看自己的局域网ip,然后浏览器中访问 ip:8888 ,如果看到以下页面说明fiddler设置成功
接下来手机打开设置wifi代理,代理ip和端口就是上面说的那个值
然后手机打开ip:8888,下载安装证书
随便输入名称点击确定即可,到此手机设置成功
接下来打开手机小恩爱软件,这个时候fiddler左侧的请求就会刷出很多日志来,点击下图的remove all将会清空历史日志,比如我们要获取相册数据,那么先remove all一下,然后再点击相册按钮,这个时候刷进来的日志也就代表是和相册数据有关的数据请求了.
然后看下图右侧,上方为数据发送区,通过这个面板我们就可以知道我们向服务器发送的url 参数 cookies 等等,与之对等的就是下方的接受数据区,通过这个面板我们可以知道服务器给我们返回了什么.每个面板都有一个类型标签页,比如Textview,Imageview这个代表了数据查看的方式 ,比如我们点击Imageview 标签页,fiddler就会把数据以图片的形式呈现给我们,如下图,但如果返回数据不是图片格式的话,这个面板就会是乱码.
具体思路:点开小恩爱的相册一直浏览到最后,拦截这些请求转存到本地,貌似很简单,但是怎么拦截这些请求呢? 很好的是,fiddler支持过滤请求并转存资源,这里的技术点就是Fiddler Script.
什么是Fiddler Script:
Fiddler Script 是用JScript.NET语言写的。Fiddler 包含了一个脚本文件可以自动修改Http Request 和Response.这样我们就不需要手动地下"断点"去修改了,实际上它是一个脚本文件。
通俗点就是通过修改FiddlerScript文件,我们可以在请求前和接受数据后给数据加汤换药,这次我们要做的就是在接受数据后搞点小动作,把接受的数据转存起来.
点击菜单Rules->Customize Rules
关于FiddlerScript也有很多知识点,在这里就不多赘述了,直接实际操作:
将如下代码复制到 static function Main() 的上方,然后ctrl + s .然后开始浏览相册,即可将图片保存至D盘目录.具体的代码注释也在其中
static function OnDone(oSession: Session) {
FiddlerObject.log(oSession)
//判断host请求避免下载非小恩爱的相册图片
if(oSession.RequestHeaders["Host"] == "a0.cdn.xiaoenai.com"){
//检查Content-Type
if (oSession.ResponseHeaders["Content-Type"]!=null || oSession.ResponseHeaders["content-type"]!=null)
{
//避免不规范标头
var contentType=oSession.ResponseHeaders["Content-Type"];
if (String.IsNullOrEmpty(contentType) )
contentType=oSession.ResponseHeaders["content-type"];
//判定请求是否图片
if (contentType.Contains("image"))
{
//确定文件名(保存用)
var fileName="";
var fileIndex = oSession.RequestHeaders.RequestPath.LastIndexOf ("/");
if (fileIndex>0)
fileName = oSession.RequestHeaders.RequestPath.Substring (fileIndex+1);
//如果文件名非法(名称含非法字符)
if(fileName.IndexOf('?')>0 || fileName.IndexOf('&') )
fileName=String.Empty;
//输出日志(在Fiddler 主窗口,日志处输出)
//FiddlerObject.log("Content-Type:"+ contentType +" RequestPath:"+oSession.RequestHeaders.RequestPath);
//如果文件名为Null,自行创建一个文件名(Guid)
if (String.IsNullOrEmpty( fileName))
{
fileName=Guid.NewGuid().ToString();
var extName= contentType.Replace("image/","");
fileName=fileName+"."+extName;
}
//太小的图片不要,比如站位图片(自行调节)
if (oSession.ResponseBody.Length>100)
{
//指定保存位置
var saveDir="d:\\Temp\\";
//不存在则创建文件夹
if (!System.IO.Directory.Exists(saveDir))
System.IO.Directory.CreateDirectory(saveDir);
//保存响应流
oSession.SaveResponseBody(saveDir+fileName);
//写日志
FiddlerObject.log("[文件保存]:"+fileName)
}
}
}
}
}
因为某台电脑不在身边,所以上述代码从网上复制过来的,简单测试了一下也是可用的,通过浏览相册即可保存图片
以上就是一个fiddler抓包的简单实例,so easy~
在逆向分析中如果有能通过抓包达到目的的途径,那就首先考虑抓包吧
Fiddler是在windows上运行的程序,专门用来捕获HTTP,HTTPS的。wireshark能获取HTTP,也能获取HTTPS,但是不能解密HTTPS,所以wireshark看不懂HTTPS中的内容。 总结,如果是处理HTTP,HTTPS 还是用Fiddler, 其他协议比如TCP,UDP 就用wireshark。
https://zhuanlan.zhihu.com/p/44912855
Fiddler Script的知识点不太多,学会了Fiddler Script就可以做一些有意思的事情了.
不过在逆向学习中Fiddler主要是用来做接口分析的,希望通过这个实例,大家可以大致了解fiddler的一些特性.
欢迎关注公众号<无聊看风景>,获取更多文章