缘起

前阵子找到了Files Gallery,这是一个单文件 PHP 应用程序,可以拖放到服务器上的任何文件夹中,立即创建文件和文件夹的画廊。它支持所有文件类型,并允许你预览图像、视频、音频和文本文件。简单地说,你只需要一个PHP文件就可以搭建一个集预览/编辑/下载一身的单目录文件管理器。

但是,该程序会在你访问的时候强制弹出授权提示,你必须要购买许可证才能关闭。

由此冒出“破解”的想法。再由我强大的Google的能力,很快就如愿以偿,本篇特此记录存档,在最下面有成品。

免责声明:本项目的目的是为了学习与交流,不涉及任何商业用途或非法行为。所使用的资源仅用于技术研究和学习目的,所有相关资源将在24小时内删除。
请注意,这些资源的版权归原作者所有,本人不对任何因使用这些资源而导致的法律责任或损失负责。

过程

一开始是打算自行破解的,发现该弹窗在网页加载完毕后过一小会才弹出,猜测是单独请求了相关的授权的API,一抓确实是,他会向 https://auth.photo.gallery发送POST请求,查询当前站点是否已授权,当然我没买当然没授权啦,所以返回 {"status":0,"msg":"not found"}

那么只需要在代码中找到相关部分更改/删掉就好了。可惜找了半天也没找到,就决定动用最原始的方法——AdGuard!但想了想,这样做无异于掩耳盗铃,治标不治本,别人还是看得见,所以最后还是得动用Google的力量😂

首先找到hostloc的一篇帖子,原理是插入JS代码,实现重写GET和POST请求,分别将指定的URL中的版本号替换为 @latest/lang、将包含 auth.photo.gallery的URL修改请求内容使其始终发送固定的数据 app=2&host=demo.files.gallery

不出意外就是出意外了,网页直接加载不出来,一直显示加载动画,遂寻找其他办法。

又看到一篇文章,通过修改引用的JS文件来实现:

但是搜索了半天都找不到含有 ::$assets的玩意,搜索 ?php echo config终于找到了,::$assets被改成了 ::$version???

这下知道为什么刚刚的那个代码没法用了,原来代码改了,故最新JS代码为:

!function(){const t=window.XMLHttpRequest;window.XMLHttpRequest=function(){const e=new t;return e.open=function(n,o,s,p,l){"GET"===n&&o.startsWith("<?php echo config::$version ?>files.photo.gallery@")&&o.endsWith("/lang/zh.json")&&(arguments[1]=arguments[1].replace(/@[0-9\.]+\/lang/,"@latest/lang")),"POST"===n&&o.includes("auth.photo.gallery")&&(e.send=function(e){t.prototype.send.apply(this,["app=2&host=demo.files.gallery"])}),t.prototype.open.apply(this,arguments)},e}}();

再次打开后发现已经没有弹出了,这下舒服了。

下载

如果你懒得搞,我这也有截止文章更新时的最新版本1. 0.9.12的成品,你可以下载下来直接用:Download crack_0.9.12.php

参考文档

感谢这些大佬提供思路:
files.photo.gallery破解,支持任意版本-美国VPS综合讨论-全球主机交流论坛
Files Photo Gallery 一个单文件PHP目录程序及破解授权 - 老许Blog