Top Menu

Imagevue X3的授权保护机制研究

Imagevue X3对于未授权网站引入了一种全新的保护机制,就是在打开网页的2秒后,如果认证失败或未授权,会自动删除页面所有内容,仅保留分享按钮,留下一片空白。

在登录Imagevue X3的控制台里,Tool-》Authorize也中会显示网站域名未授权。

授权保护机制的研究

以下通过对绕过授权保护的几种尝试,来详细分析Imagevue X3的授权保护机制。

尝试一:直接修改关键词

经过代码分析,发现Imagevue X3的授权验证功能全部由 x3.min.js 文件控制,文件位置位于 public\js\0.17.0\ 。

既然Imagevue X3的授权保护方式是通过联网验证域名,那么第一种尝试,延续Imagevue X2的破解思路,直接通过修改关键语句绕过域名验证

找到包含验证网址 auth.flamepix.com 的代码片段,将关键词直接替换,或通过构造返回值绕过验证即可。

但是更改代码后,通过Network监视器分析,发现这段代码并没有实际执行,仅仅是一个吸引火力的伪装,所以想通过简单的修改并绕过关键语句的企图没有成功。

尝试二:更改JS行为

遂准备反过来思考,既然保护机制的实际行为是删除页面内容,那么在JS文件里肯定用到了 remove() 或者 empty() 方法,或者其他有 remove 关键词的方法,那么只要删除或者让这些方法失效,就能禁止保护机制删除页面内容。

遂批量查找并替换了带有 remove 关键词的方法,上传覆盖后,果然页面有内容了,但是出现了多个js错误,遂一个个修正,在修正到 removeEventListener 时,发现只要这个方法一修正,网页内容就会被清空,遂保留了这个js错误。

至此,网站已能够正常显示内容,各项主要功能也都可以正常使用,只是在使用手机访问时,页面依然会变为空白,虽然并不完美,但是确实是一个进步。

尝试三:更改POST行为

之前观察Network监视器的时候就发现,在页面第一次读取时,会POST两个参数 domain 以及 product ,至 auth.flamepix.com 进行授权验证,并返回如下值

如果是授权域名,则返回

通过在XHR行为日志中逐项分析代码,发现第三行 a.(anonymous function) 即是POST执行时调用的代码片段

定位到相应的代码片段

以上代码的功能是每次和远程服务器联网验证授权时进行POST操作,可以看到,这段代码拥有十分清晰的POST结构,两个关键的参数值也在其中,即url和data。

只是参数值使用了十分隐晦的变量名称

这个时候,就十分的简单了,根本没必要去分析每个变量具体是怎么赋值的(之前有尝试分析,不过试了下还是放弃了),只需要将POST操作的授权服务器地址更改为自己的服务器地址,由于之前已经分析了授权服务器的返回值,只需要在自己架设一个授权服务器并模拟授权服务器的返回值就行了

授权服务器的PHP文件可以这样写,主要控制方法是返回的status值,不为200的话,就会删除所有页面内容。

将这个PHP文件放入本地授权服务器中,并更改之前的 x3.min.js 代码

OK,上传修改后的 x3.min.js 文件

上传完成后,注意Imagevue X3采用了本地存储,即在chrome的Application监视器Local Storage部分可以查看到有本地内容,需要清空本地存储才能够使得对js文件做的更新生效。

清空所有缓存和本地存储,刷新页面,All Done!

尝试四:控制台授权验证

经过分析代码,控制台的授权验证和前台分离,后台验证主要依靠 panel\filemanager_js\x3_panel.js ,而经过前面的分析,思路就很清晰了,找到POST方法,然后替换授权服务器地址

找到如下代码

将其中的 "https://auth.flamepix.com/" 替换为本地授权服务器地址 "https://dev.minirplus.com/auth/" 。

All Done!这样,控制台的授权验证也被绕过了。

分析总结

通过替换POST方法中的授权服务器地址,并架设一个本地授权服务器,可以直接绕过Imagevue X3的域名授权验证机制。

Imagevue X3的授权验证机制依旧延续了Imagevue V2的架构,即通过将host和版本发送至授权服务器获得的返回值来判断是否已授权。

只是相比Imagevue V2的简单明了,Imagevue X3的授权代码明显要复杂许多,不但完全删除了函数和变量名称、加入了诱饵代码,甚至还使用了嵌套函数,各种变量的交叉替换。使得就算读懂Imagevue X3的代码都变得十分的困难,更不要说找到授权逻辑了。

这次能够顺利的成功找到授权验证机制的漏洞,完全是由于在研究后台的授权验证时发现前后台的授权验证方法十分的相似,通过关键结构的对比,才发现了前台的验证代码片段所在,同时,chrome的Console也十分的给力,XHR的每个步骤,都可以直接定位到在代码中的所在。

解决这个漏洞的方法,可以是将授权的post方法合并在其他的post方法中,这样就无法通过替换post参数中的授权服务器来绕过了,因为这样会影响到其他的post行为。

下载

(仅本地研究测试使用)

