From 8294293c25fc9323baa497d5cf10a95fef540dbe Mon Sep 17 00:00:00 2001
From: flt6 <1404262047@qq.com>
Date: Sun, 12 Mar 2023 15:53:37 +0800
Subject: [PATCH] =?UTF-8?q?=F0=9F=93=83=20docs(zxxk):=20Make=20reserve=20p?=
=?UTF-8?q?rocess?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Former-commit-id: 88583b75c236764204f9f280417d1e604e10a7bc
---
zxxk_dl/json.drawio | 1 +
zxxk_dl/main.py | 1 -
zxxk_dl/process.md | 213 ++++++++++++++++++++++++++++++++++++++++
zxxk_dl/screeshot/1.png | Bin 0 -> 207211 bytes
zxxk_dl/screeshot/2.png | Bin 0 -> 140611 bytes
zxxk_dl/screeshot/3.png | Bin 0 -> 171675 bytes
zxxk_dl/screeshot/4.png | Bin 0 -> 92999 bytes
zxxk_dl/screeshot/5.png | Bin 0 -> 132649 bytes
8 files changed, 214 insertions(+), 1 deletion(-)
create mode 100644 zxxk_dl/json.drawio
create mode 100644 zxxk_dl/process.md
create mode 100644 zxxk_dl/screeshot/1.png
create mode 100644 zxxk_dl/screeshot/2.png
create mode 100644 zxxk_dl/screeshot/3.png
create mode 100644 zxxk_dl/screeshot/4.png
create mode 100644 zxxk_dl/screeshot/5.png
diff --git a/zxxk_dl/json.drawio b/zxxk_dl/json.drawio
new file mode 100644
index 0000000..747e1b1
--- /dev/null
+++ b/zxxk_dl/json.drawio
@@ -0,0 +1 @@
+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
\ No newline at end of file
diff --git a/zxxk_dl/main.py b/zxxk_dl/main.py
index 32cc118..eff3a92 100644
--- a/zxxk_dl/main.py
+++ b/zxxk_dl/main.py
@@ -1,5 +1,4 @@
import requests
-from time import strftime
from re import findall, sub
from hashlib import md5
diff --git a/zxxk_dl/process.md b/zxxk_dl/process.md
new file mode 100644
index 0000000..60f3ccc
--- /dev/null
+++ b/zxxk_dl/process.md
@@ -0,0 +1,213 @@
+# 对于某网站预览文档分析
+
+Released in [52pojie](https://www.52pojie.cn/thread-1757323-1-1.html)
+
+## 背景
+
+某网站资源页面存在预览,有的只有部分,有的能显示全部。对于文字版文档,文件是矢量版,看起来效果很好。
+
+## 预览数据抓包
+
+在页面内打开一个没有打开的文档,抓包找到大量svg文件请求:
+
+链接(已隐藏部分数据):
+
+```url
+https://preview.*****.com/resource/oss/preview/rbm-preview-product/rbm/*******/svg/6.svg?Expires=167*****11&Signature=qK47**********rYq43G6Q%3D
+```
+
+将抓包数据导入apifox,删除cookie和header测试是否存在验证,结果证明不存在除了url param外的其他认证。
+
+## 寻找根源请求数据
+
+上文已经找到了每一页预览的请求,但是由于`Signature`的存在还是无法实现自动请求。刷新页面,搜索上述链接可能的关键词`preview`。
+
+观察到有一个疑似请求:
+
+```url
+https://www.****.com/soft/Preview/FirstLoadPreviewJson?softID=33****78&fileaddress=&type=3&product=1&v=2&FullPreview=false
+```
+
+响应内容是一个json:
+
+```json
+{
+ "code": 0,
+ "success": false,
+ "data": {
+ "IsSuccess": true,
+ "IsRar": true,
+ "SoftExt": null,
+ "Html": "\r\n\u003cstyle\u003e\r\n {{请求内容过长忽略}} \u003e\r\nHHHHHHisrar",
+ "PreviewPage": 0,
+ "TotalPage": 0,
+ "rarPreviewInfo": [
+ {
+ "FileId": 38****99,
+ "Html": "\r\n\u003cdiv class=\"multiple-date-preview-file\" data-index=\"3****499\"\u003e\r\n \u003cdiv class=\"preview-main\"\u003e\r\n \r\n \u003cimg data-original=\"https://preview.***.com/resource/oss/preview/rbm-preview-product/rbm/38****99/svg/1.svg?Expires=1678604711\u0026Signature=7w%2BPVktPi********5Lha0%3D\" onselectstart=\"return false\" /\u003e\u003cimg data-original=\"https://preview.***.com/resource/oss/preview/rbm-preview-product/rbm/38****99/svg/2.svg?Expires=16****4711\u0026Signature=zt20********BQ1RGZDlTaB0%3D\" onselectstart=\"return false\" /\u003e\u003c {{以下存在类似内容,忽略}} \u003c/div\u003e\r\n\u003c/div\u003e\r\n\u003cscript\u003e\r\n document.oncontextmenu = function () {\r\n window.event.returnValue = false;\r\n };\r\n var pageNum = 9;\r\n var hasPreview = true;\r\n if (pageNum \u0026\u0026 window.setDocumentPageNum) {\r\n window.setDocumentPageNum(pageNum, hasPreview);\r\n }\r\n\u003c/script\u003e\r\n\r\n",
+ "SoftName": "************.docx",
+ "IconClassName": "icon-doc-doc",
+ "TotalPage": 9,
+ "PreviewPage": 9,
+ "IsMedia": false,
+ "Url": null
+ },
+ {
+ "FileId": 3****500,
+ "Html": "{{类似上文}}",
+ "SoftName": "********.docx",
+ "IconClassName": "icon-doc-doc",
+ "TotalPage": 5,
+ "PreviewPage": 5,
+ "IsMedia": false,
+ "Url": null
+ }
+ ]
+ },
+ "msg": "预览错误",
+ "message": null
+}
+```
+
+PS:上文中的`"msg": "预览错误"`对任意都相同,忽略。
+
+经分析,上文的第一个`Html`内容基本无效,都时限制用户的脚本。
+`rarPreviewInfo`中的`Html`内容格式化后如下:
+
+```html
+
+
+
+
![]()
+
![]()
+
+
+
+
+```
+
+显然,preview链接被直接返回了,经检验该链接可以直接请求。
+最后导入apifox验证后可以确定无需特殊headers或cookies。
+
+## 最小化请求链接和寻找相关参数
+
+当前链接参数:
+
+SoftID可以直接在文档页面的链接中可以找到:
+
+```url
+https://www.****.com/soft/33****78.html
+```
+
+上文的`33****78`即为softID
+
+`type`, `product`, `v`参数不知道用途,对任意文档都是相同的,疑似网站作者还没有实现,直接引用原文了。
+
+`FullPreview`原本是`false`,改为`true`就直接返回全部内容的预览了.....
+
+## 分析返回的json
+
+测试了多个文档后确定一下结论:
+
+## demo代码
+
+**代码无法运行,因为关键域名被"\*"替代**
+
+```python
+import requests
+from re import findall, sub
+from hashlib import md5
+
+HTML_FORMAT ='''
+
+
+
+{title}
+
+
+
+{body}
+
+
+
+'''
+
+def writefile(filename,text):
+ filename = sub(r"""[\*\/\\\|\<\>\? \:\.\'\"\!]""", "", filename)
+ unique = md5(text.encode())
+ filename += "_"+unique.hexdigest()[:5]
+ filename+=".html"
+ print("Writing "+filename)
+ # print("-=-=-=-=\n",text,"\n-=-=-=-=")
+ with open(filename+'.html', 'w', encoding="utf-8") as f:
+ f.write(text)
+
+
+def main():
+ softID=input("ID: ")
+ url = "https://www.*******.com/soft/Preview/FirstLoadPreviewJson?softID={}&type=3&product=1&v=2&FullPreview=true"
+ response = requests.get(url.format(softID))
+ if response.status_code!=200:
+ print("ERROR")
+ print(response.status_code)
+ return -1
+ ret=response.json()["data"]
+ if not ret["IsSuccess"]:
+ print("ERROR: IsSuccess option is not true")
+ print(ret)
+ if not ret['IsRar']:
+ print("Not rar")
+ print("TotalPage=%d" % ret['TotalPage'])
+ print("SoftExt=%s" % ret['SoftExt'])
+ try:
+ html=ret["Html"]
+ print(ret)
+ except:
+ print(ret)
+ exit(1)
+ # replace "data-original" to "src" for showing in browser
+ html=html.replace("data-original", "src")
+ writefile(f"{softID}",html)
+ else:
+ print("is RAR")
+ rar=ret['rarPreviewInfo']
+ for file in rar:
+ html=file["Html"]
+ title=file["SoftName"]
+ # replace "data-original" to "src" for showing in browser
+ # html=html.replace("data-original", "src")
+ urls=findall("(?<=data-original=\")https://preview.*******.com/\\S+(?=\")",html)
+ l=[]
+ for url in urls:
+ if "jpg" in url:
+ l.append(f"
")
+ continue
+ page=requests.get(url,cookies=response.cookies)
+ if not page.status_code==200:
+ print(page)
+ print(page.status_code)
+ print(page.text)
+ assert page.status_code==200
+ l.append(page.text)
+ format_html=HTML_FORMAT.format(title=title,body="\n".join(l))
+ writefile(title,format_html)
+
+if __name__ == "__main__":
+ while True:
+ main()
+```
diff --git a/zxxk_dl/screeshot/1.png b/zxxk_dl/screeshot/1.png
new file mode 100644
index 0000000000000000000000000000000000000000..cadfd6b52074a6c119a249876ae841e69c9e2fc2
GIT binary patch
literal 207211
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