X3 photo gallery是一款简单,漂亮,功能强大的相册程序,不用数据库,直接读取文件夹内容。有免费版和专业版区分,相比$75的个人版和$150的专业版,免费版只是少了全景功能和底部有不可更改的版权信息,除此之外没有太大差距。
有意思的是免费一旦自行修改版权信息,网页就会弹窗提示未授权并跳转官网,在查看代码过程发现当中引用了几个伪装的授权代码,即使除去了没能真正除去版权信息,本文主要是为了探讨学习与研究记录一下学习过程。有需要请支持正版,其实免费版足以解决大部分需求。
DEMO:https://shanliang.xyz/
![图片[1]-X3 photo gallery简单的相册程序,伪授权方法-李峰博客](https://img.lifeng.hk/2021/05/20210516140653352.png)
-------------------------------------------------------------------------------
- 安装
 
前面最新版是3.30.1,官网下载链接:https://www.photo.gallery/downloads/
安装环境:PHP 5.3 或更高,需要PHP扩展 GD 和 Mcrypt 。
安装过程接不多说了,参考官方详细文档
需要注意的的伪静态设置是,如果原来配置文档有涉及js,css的设置建议先删除。(例如宝塔需要删除原来配置文档里面location ~js jpg...那部分)
nginx伪静态
location / {
    if (!-e $request_filename){
      # Rewrite any calls to html|json|xml|atom|rss if a folder matching * exists
      rewrite (.+)\.(html|json|xml|atom|rss)$ $1/ last;
      # Rewrite any calls to /render to the X3 image resizer
      rewrite ^/render/. /app/parsers/slir/ last;
      # Rewrite routes to X3 application index.php if they are non-existent files/dirs
      rewrite ^(.*)$ /index.php?$1 last;
    }
  }
  # Prevent web access to X3 /config and /_cache directories
  location ~ /(config|_cache) {
    deny all;
  }
-------------------------------------------------------------------------------
- 伪授权
 
以这个版本为例,目标:把验证网址https://auth.photo.gallery/改成 /auth
在/auth放入自己的授权文件
1)前台 修改 /app/public/js/3.30.1/x3.min.js
搜索 aHR0cHM6Ly9hdXRoLg== 替换为 Lw==
搜索 cGhvdG8uZ2FsbGVyeQ== 替换为 YXV0aA==
代码为base64加密,解密后对应
aHR0cHM6Ly9hdXRoLg== →→→ https://auth cGhvdG8uZ2FsbGVyeQ== →→→ photo.gallery Lw== →→→ / YXV0aA== →→→ auth
2)后台 修改 /panel/filemanager_js/x3_panel.js
搜索 aHR0cHM6Ly9hdXRoLnBob3RvLmdhbGxlcnkv 替换为 L2F1dGgv
代码为base64加密,解密后对应
aHR0cHM6Ly9hdXRoLnBob3RvLmdhbGxlcnkv →→→ https://auth.photo.gallery/ L2F1dGgv →→→ /auth/
3)修改使用本地x3.min.js,方法有二
一是修改引用文件:
修改/app/templates/cc/29/202264ab201d0d43a63882c31b1c06ae7e7992a5c371c52f885633d0acfa.php
大概第71行
$context["core_js"] = (("https://cdn.jsdelivr.net/npm/x3.photo.gallery@" . $this->getAttribute((isset($context["page"]) ? $context["page"] : null), "x3_version")) . "/js/x3.min.js");      
修改为:
$context["core_js"] = ("/app/public/js/3.30.1/x3.min.js");
二是后台设置取消cdn,全部使用本地静态:
在后台设置->高级-CDN,取消勾选。
4)新建 验证文件/auth/index.php
简单模式:
<?php 
header('Access-Control-Allow-Origin: *');
header('content-type:application/json');
echo '{"status":200,"message":"License is valid.","parameters":{"type":"1"}}';
?>
或者指定域名模式
<?删除php 
header('Access-Control-Allow-Origin: *');
header('content-type:application/json');
$allowed_hosts = array('shanliang.xyz', 'p2.btu.pp.ua'); //修改为自己域名
if (in_array($_SERVER['SERVER_NAME'], $allowed_hosts)) {
    echo '{"status":200,"message":"License is valid [btu.pp.ua]","parameters":{"type":"1"}}';
}else{
    echo '{"status":301,"message":"License not Found"}';
}
?>
这样应该可以了。
好像POST授权网址后,只要status返回的代码不是301,它就不会判断是不是正版,不再进行下一步的弹窗和跳转了
-------------------------------------------------------------------------------
目前个人使用遇到最大问题
文件夹不支持 #$%^&*()+=[]'"/\|{}`~!@.
Other disallowed characters
Other characters that are not allowed in folder names include #$%^&*()+=[]'"/\|{}`~!@. Most of these characters are simply not allowed in URL's, while some characters are disallowed because they break the functionality of X3.











淡淡 1年前0 
感谢分享椰奶燕麦粥 1年前0 
挺好的 加油!!!!雨精靈
 1年前0 
人生不管結局如何,努力過,揮灑過屬於自己的青春,也不枉人生走一遭,別讓負面情緒消耗自己,縱有疾風起,人生不言棄,加油!!用户19344506 1年前0 
挺好的,加油!雨精靈
 1年前0 
就怕來不及努力,遺憾已造成 人總會因為價值觀的不同造成一些誤解 當你明白了,他們已悄然離去 明日復明日,明日何其多 我若待明日,萬事成蹉跎雨精靈
 1年前0 
既然有遺憾,何不去珍惜,人生數十載,匆匆已回首,故人相辭去,獨留白頭翁梦屿 2年前0 
感谢博主分享