Imagevue.X3.v0.17.0.PHP.NULL

链接:http://pan.baidu.com/s/1gfs0zAV 密码:09xz

或者

进入官网https://imagevuex.com/buy/,选择试用trial,可以下载最新版本X3.23.0

或者

直接官方下载链接

Imagevue X3.24.3 (2018-01-13)

https://imagevuex.com/download/X3.24.3.zip

Imagevue.X3.24.2

https://imagevuex.com/download/X3.24.2.zip

PS

经过分析,官网下载的最新X3.23.0版本的目录结构和之前流出的版本有些许差别,但是通过相同的原理,使用Chrome的XHR分析授权代码,修改JS文件,依旧能够使用相同的方法绕过X3的认证机制。

不过最新版本已经可以免费下载和使用,仅在最下方有Imagevue链接,所以破解授权已经没有了实质性的意义。

后续

最近又研究了一下代码,发现ImagevueX3的加载过程中,如果开启了audio plugin,会多一个XHR行为,post一个参数action=audio到x3/app/x3.api.php,而这个XHR行为和获取License使用了相同的代码段,也就是说之前尝试通过修改post行为的方法其实是错误的。为了临时解决这个问题,将x3.api.php中的返回播放列表功能段加入到auth文件中,另外,如果依旧放置在外部,则无法准确获取mp3的文件路径,遂将auth文件夹调整到x3目录下。

在解决音乐播放器的问题的时候,发现x3.api.php中除了返回播放列表的功能外,还有邮件功能,所以更改post行为是不可取的。

重新研究了一下两个XHR过程,发现一个奇怪的函数 jd() ,这个函数里面总是有一些奇怪的字符,例如 jd("dGltbw==")

遂搜索找到了这个函数的定义

atob是什么?是用来解码base64字符串的函数。OK,这下就好办了。

获取License时访问的域名是什么? https://auth.photo.gallery/

那好的,用在线Base64工具将gallery转成base64格式Z2FsbGVyeQ==,搜索关键词,定位到如下语句

其中 "cGhvdG8uZ2FsbGVyeQ==" 就是要查找的关键词

发现了这个特点之后,重新检查License时调用的方法就简单了

以上语句中Ma函数调用了post函数,而其中的第一个参数 R + p + "/" 就是之前修改的post的url地址。

在下面有对应的赋值

可以看到,其中a函数是一个中转的作用,定位到a函数位置

一切都说得通了,其实a函数就是jd函数的反函数。而 R + p + "/" 其实就是 c[1]+c[4]+/ 其实也就是 "aHR0cHM6Ly9hdXRoLg=="+"cGhvdG8uZ2FsbGVyeQ=="+/ ,翻译过来也就是 https://auth.photo.gallery/

All Done!

Updated on 2019.5.3

测试了最新的X3.27.6版本,前台的bypass方式还是老方法,后台的稍稍有些变化,查找关键词aHR0cHM6Ly9hdXRoLnBob3RvLmdhbGxlcnkv替换成自己的Auth服务器地址即可。另外,还是要提醒注意需要关闭设置—>高级里的使用CDN选项。否则前台的bypass方法不会生效。

54 comments

  • Hello, guest
  • 博主你好,为何新建目录后访问的时候一直404错误,打开contact也是404,谢谢
  • 3.24.2版本按照你的方法,出现这样的问题,1.首页标题 X3 demo website 2. 点图片出现错误,猜测是路径问题,图片在..\content\gallery下,而网页指向了..\gallery 。操作时有些区别的是,我是在本地测试的,把x3_panel.js 本地验证语句修了修改 :var b=["flamepix.com","imagevuex.com","localhost","127.0.0.1","photo.gallery"],请指教
  • minirplus.能给我一个Imagevue.X3.v0.17.0.PHP.NULL.zip版本的么,链接失效了。谢谢,
  • 另外X3 相册好像没有做分页或者瀑布流加载,有这方面的插件么?还是需要自己改代码实现
  • 在VPS上(nginx) 搭了个相册玩,按照X3的规则在conf文件里面做了 rewrite,目前相册的小图预览是404, /render/w480/galleries/nature/autumn.jpg,访问不了,rewrite ^/render/. /app/parsers/slir/ last;没有生效, 本地apache倒是正常
  • 你好,目前在本地用试用版,发现新建相册只能上传本地图片,如何能用图像url替代呢,因为如果真的部署,流量太费,不如把图片都甩到腾讯云COS里面,没找到相应插入url的地方
  • x3 27.6 edited aHR0cHM6Ly9hdXRoLnBob3RvLmdhbGxlcnkv on x3_panel.js, but still show "no license find on this domain"
  • Hi,it doesn't work in version X3 27.1.I've replaced aHR0cHM6Ly9hdXRoLg==" and "cGhvdG8uZ2FsbGVyeQ==" with no result.Is in this version another location for postin "https://auth.photo.gallery/"?Nevertheless, this blog is great, thanks for sharing :)
    • author
      I just downloaded X3.27.6 and tested it. the method above to bypass the auth is still working. maybe the reason you mean it not working is because you just deleted the variable instead of replaced it with your own auth server. And to disable the Use CDN option in settings—>Advanced also.
      • 可以解释的清楚一点吗?我已找到 "cGhvdG8uZ2FsbGVyeQ==",但是真是不知道怎么改?
      • author
        用base64转换本地验证地址替换原有的验证服务器地址,https://tool.oschina.net/encrypt?type=3
      • author
        search and replace "aHR0cHM6Ly9hdXRoLg==" and "cGhvdG8uZ2FsbGVyeQ==" to your base64 encoded auth url
  •  X3 x3.24.2的htaccess规则只适用于APACHE服务器吗,我是ngnix,应该怎么配置?
    • author
      可以用这个规则转换器把htaccess转换成ngnix规则试试,https://winginx.com/en/htaccess
  • 你好,博主,我按照您的方法安装以后,只有首页可以打开,其他URL都显示404,这是什么缘故呀?
  • 請問我安裝 X3.24.3 後縮圖跟點圖片都會顯示出錯(error 3)\app\parsers\slir\slir.class.php  Line 1195錯誤的圖片https://upload.cc/i/QXCtHe.jpgPHP是用7.2.1請問如何修復這個問體 ,謝謝你
    • author
      看上去是xampp的Symlink问题,我在xampp环境下试了下,确实是有问题,关闭Symlink request cache就可以在xampp下使用了,关闭方法是Settings-》Advanced-》Image Resizer-》关闭Symlink request cache
      • 謝謝你,使用你的修改方法後,就可正常使用非常感謝你
  • You are brilliant! is there anyway to disable X3 footer using the free version of X3.24.2? Thanks in advance
    • author
      To disable the footer, you must authorized the x3 instance you used. When you authorized it, you can delete the content in the footer from Panel->Settings->Footer. Otherwise you will have no power to change anything form footer.
    • author
      进入panel——》setting——》Footer,删除{{copy}}或替换成自己的链接即可,当然前提是副本需要通过授权验证,否则删除{{copy}}也不会有任何作用
  • author
    更新(解决无法读取音乐播放列表问题,解决安装在子目录问题):版本:3.24.2 下载:https://imagevuex.com/download/X3.24.2.zip 链接: https://pan.baidu.com/s/1nvvbGBR 密码: 9bgj, 1.将auth文件夹放在x3/下, 2.将x3.min.js覆盖x3/app/public/js/3.24.2, 3.将x3_panel.js覆盖x3/panel/filemanager_js, 4.进入panel-》setting-》advanced关闭Use X3 CDN All Done!
    • author
      ?,但是还是喜欢X2的简单方便,直接把照片拖进去就可以了,X3感觉要设置的东西有好多,要仔细研究的东西太多,不适合广大吃瓜群众的艺术需求
      • X2慢多了,国内的朋友访问不到,X3快多,国内的朋友访问无压力,个人感觉X3比X2容易设置。另外X3的音乐不能播放,研究了好久都不能解决。请问博主大师有解决方法吗?
      • author
        放弃修改,用官方原版就可以播放音乐了,修改代码会导致出现这个问题。因为新版通过API获取音乐列表,而获取API的方法和获取License的方法是同一个,所以修改获取License的地址会影响获取音乐列表。(已解决)
      • 使用Imagevue官方提供的服务器解决方案哦,只需19元/月,就可以获得10GB相册空间和Imagevue X3永久升级 .............. 我的相册图片50G.   :-()
      • 谢谢您的指教,如果用原版的话,有没有限期?有什么其他的限制呢?永久使用吗?谢谢您!
  • rewrite的问题,相册取不到index.php位置,现在的绝对位置是/yayaco/yayaco/gallery/index.php,这个要怎么设置,小白不懂
    • author
      一般不用设置,出现这个问题可能是由于子目录的rewrite规则被其他规则影响
      • author
        你好,如果是服务器环境搭建方面有问题,可以尝试使用Imagevue官方提供的服务器解决方案哦,只需19元/月,就可以获得10GB相册空间和Imagevue X3永久升级哦,有需要可以访问https://flamepix.com/
  • 大师是否可以把修改过的文件发一份给俺呢?俺是会开车不会修车的司机,只会换轮胎司机。谢谢您!
    • author
      版本:3.24.2 下载:https://imagevuex.com/download/X3.24.2.zip 链接: https://pan.baidu.com/s/1nvvbGBR 密码: 9bgj, 1.将auth文件夹放在域名根目录, 2.将x3.min.js覆盖x3/app/public/js/3.24.2, 3.将x3_panel.js覆盖x3/panel/filemanager_js, 4.进入panel-》setting-》advanced关闭Use X3 CDN All Done!
      • 大师,相册不工作,看不到图片,找了半天找不到原因。:-(http://ya-ya.co/gallery/
      • author
        rewrite的问题,相册取不到index.php位置,现在的绝对位置是/yayaco/yayaco/gallery/index.php

Powered by WordPress. Designed by WooThemes