├── 1688 ├── jscode.js └── run.py ├── .gitignore ├── 51job └── run.py ├── LICENSE ├── bidcenter ├── jscode.js └── run.py ├── chinaindex ├── jscode.js └── run.py ├── cninfo ├── jscode.js └── run.py ├── ctbpsp ├── jscode.js └── run.py ├── endata ├── jscode.js └── run.py ├── hanghangcha └── jscode.js ├── liepin ├── jscode.js └── run.py ├── mohurd ├── 1.png ├── jscode.js └── run.py ├── package-lock.json ├── package.json ├── qimai ├── jscode.js └── rub.py ├── readme.md ├── requirements.txt ├── spolicy ├── jscode.js └── run.py ├── swhysc ├── jscode.js └── run.py ├── wangyiyun ├── jscode.js └── run.py ├── xiniudata ├── img │ ├── 1.png │ ├── 2.png │ ├── 3.png │ ├── 4.png │ ├── 5.png │ └── 6.png ├── jscode.js └── readme.md ├── xueqiu ├── jscode.js └── run.py └── zzzmh ├── img ├── 1.png ├── 2.png ├── 3.png ├── 4.png ├── 5.png ├── 6.png ├── 7.png ├── 8.png └── 9.png ├── jscode.js ├── readme.md └── run.py /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | lerna-debug.log* 8 | 9 | # Diagnostic reports (https://nodejs.org/api/report.html) 10 | report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json 11 | 12 | # Runtime data 13 | pids 14 | *.pid 15 | *.seed 16 | *.pid.lock 17 | 18 | # Directory for instrumented libs generated by jscoverage/JSCover 19 | lib-cov 20 | 21 | # Coverage directory used by tools like istanbul 22 | coverage 23 | *.lcov 24 | 25 | # nyc test coverage 26 | .nyc_output 27 | 28 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) 29 | .grunt 30 | 31 | # Bower dependency directory (https://bower.io/) 32 | bower_components 33 | 34 | # node-waf configuration 35 | .lock-wscript 36 | 37 | # Compiled binary addons (https://nodejs.org/api/addons.html) 38 | build/Release 39 | 40 | # Dependency directories 41 | node_modules/ 42 | jspm_packages/ 43 | 44 | # TypeScript v1 declaration files 45 | typings/ 46 | 47 | # TypeScript cache 48 | *.tsbuildinfo 49 | 50 | # Optional npm cache directory 51 | .npm 52 | 53 | # Optional eslint cache 54 | .eslintcache 55 | 56 | # Microbundle cache 57 | .rpt2_cache/ 58 | .rts2_cache_cjs/ 59 | .rts2_cache_es/ 60 | .rts2_cache_umd/ 61 | 62 | # Optional REPL history 63 | .node_repl_history 64 | 65 | # Output of 'npm pack' 66 | *.tgz 67 | 68 | # Yarn Integrity file 69 | .yarn-integrity 70 | 71 | # dotenv environment variables file 72 | .env 73 | .env.test 74 | 75 | # parcel-bundler cache (https://parceljs.org/) 76 | .cache 77 | 78 | # Next.js build output 79 | .next 80 | 81 | # Nuxt.js build / generate output 82 | .nuxt 83 | dist 84 | 85 | # Gatsby files 86 | .cache/ 87 | # Comment in the public line in if your project uses Gatsby and not Next.js 88 | # https://nextjs.org/blog/next-9-1#public-directory-support 89 | # public 90 | 91 | # vuepress build output 92 | .vuepress/dist 93 | 94 | # Serverless directories 95 | .serverless/ 96 | 97 | # FuseBox cache 98 | .fusebox/ 99 | 100 | # DynamoDB Local files 101 | .dynamodb/ 102 | 103 | # TernJS port file 104 | .tern-port 105 | 106 | # Stores VSCode versions used for testing VSCode extensions 107 | .vscode-test 108 | 109 | 110 | # General 111 | .DS_Store 112 | .AppleDouble 113 | .LSOverride 114 | 115 | # Icon must end with two \r 116 | Icon 117 | 118 | 119 | # Thumbnails 120 | ._* 121 | 122 | # Files that might appear in the root of a volume 123 | .DocumentRevisions-V100 124 | .fseventsd 125 | .Spotlight-V100 126 | .TemporaryItems 127 | .Trashes 128 | .VolumeIcon.icns 129 | .com.apple.timemachine.donotpresent 130 | 131 | # Directories potentially created on remote AFP share 132 | .AppleDB 133 | .AppleDesktop 134 | Network Trash Folder 135 | Temporary Items 136 | .apdisk 137 | 138 | 139 | # Byte-compiled / optimized / DLL files 140 | __pycache__/ 141 | *.py[cod] 142 | *$py.class 143 | 144 | # C extensions 145 | *.so 146 | 147 | # Distribution / packaging 148 | .Python 149 | build/ 150 | develop-eggs/ 151 | dist/ 152 | downloads/ 153 | eggs/ 154 | .eggs/ 155 | lib/ 156 | lib64/ 157 | parts/ 158 | sdist/ 159 | var/ 160 | wheels/ 161 | pip-wheel-metadata/ 162 | share/python-wheels/ 163 | *.egg-info/ 164 | .installed.cfg 165 | *.egg 166 | MANIFEST 167 | 168 | # PyInstaller 169 | # Usually these files are written by a python script from a template 170 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 171 | *.manifest 172 | *.spec 173 | 174 | # Installer logs 175 | pip-log.txt 176 | pip-delete-this-directory.txt 177 | 178 | # Unit test / coverage reports 179 | htmlcov/ 180 | .tox/ 181 | .nox/ 182 | .coverage 183 | .coverage.* 184 | .cache 185 | nosetests.xml 186 | coverage.xml 187 | *.cover 188 | *.py,cover 189 | .hypothesis/ 190 | .pytest_cache/ 191 | 192 | # Translations 193 | *.mo 194 | *.pot 195 | 196 | # Django stuff: 197 | *.log 198 | local_settings.py 199 | db.sqlite3 200 | db.sqlite3-journal 201 | 202 | # Flask stuff: 203 | instance/ 204 | .webassets-cache 205 | 206 | # Scrapy stuff: 207 | .scrapy 208 | 209 | # Sphinx documentation 210 | docs/_build/ 211 | 212 | # PyBuilder 213 | target/ 214 | 215 | # Jupyter Notebook 216 | .ipynb_checkpoints 217 | 218 | # IPython 219 | profile_default/ 220 | ipython_config.py 221 | 222 | # pyenv 223 | # For a library or package, you might want to ignore these files since the code is 224 | # intended to run in multiple environments; otherwise, check them in: 225 | # .python-version 226 | 227 | # pipenv 228 | # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. 229 | # However, in case of collaboration, if having platform-specific dependencies or dependencies 230 | # having no cross-platform support, pipenv may install dependencies that don't work, or not 231 | # install all needed dependencies. 232 | #Pipfile.lock 233 | 234 | # PEP 582; used by e.g. github.com/David-OConnor/pyflow 235 | __pypackages__/ 236 | 237 | # Celery stuff 238 | celerybeat-schedule 239 | celerybeat.pid 240 | 241 | # SageMath parsed files 242 | *.sage.py 243 | 244 | # Environments 245 | .env 246 | .venv 247 | env/ 248 | venv/ 249 | ENV/ 250 | env.bak/ 251 | venv.bak/ 252 | 253 | # Spyder project settings 254 | .spyderproject 255 | .spyproject 256 | 257 | # Rope project settings 258 | .ropeproject 259 | 260 | # mkdocs documentation 261 | /site 262 | 263 | # mypy 264 | .mypy_cache/ 265 | .dmypy.json 266 | dmypy.json 267 | 268 | # Pyre type checker 269 | .pyre/ 270 | 271 | # pytype static type analyzer 272 | .pytype/ 273 | 274 | 275 | # Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and WebStorm 276 | # Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 277 | 278 | # User-specific stuff 279 | .idea/**/workspace.xml 280 | .idea/**/tasks.xml 281 | .idea/**/usage.statistics.xml 282 | .idea/**/dictionaries 283 | .idea/**/shelf 284 | 285 | # Generated files 286 | .idea/**/contentModel.xml 287 | 288 | # Sensitive or high-churn files 289 | .idea/**/dataSources/ 290 | .idea/**/dataSources.ids 291 | .idea/**/dataSources.local.xml 292 | .idea/**/sqlDataSources.xml 293 | .idea/**/dynamic.xml 294 | .idea/**/uiDesigner.xml 295 | .idea/**/dbnavigator.xml 296 | 297 | # Gradle 298 | .idea/**/gradle.xml 299 | .idea/**/libraries 300 | 301 | # Gradle and Maven with auto-import 302 | # When using Gradle or Maven with auto-import, you should exclude module files, 303 | # since they will be recreated, and may cause churn. Uncomment if using 304 | # auto-import. 305 | # .idea/artifacts 306 | # .idea/compiler.xml 307 | # .idea/jarRepositories.xml 308 | # .idea/modules.xml 309 | # .idea/*.iml 310 | # .idea/modules 311 | # *.iml 312 | # *.ipr 313 | 314 | # CMake 315 | cmake-build-*/ 316 | 317 | # Mongo Explorer plugin 318 | .idea/**/mongoSettings.xml 319 | 320 | # File-based project format 321 | *.iws 322 | 323 | # IntelliJ 324 | out/ 325 | 326 | # mpeltonen/sbt-idea plugin 327 | .idea_modules/ 328 | 329 | # JIRA plugin 330 | atlassian-ide-plugin.xml 331 | 332 | # Cursive Clojure plugin 333 | .idea/replstate.xml 334 | 335 | # Crashlytics plugin (for Android Studio and IntelliJ) 336 | com_crashlytics_export_strings.xml 337 | crashlytics.properties 338 | crashlytics-build.properties 339 | fabric.properties 340 | 341 | # Editor-based Rest Client 342 | .idea/httpRequests 343 | 344 | # Android studio 3.1+ serialized cache file 345 | .idea/caches/build_file_checksums.ser -------------------------------------------------------------------------------- /1688/jscode.js: -------------------------------------------------------------------------------- 1 | function h(a) { 2 | function b(a, b) { 3 | return a << b | a >>> 32 - b 4 | } 5 | 6 | function c(a, b) { 7 | var c, d, e, f, g; 8 | return e = 2147483648 & a, 9 | f = 2147483648 & b, 10 | c = 1073741824 & a, 11 | d = 1073741824 & b, 12 | g = (1073741823 & a) + (1073741823 & b), 13 | c & d ? 2147483648 ^ g ^ e ^ f : c | d ? 1073741824 & g ? 3221225472 ^ g ^ e ^ f : 1073741824 ^ g ^ e ^ f : g ^ e ^ f 14 | } 15 | 16 | function d(a, b, c) { 17 | return a & b | ~a & c 18 | } 19 | 20 | function e(a, b, c) { 21 | return a & c | b & ~c 22 | } 23 | 24 | function f(a, b, c) { 25 | return a ^ b ^ c 26 | } 27 | 28 | function g(a, b, c) { 29 | return b ^ (a | ~c) 30 | } 31 | 32 | function h(a, e, f, g, h, i, j) { 33 | return a = c(a, c(c(d(e, f, g), h), j)), 34 | c(b(a, i), e) 35 | } 36 | 37 | function i(a, d, f, g, h, i, j) { 38 | return a = c(a, c(c(e(d, f, g), h), j)), 39 | c(b(a, i), d) 40 | } 41 | 42 | function j(a, d, e, g, h, i, j) { 43 | return a = c(a, c(c(f(d, e, g), h), j)), 44 | c(b(a, i), d) 45 | } 46 | 47 | function k(a, d, e, f, h, i, j) { 48 | return a = c(a, c(c(g(d, e, f), h), j)), 49 | c(b(a, i), d) 50 | } 51 | 52 | function l(a) { 53 | for (var b, c = a.length, d = c + 8, e = (d - d % 64) / 64, f = 16 * (e + 1), g = new Array(f - 1), h = 0, i = 0; c > i;) 54 | b = (i - i % 4) / 4, 55 | h = i % 4 * 8, 56 | g[b] = g[b] | a.charCodeAt(i) << h, 57 | i++; 58 | return b = (i - i % 4) / 4, 59 | h = i % 4 * 8, 60 | g[b] = g[b] | 128 << h, 61 | g[f - 2] = c << 3, 62 | g[f - 1] = c >>> 29, 63 | g 64 | } 65 | 66 | function m(a) { 67 | var b, c, d = "", e = ""; 68 | for (c = 0; 3 >= c; c++) 69 | b = a >>> 8 * c & 255, 70 | e = "0" + b.toString(16), 71 | d += e.substr(e.length - 2, 2); 72 | return d 73 | } 74 | 75 | function n(a) { 76 | a = a.replace(/\r\n/g, "\n"); 77 | for (var b = "", c = 0; c < a.length; c++) { 78 | var d = a.charCodeAt(c); 79 | 128 > d ? b += String.fromCharCode(d) : d > 127 && 2048 > d ? (b += String.fromCharCode(d >> 6 | 192), 80 | b += String.fromCharCode(63 & d | 128)) : (b += String.fromCharCode(d >> 12 | 224), 81 | b += String.fromCharCode(d >> 6 & 63 | 128), 82 | b += String.fromCharCode(63 & d | 128)) 83 | } 84 | return b 85 | } 86 | 87 | var o, p, q, r, s, t, u, v, w, x = [], y = 7, z = 12, A = 17, B = 22, C = 5, D = 9, E = 14, F = 20, G = 4, H = 11, 88 | I = 16, J = 23, K = 6, L = 10, M = 15, N = 21; 89 | for (a = n(a), 90 | x = l(a), 91 | t = 1732584193, 92 | u = 4023233417, 93 | v = 2562383102, 94 | w = 271733878, 95 | o = 0; o < x.length; o += 16) 96 | p = t, 97 | q = u, 98 | r = v, 99 | s = w, 100 | t = h(t, u, v, w, x[o + 0], y, 3614090360), 101 | w = h(w, t, u, v, x[o + 1], z, 3905402710), 102 | v = h(v, w, t, u, x[o + 2], A, 606105819), 103 | u = h(u, v, w, t, x[o + 3], B, 3250441966), 104 | t = h(t, u, v, w, x[o + 4], y, 4118548399), 105 | w = h(w, t, u, v, x[o + 5], z, 1200080426), 106 | v = h(v, w, t, u, x[o + 6], A, 2821735955), 107 | u = h(u, v, w, t, x[o + 7], B, 4249261313), 108 | t = h(t, u, v, w, x[o + 8], y, 1770035416), 109 | w = h(w, t, u, v, x[o + 9], z, 2336552879), 110 | v = h(v, w, t, u, x[o + 10], A, 4294925233), 111 | u = h(u, v, w, t, x[o + 11], B, 2304563134), 112 | t = h(t, u, v, w, x[o + 12], y, 1804603682), 113 | w = h(w, t, u, v, x[o + 13], z, 4254626195), 114 | v = h(v, w, t, u, x[o + 14], A, 2792965006), 115 | u = h(u, v, w, t, x[o + 15], B, 1236535329), 116 | t = i(t, u, v, w, x[o + 1], C, 4129170786), 117 | w = i(w, t, u, v, x[o + 6], D, 3225465664), 118 | v = i(v, w, t, u, x[o + 11], E, 643717713), 119 | u = i(u, v, w, t, x[o + 0], F, 3921069994), 120 | t = i(t, u, v, w, x[o + 5], C, 3593408605), 121 | w = i(w, t, u, v, x[o + 10], D, 38016083), 122 | v = i(v, w, t, u, x[o + 15], E, 3634488961), 123 | u = i(u, v, w, t, x[o + 4], F, 3889429448), 124 | t = i(t, u, v, w, x[o + 9], C, 568446438), 125 | w = i(w, t, u, v, x[o + 14], D, 3275163606), 126 | v = i(v, w, t, u, x[o + 3], E, 4107603335), 127 | u = i(u, v, w, t, x[o + 8], F, 1163531501), 128 | t = i(t, u, v, w, x[o + 13], C, 2850285829), 129 | w = i(w, t, u, v, x[o + 2], D, 4243563512), 130 | v = i(v, w, t, u, x[o + 7], E, 1735328473), 131 | u = i(u, v, w, t, x[o + 12], F, 2368359562), 132 | t = j(t, u, v, w, x[o + 5], G, 4294588738), 133 | w = j(w, t, u, v, x[o + 8], H, 2272392833), 134 | v = j(v, w, t, u, x[o + 11], I, 1839030562), 135 | u = j(u, v, w, t, x[o + 14], J, 4259657740), 136 | t = j(t, u, v, w, x[o + 1], G, 2763975236), 137 | w = j(w, t, u, v, x[o + 4], H, 1272893353), 138 | v = j(v, w, t, u, x[o + 7], I, 4139469664), 139 | u = j(u, v, w, t, x[o + 10], J, 3200236656), 140 | t = j(t, u, v, w, x[o + 13], G, 681279174), 141 | w = j(w, t, u, v, x[o + 0], H, 3936430074), 142 | v = j(v, w, t, u, x[o + 3], I, 3572445317), 143 | u = j(u, v, w, t, x[o + 6], J, 76029189), 144 | t = j(t, u, v, w, x[o + 9], G, 3654602809), 145 | w = j(w, t, u, v, x[o + 12], H, 3873151461), 146 | v = j(v, w, t, u, x[o + 15], I, 530742520), 147 | u = j(u, v, w, t, x[o + 2], J, 3299628645), 148 | t = k(t, u, v, w, x[o + 0], K, 4096336452), 149 | w = k(w, t, u, v, x[o + 7], L, 1126891415), 150 | v = k(v, w, t, u, x[o + 14], M, 2878612391), 151 | u = k(u, v, w, t, x[o + 5], N, 4237533241), 152 | t = k(t, u, v, w, x[o + 12], K, 1700485571), 153 | w = k(w, t, u, v, x[o + 3], L, 2399980690), 154 | v = k(v, w, t, u, x[o + 10], M, 4293915773), 155 | u = k(u, v, w, t, x[o + 1], N, 2240044497), 156 | t = k(t, u, v, w, x[o + 8], K, 1873313359), 157 | w = k(w, t, u, v, x[o + 15], L, 4264355552), 158 | v = k(v, w, t, u, x[o + 6], M, 2734768916), 159 | u = k(u, v, w, t, x[o + 13], N, 1309151649), 160 | t = k(t, u, v, w, x[o + 4], K, 4149444226), 161 | w = k(w, t, u, v, x[o + 11], L, 3174756917), 162 | v = k(v, w, t, u, x[o + 2], M, 718787259), 163 | u = k(u, v, w, t, x[o + 9], N, 3951481745), 164 | t = c(t, p), 165 | u = c(u, q), 166 | v = c(v, r), 167 | w = c(w, s); 168 | var O = m(t) + m(u) + m(v) + m(w); 169 | return O.toLowerCase() 170 | } 171 | 172 | function getSign(data, i) { 173 | token = '92787c3d2a2cb937574f45f6ffaafa11' 174 | // i = (new Date).getTime() 175 | g = "12574478" 176 | // data = '{"fcGroup":"cbu-seller-fc","fcName":"factory-recommend-service-fn","serviceName":"tpFacRecommendService","params":"{\\"pageNo\\":\\"2\\",\\"query\\":\\"\\",\\"pageSize\\":\\"20\\",\\"from\\":\\"PC\\",\\"showType\\":\\"transverse\\",\\"trafficSource\\":\\"pc_index_recommend\\",\\"sort\\":\\"mix\\",\\"params\\":{\\"pageNo\\":\\"2\\",\\"query\\":\\"\\",\\"pageSize\\":\\"20\\",\\"from\\":\\"PC\\",\\"showType\\":\\"transverse\\",\\"trafficSource\\":\\"pc_index_recommend\\",\\"sort\\":\\"mix\\"}}"}' 177 | return h(token + "&" + i + "&" + g + "&" + data) 178 | } 179 | 180 | console.log(getSign()) 181 | -------------------------------------------------------------------------------- /1688/run.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | # @File : run.py 4 | import json 5 | import re 6 | import time 7 | import execjs 8 | 9 | import requests 10 | 11 | 12 | def get_sign(data, timesmap): 13 | with open('./jscode.js', encoding='utf-8') as f: 14 | js_code = f.read() 15 | ctx = execjs.compile(js_code) 16 | sign = ctx.call('getSign', data, timesmap) 17 | return sign 18 | 19 | 20 | def run(): 21 | cookies = { 22 | # 'cookie2': '1afde69868faa4b9248d364cbf8c59a9', 23 | # 't': '0ca4a186e14c7ffb71d8d39b5790f0a3', 24 | # '_tb_token_': 'ebe3e7ee3ae55', 25 | # '__cn_logon__': 'false', 26 | '_m_h5_tk': '92787c3d2a2cb937574f45f6ffaafa11_1699945776200', 27 | '_m_h5_tk_enc': '2c9836edc49e9055f81084c3a1f75683', 28 | # 'cna': '2Y6WHenDFQ0BASQIiVZJhdWb', 29 | # 'xlly_s': '1', 30 | # 'keywordsHistory': '%E4%BC%91%E9%97%B2%E5%A5%97%E8%A3%85%E5%A5%B3%E8%A3%85', 31 | # 'ali_ab': '223.71.127.50.1699938603740.6', 32 | # 'tfstk': 'dbpkYBvXMZa11c_k14BSU-keBFlYNz6C5eedJ9QEgZ7be0TKVIXVjgzFT46JKEYM-Lede6HeoUTfwQKepMJHlT5BwwQR-9xBSm3tBAKWV96rWVHTFFy1LSnxO5zTh36CLVEYLfHMVFdIDGSacX0vGb9xZ6QgAyqVayD3kwKPoRx6ngoV-A_bL_pA4_vEfaBajSPa38yC0Dp4OW1PcibtXA8ph', 33 | # 'l': 'fBEhXQQlPi93foAvBO5aourza77tNQRbzsPzaNbMiIEGC6bds4JecqxQV45LspxRRJXPiUYB4zPR06vt7euTJPYboi7PuNdoS88BIe8IK7Nk_', 34 | # 'isg': 'BKKiHsEjM66J1S9yHbtSDAml8y4E86YNU8ULXew5a5Qsv0A51IIzHfZ57_NDrx6l', 35 | } 36 | 37 | headers = { 38 | 'authority': 'h5api.m.1688.com', 39 | 'accept': '*/*', 40 | 'accept-language': 'zh,en;q=0.9,zh-CN;q=0.8', 41 | # 'cookie': 'cookie2=1afde69868faa4b9248d364cbf8c59a9; t=0ca4a186e14c7ffb71d8d39b5790f0a3; _tb_token_=ebe3e7ee3ae55; __cn_logon__=false; _m_h5_tk=92787c3d2a2cb937574f45f6ffaafa11_1699945776200; _m_h5_tk_enc=2c9836edc49e9055f81084c3a1f75683; cna=2Y6WHenDFQ0BASQIiVZJhdWb; xlly_s=1; keywordsHistory=%E4%BC%91%E9%97%B2%E5%A5%97%E8%A3%85%E5%A5%B3%E8%A3%85; ali_ab=223.71.127.50.1699938603740.6; tfstk=dbpkYBvXMZa11c_k14BSU-keBFlYNz6C5eedJ9QEgZ7be0TKVIXVjgzFT46JKEYM-Lede6HeoUTfwQKepMJHlT5BwwQR-9xBSm3tBAKWV96rWVHTFFy1LSnxO5zTh36CLVEYLfHMVFdIDGSacX0vGb9xZ6QgAyqVayD3kwKPoRx6ngoV-A_bL_pA4_vEfaBajSPa38yC0Dp4OW1PcibtXA8ph; l=fBEhXQQlPi93foAvBO5aourza77tNQRbzsPzaNbMiIEGC6bds4JecqxQV45LspxRRJXPiUYB4zPR06vt7euTJPYboi7PuNdoS88BIe8IK7Nk_; isg=BKKiHsEjM66J1S9yHbtSDAml8y4E86YNU8ULXew5a5Qsv0A51IIzHfZ57_NDrx6l', 42 | 'referer': 'https://sale.1688.com/', 43 | 'sec-ch-ua': '"Google Chrome";v="119", "Chromium";v="119", "Not?A_Brand";v="24"', 44 | 'sec-ch-ua-mobile': '?0', 45 | 'sec-ch-ua-platform': '"macOS"', 46 | 'sec-fetch-dest': 'script', 47 | 'sec-fetch-mode': 'no-cors', 48 | 'sec-fetch-site': 'same-site', 49 | 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36', 50 | } 51 | data = {"fcGroup": "cbu-seller-fc", "fcName": "factory-recommend-service-fn", 52 | "serviceName": "tpFacRecommendService", 53 | "params": "{\"pageNo\":\"%d\",\"query\":\"\",\"pageSize\":\"20\",\"from\":\"P" 54 | "C\",\"showType\":\"transverse\",\"trafficSource\":\"pc_index_recommend\",\"so" 55 | "rt\":\"mix\",\"params\":{\"pageNo\":\"%d\",\"query\":\"\",\"pageSize\":\"20\",\"from" 56 | "\":\"PC\",\"showType\":\"transverse\",\"trafficSource\":\"pc_index_recommend" 57 | "\",\"sort\":\"mix\"}}" % (3, 3)} 58 | 59 | timesmap = int(time.time() * 1000) 60 | 61 | sign = get_sign(json.dumps(data), timesmap) 62 | print(sign) 63 | 64 | params = { 65 | 'jsv': '2.6.1', 66 | 'appKey': '12574478', 67 | 't': timesmap, 68 | 'sign': sign, 69 | 'v': '2.0', 70 | 'type': 'jsonp', 71 | 'isSec': '0', 72 | 'timeout': '5000', 73 | 'api': 'mtop.mbox.fc.common.gateway', 74 | 'jsonpIncPrefix': 'mboxfc', 75 | 'dataType': 'jsonp', 76 | 'callback': 'mtopjsonpmboxfc18', 77 | 'data': json.dumps(data) 78 | } 79 | 80 | response_cookie = requests.get( 81 | 'https://h5api.m.1688.com/h5/mtop.mbox.fc.common.gateway/2.0/', 82 | params=params, 83 | cookies=cookies, 84 | headers=headers, 85 | ).cookies.get_dict() 86 | cookies.update(response_cookie) 87 | 88 | response = requests.get( 89 | 'https://h5api.m.1688.com/h5/mtop.mbox.fc.common.gateway/2.0/', 90 | params=params, 91 | cookies=cookies, 92 | headers=headers, 93 | ) 94 | 95 | callback_result = re.search(r'mtopjsonpmboxfc18\((.*)\)', response.text).group(1) 96 | 97 | for i in json.loads(callback_result)['data']['result']['result']['facList']: 98 | print(json.dumps(i)) 99 | 100 | 101 | if __name__ == '__main__': 102 | run() 103 | -------------------------------------------------------------------------------- /51job/run.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | # @File : silderDemo.py 4 | import json 5 | import random 6 | import re 7 | import time 8 | 9 | from playwright.sync_api import sync_playwright 10 | 11 | 12 | def get_job_info(keyword, max_page=100, jobArea="010000"): 13 | """ 14 | 15 | :param keyword: 搜索的信息 16 | :param max_page: 最大爬取页 17 | :param jobArea: 地区 18 | :return: 19 | """ 20 | with sync_playwright() as playwright: 21 | # 设置可视化界面 22 | # browser = playwright.chromium.launch(headless=False) 23 | browser = playwright.chromium.launch() 24 | context = browser.new_context() 25 | page_obj = context.new_page() 26 | # # 关闭Webdriver属性 27 | js = """ 28 | Object.defineProperties(navigator, {webdriver:{get:()=>undefined}}); 29 | """ 30 | page_obj.add_init_script(js) 31 | for page in range(max_page): 32 | timestamp = int(time.time() * 1000) 33 | page_obj.goto( 34 | f"https://we.51job.com/api/job/search-pc?api_key=51job×tamp={timestamp}" 35 | f"&keyword={keyword}&searchType=2&function=&industry=&jobArea={jobArea}" 36 | f"&jobArea2=&landmark=&metro=&salary=&workYear=°ree=&companyType" 37 | f"=&companySize=&jobType=&issueDate=&sortType=0&pageNum={page}" 38 | f"&requestId=f54026ee5b71be1db486d8f841922780&pageSize=20&source=" 39 | f"1&accountId=&pageCode=sou%7Csou%7Csoulb" 40 | ) 41 | page_obj.wait_for_selector("#nc_1__scale_text") 42 | # Wait for the captcha slider element to appear 43 | page_obj.wait_for_selector("#nc_1_n1z") 44 | 45 | # 计算滑块结束位置的坐标 46 | slider_element = page_obj.query_selector("#nc_1_n1z") 47 | box = slider_element.bounding_box() 48 | start_x = box["x"] + box["width"] / 2 49 | start_y = box["y"] + box["height"] / 2 50 | end_x = start_x + 300 # 你要移动的像素距离 51 | 52 | # 移动滑块 53 | page_obj.mouse.move(start_x, start_y) 54 | page_obj.mouse.down() 55 | page_obj.mouse.move(end_x, start_y, steps=random.randint(30, 40)) 56 | page_obj.mouse.up() 57 | time.sleep(random.randint(3, 10)) 58 | html_res = page_obj.content() 59 | pattern = r'pre-wrap;">(.*?)' 60 | result = re.search(pattern, html_res) 61 | if result: 62 | page_info = result.group(1) 63 | try: 64 | job_item = json.loads(page_info)['resultbody']['job']['items'] 65 | except Exception as e: 66 | print(f'抓取页面数据异常:{page}页 keyword:{keyword} Exception:{e}') 67 | print(job_item) 68 | else: 69 | print(f'抓取页面数据异常:{page}页 keyword:{keyword}') 70 | 71 | # 关闭浏览器 72 | browser.close() 73 | 74 | 75 | if __name__ == '__main__': 76 | get_job_info('python', max_page=1) 77 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2023 pangxiaobin 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /bidcenter/jscode.js: -------------------------------------------------------------------------------- 1 | const CryptoJS = require('crypto-js'); 2 | 3 | var variate = { 4 | key: {"words": [863652730, 2036741733, 1164342596, 1782662963], "sigBytes": 16}, 5 | aceIV: {"words": [1719227713, 1314533489, 1397643880, 1749959510], "sigBytes": 16}, 6 | xgGjcArray: [], 7 | xgGjcIndex: 0, 8 | } 9 | 10 | function AESDecrypt(str) { 11 | var nContent = CryptoJS.AES.decrypt(str, variate.key, { 12 | iv: variate.aceIV, 13 | mode: CryptoJS.mode.CBC, 14 | padding: CryptoJS.pad.ZeroPadding 15 | }) 16 | if (nContent && nContent != null) { 17 | try { 18 | var constr = CryptoJS.enc.Utf8.stringify(nContent) 19 | if (constr != "") { 20 | var data = JSON.parse(constr); 21 | return data; 22 | } else 23 | return null; 24 | } catch (err) { 25 | return null; 26 | } 27 | 28 | } else 29 | return null; 30 | } 31 | 32 | var str = "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" 33 | console.log(AESDecrypt(str)) -------------------------------------------------------------------------------- /bidcenter/run.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | # @File : run.py 4 | import execjs 5 | import requests 6 | 7 | 8 | def AESDecrypt_json(res): 9 | with open('./jscode.js', 'r') as f: 10 | js_code = f.read() 11 | result = execjs.compile(js_code).call('AESDecrypt', res) 12 | return result 13 | 14 | 15 | def run(): 16 | headers = { 17 | 'authority': 'interface.bidcenter.com.cn', 18 | 'accept': 'text/plain, */*; q=0.01', 19 | 'accept-language': 'zh,en;q=0.9,zh-CN;q=0.8', 20 | 'content-type': 'application/x-www-form-urlencoded; charset=UTF-8', 21 | 'origin': 'https://search.bidcenter.com.cn', 22 | 'referer': 'https://search.bidcenter.com.cn/', 23 | 'sec-ch-ua': '"Google Chrome";v="119", "Chromium";v="119", "Not?A_Brand";v="24"', 24 | 'sec-ch-ua-mobile': '?0', 25 | 'sec-ch-ua-platform': '"macOS"', 26 | 'sec-fetch-dest': 'empty', 27 | 'sec-fetch-mode': 'cors', 28 | 'sec-fetch-site': 'same-site', 29 | 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36', 30 | } 31 | 32 | data = { 33 | 'from': '6137', 34 | 'guid': '11fb79da-a854-434b-8ab0-eba6de41f625', 35 | 'location': '6138', 36 | 'token': '', 37 | 'next_token': '', 38 | 'keywords': '%E6%9C%8D%E5%8A%A1%E5%99%A8', 39 | 'mod': '0', 40 | } 41 | 42 | response = requests.post('https://interface.bidcenter.com.cn/search/GetSearchProHandler.ashx', headers=headers, 43 | data=data) 44 | 45 | print(AESDecrypt_json(response.text)) 46 | 47 | 48 | if __name__ == '__main__': 49 | run() 50 | -------------------------------------------------------------------------------- /chinaindex/jscode.js: -------------------------------------------------------------------------------- 1 | const CryptoJS = require('crypto-js'); 2 | 3 | function AESParse(data, lastFetchTime) { 4 | var i = CryptoJS.enc.Utf8.parse(lastFetchTime + "000") 5 | , a = CryptoJS.enc.Utf8.parse(lastFetchTime + "000") 6 | , s = CryptoJS.AES.decrypt(data.toString(), i, { 7 | iv: a 8 | }) 9 | , c = s.toString(CryptoJS.enc.Utf8); 10 | return JSON.parse(c) 11 | } 12 | var data = '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' 13 | console.log(AESParse(data, 1700041211149)) 14 | -------------------------------------------------------------------------------- /chinaindex/run.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | # @File : run.py 4 | import execjs 5 | import requests 6 | 7 | 8 | def aes_parse(data, lastFetchTime): 9 | with open("./jscode.js", encoding="utf-8") as f: 10 | js_code = f.read() 11 | cxt = execjs.compile(js_code) 12 | result = cxt.call("AESParse", data, lastFetchTime) 13 | return result 14 | 15 | 16 | def run(): 17 | cookies = { 18 | "mobile_iindex_uuid": "b0f83dd7-1e64-51d4-8dad-be25ffaccf3d", 19 | "Hm_lvt_2873e2b0bdd5404c734992cd3ae7253f": "1700036352", 20 | "Hm_lpvt_2873e2b0bdd5404c734992cd3ae7253f": "1700036352", 21 | } 22 | 23 | headers = { 24 | "authority": "www.chinaindex.net", 25 | "accept": "application/json, text/plain, */*", 26 | "accept-language": "zh,en;q=0.9,zh-CN;q=0.8", 27 | # 'cookie': 'mobile_iindex_uuid=b0f83dd7-1e64-51d4-8dad-be25ffaccf3d; Hm_lvt_2873e2b0bdd5404c734992cd3ae7253f=1700036352; Hm_lpvt_2873e2b0bdd5404c734992cd3ae7253f=1700036352', 28 | "funcid": "undefined", 29 | "incognitomode": "0", 30 | "referer": "https://www.chinaindex.net/ranklist/680", 31 | "sec-ch-ua": '"Google Chrome";v="119", "Chromium";v="119", "Not?A_Brand";v="24"', 32 | "sec-ch-ua-mobile": "?0", 33 | "sec-ch-ua-platform": '"macOS"', 34 | "sec-fetch-dest": "empty", 35 | "sec-fetch-mode": "cors", 36 | "sec-fetch-site": "same-origin", 37 | "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36", 38 | "uuid": "b0f83dd7-1e64-51d4-8dad-be25ffaccf3d", 39 | } 40 | 41 | params = { 42 | "channel": "varietylist", 43 | "sign": "6fb5ce5dd1fb90ed46df7b71cef028e3", # 这里的sign是根据channel进行加密生成的 固定 44 | } 45 | 46 | response = requests.get( 47 | "https://www.chinaindex.net/iIndexMobileServer/mobile/entertainment/objectFansRank", 48 | params=params, 49 | cookies=cookies, 50 | headers=headers, 51 | ) 52 | print(response.json()) 53 | result = aes_parse(response.json()["data"], response.json()["lastFetchTime"]) 54 | print(result) 55 | 56 | 57 | if __name__ == "__main__": 58 | run() 59 | -------------------------------------------------------------------------------- /cninfo/jscode.js: -------------------------------------------------------------------------------- 1 | const _0x244c9b = require('crypto-js'); 2 | 3 | function _0x4861() { 4 | var _0x2f9c7e = ['WjzGl', 'EvpKDF', 'gtVjv', 'yuUMn', 'eOLuL', 'NzFTS', 'GlMKL', 'hSEMJ', 'UCEze', 'RiujI', 'exWcn', 'izrlf', 'AnsiX923', 'IPKsv', 'uKFea', 'vzlue', 'CFEXS', 'WkcNj', 'GMyqZ', 'nRhGI', 'eAiIT', 'qzeMM', 'NlZyd', 'YZvUk', 'yCYyP', 'SHA256', 'XecCj', 'geabm', 'sgSrC', 'esExO', 'YSoyb', 'mfVvS', 'woEzE', 'ijOkA', 'hlHAy', 'iIIEp', 'wXviA', 'KcgdF', 'OScJI', 'Duouu', 'FpCgO', 'WVRLj', '_oKey', 'BCqPF', 'jBaPe', 'MZczx', 'JqsIF', 'VlpKm', 'FcMsK', 'UXUwQ', 'GKysV', 'LatFD', 'NSGZX', 'gmYSK', 'Qlrnh', 'qFeNE', 'sllou', 'ZaAlw', 'lkxea', 'SiaQN', 'CLVDa', 'vDsCP', 'twCUW', 'wqpGL', 'CNEhB', 'Base', 'rdzUV', 'bwAiS', 'XvFHs', 'raONI', 'CqxZp', 'low', 'Hhwzl', 'CBrcW', 'iXUgO', 'ZtRxR', 'nuTGc', 'ptehK', 'tyMWm', 'EKYUm', 'PWkQc', 'UyQVw', 'ent', 'Xnbdo', 'PgNiJ', '160', 'nUnUk', 'HZsFe', 'OLCjP', 'VgxYK', 'stringify', 'wdyBp', 'IDZDt', 'RC4', 'GqIUk', 'ljCBi', '1|3|4|2|0', 'HvSIZ', 'dCZPd', 'wjjEu', 'qXeyO', 'GoqMg', 'PEOxq', 'Dpfed', 'geVer', 'NWpQe', 'WaLjU', 'trCqJ', 'NtoqQ', 'Utxvx', 'OWMeM', 'BRobY', 'Ehfto', 'hitID', 'xEbSf', 'WdMvY', 'UVWXYZabcd', 'SntpK', 'tcrqD', 'wyYfA', 'GwHGr', 'jEJXI', 'mlPNA', 'lIqEw', 'YNCMR', 'VMxbd', 'GGdKW', 'QjdCk', 'dQncY', 'uRJEz', 'qzIXf', 'vtcGK', 'ZvnPi', 'AwsQK', 'concat', 'xeMBo', 'YNaVD', 'utuCr', 'YVHVo', 'yqFPZ', 'sIcUa', 'zcGfI', 'oxtUT', '_map', 'sedCipher', 'XKnaD', 'GwfXt', 'lkgtF', 'qpuxJ', 'RkhuO', 'GGmrn', 'fxvPy', 'VfqsC', 'CVZrx', 'LYeMZ', 'OJTjo', 'XGLcr', 'ONXmX', 'ipdOV', 'lYshy', 'WordArray', 'ZBmTz', 'latkey\x27);x', 'OYkNk', 'eTPtM', 'WLluN', 'TCHVj', 'Adgzp', 'vKikr', 'psGvp', 'piOwX', 'IDcMZ', 'wiPjL', 'ESuRs', 'zWAtC', 'ybJOH', 'BHcJP', 'JtZoU', 'gtfnQ', 'm\x27+\x27code/s', 'bjnuf', 'twShb', 'eSRLN', 'TjmZq', 'osDpK', 'pad', 'StreamCiph', 'KRAeF', 'vlmwa', 'VHNun', 'tfPUJ', 'hGdcs', 'tHJup', 'n(){if(xhr', 'GSLIk', 'Cvacl', 'cZyCs', 'gpCti', 'XDYZY', 'IMirG', 'LuyOb', 'aIyCY', 'CojrO', 'qdoAV', 'glDxU', 'sFOCU', 'XAwWR', 'owgKP', 'aTMJr', 'UTF-8\x20data', 'xuiqS', 'RmUMl', 'bwYom', 'edule', 'pYXyl', 'Pptcq', 'CrrNB', 'IEwKh', 'drlLe', '$super', 'rsGVE', 'src', 'BObYW', 'Utf16LE', 'FUjeL', 'yIlmD', 'djkmn', 'TjChP', 'SffGc', 'XnHrh', 'mxUFt', 'YIczD', 'QXQPz', 'createElem', 'cMgKf', 'opqrstuvwx', 'hAdPy', 'PmTgo', 'StLyz', 'jJunZ', 'mgCqg', 'LCelK', 'PUcVC', 'xJSTi', 'KwhWD', 'ifdPR', 'fwSAG', 'eRijq', 'gelny', 'sdCmA', 'JLFJG', '20753928JTIgkI', '$/.test(r)', 'Prnyu', 'hOMUi', 'SHA3', 'Jsiex', 'tfjiz', 'bQqYe', 'wHRvJ', 'SHA224', 'YRBug', 'FCnri', 'IiyvY', 'aiJBm', 'lPpQp', 'Word', 'zjYnh', 'indexcode', 'UuaUj', 'ASIql', 'bqyjp', 'NaqDL', 'SRpzP', 'TtgBm', 'WwcsV', 'zITca', 'dCtJS', 'Yvtek', '_invSubKey', 'UDloI', 'equest();x', 'emdJG', 'hRJyV', 'FQTDW', 'guZWl', 'Wmwhg', 'TWYYR', 'YkKPA', 'kfKVd', 'eAgYE', 'substr', 'KfTHL', 'update', 'var\x20xhr=ne', 'XhqUw', 'UzUET', 'keySize', 'kYOgA', 'OqRUK', 'jMrYb', 'QZgSB', 'aGMeZ', 'LPaMw', 'jCflq', 'jEvAb', 'kdf', 'TgdtN', 'SHA512', 'HmacSHA384', 'ANtcT', 'GeaSt', 'script', 'RIPEMD160', 'QCBCU', 'whCud', 'XlPtU', 'rVDzI', '_prevBlock', 'lib', 'ARjPY', 'XPLYC', 'oQQPr', 'oUqIE', 'function', 'charCodeAt', 'HBUHp', 'IfcjO', 'IRGwv', 'PzdxW', 'uwfVn', 'IZork', 'Udpwb', 'WIvhX', 'GBgEJ', 'owUOv', 'uGZsW', 'RNhnY', 'fvGsu', 'xLGPH', 'IkTbm', 'uAOnd', 'pievs', 'bvJgr', 'DSlgo', '_des2', 'hasher', 'NJoxS', 'YHBsq', 'BdSWh', 'Ujswp', 'wiLpX', 'dlEmo', 'QERwI', 'kTwke', 'PMCco', 'jRoOT', 'XWsEA', 'drrlf', 'AXfzB', 'KhjZA', 'syDUd', 'RVtME', 'scHpC', 'GHwyG', 'OgbAW', 'lCODB', 'VzCIq', 'xqJtt', 'ystatechan', 'sCjEG', 'JWmQS', 'per', 'NQIav', 'maSiV', 'gAdLd', 'vpXPI', 'algo', 'UQvQf', 'siAls', 'DEqkt', 'ivSize', 'FfsbV', 'bKjON', 'MlFXX', 'Tnddh', 'LbVxe', 'wqlhK', '_ENC_XFORM', 'urrgs', 'TfuSM', 'dTjox', 'nSJVt', 'fGLpx', 'UvKJf', 'Cehoz', 'xDgCK', 'KfKVv', 'yaPpr', 'bFHOh', 'WivQu', 'HCYiA', '_MODE', 'kXZDn', 'USqOA', 'jOgYC', 'Njldm', 'LQnmo', 'RTVgR', 'AAHhT', 'xFEZy', 'RGFhd', 'jvtPu', ';base64,', 'mhvOy', 'qJtCF', 'zTIPu', 'KHkpa', 'DwgiI', 'pCdjm', 'evfED', 'ChhAN', 'SHEHS', 'OpDYN', 'GouDs', 'rvlkb', 'rhErQ', 'ADLHa', '_append', 'cZHAR', 'CryptoJS', 'RUvdY', '_counter', 'c\x27,r)}', 'LyZpk', 'YkeZC', 'AwzEr', 'oAFeB', 'iuyui', 'znerQ', 'UtLTR', 'xTWmO', 'QVLlD', 'jRSks', 'drop', 'jcIKV', 'YcuWr', 'SbXdW', 'CUnaS', 'mode', 'cHcFH', '__creator', 'em(\x27tempen', 'yHfnm', 'ECB', 'lPwNc', 'qiRde', 'format', 'unuMb', 'BgnBR', 'EnVUK', 'dxzKj', 'VlRDJ', 'yXkPU', 'yHheU', 'vQVIy', 'Utf8', '4|2|0|3|1', 'Malformed\x20', 'BzDEA', 'JjkCI', 'VNhdd', 'anfpe', 'AJelh', 'KpnMq', 'HNQkn', 'CFB', 'prototype', 'JUDor', 'vMAmz', 'nZerN', 'JIwgw', 'qgUbg', 'txfQg', 'DES', 'hasOwnProp', 'Kpjhv', 'vedNa', 'lhGnE', 'rNjEk', 'hRSMR', 'cHelper', 'JuQAb', 'ICGEm', 'BxPUB', 'kFERF', 'uTlKT', 'fHxHb', 'EVLcr', 'oXvyS', 'aZwoZ', 'GzoLJ', 'KLMNOPQRST', 'RUrUz', 'nQxQD', 'KBKgn', 'yCuti', 'udCIe', 'UoflU', 'Lbfkk', 'QJgIK', 'GqWDC', 'tLhgV', 'byteLength', 'javascript', 'VArIU', 'FcYIy', 'Hqrke', 'YqNbf', 'oAAhL', '_iKey', 'eGMGv', 'parse', '_subKeys', 'CmUqE', 'SOIEh', 'PBKDF2', 'ceil', 'VShaj', 'McTPI', '7|0|3|5|1|', 'ysMsM', 'hMWeL', 'iwBYt', '89+/=', 'KzhrI', 'kBEiS', 'object', 'kpgEx', 'WrWuV', 'qqnZh', 'SnRTU', 'ZInhf', 'WCFaS', 'kQEoQ', 'w\x20XMLHttpR', 'AuTnr', 'UjOEs', 'huIYX', 'MD5', 'UMwNB', 'NhyNU', 'XlKHT', 'cEXez', 'string', 'kTXIQ', 'HMAC', 'PuwYS', 'fRSPO', 'YEbpJ', 'FeXLQ', 'Zrcdr', 'wAHrF', 'Pxnpd', 'iterations', 'hNjGC', 'gsNJb', 'bRvmU', 'vsJrU', 'rezSk', 'mykHn', 'IuTmP', 'lSwQP', '3|4|6|5|1|', 'NoPadding', 'bXpPy', 'kFcmn', 'yYRYI', 'wNuUO', 'DEcZW', 'WXllG', 'AWyVA', 'ExLdu', 'bpAas', 'zmGyb', 'RaNkk', 'qLkvN', 'kQHXo', 'mqODa', 'oJmpT', 'bTpqD', 'dTTAw', 'qolqq', 'DcuHq', 'HOGym', 'Base64', 'BlockCiphe', 'enWkf', 'WBoaM', '_nRounds', 'tJDUF', 'sEYwC', 'PnrAH', 'LLive', 'wrrtt', 'afXAw', 'eKvSH', 'encrypt', 'choMP', 'GWhzI', 'THmaO', 'bPWgx', 'YqNzn', 'NvyjS', 'Fptoi', 'kLIBU', 'BrkyI', '_doCryptBl', 'oWQLk', 'hMxuR', 'bATZy', 'uOplJ', 'mHiFY', 'gnhVV', 'ZNDAG', 'charAt', 'kRyWD', 'tDZrr', 'MBOyS', 'Quvzy', 'XYHRD', 'dQbdf', 'TRPiV', 'wJlKT', 'cKUNr', 'leCipher', 'qSHhC', 'NpILU', 'Opucl', 'BFqqf', 'hr.send();', 'LueCQ', '1234567887', 'BcQiD', 'kQogf', 'Kihav', 'XEyya', 'getItem', 'lwJYk', 'GEEBz', 'eqSqI', 'htuGK', 'XwfQH', '_process', 'bpfyK', 'Yztps', 'wtPti', 'sRaKj', 'dkxPD', 'ehDZg', 'yriAK', 'otpjm', 'IwhPj', 'thGKH', 'kEQAA', 'zwbsJ', 'CTdNX', 'xMGSs', 'xSGad', 'QrRuS', 'dJvIt', 'kWiCY', 'WILRV', 'gUwvK', 'EJhJy', 'QBYsm', 'tqTqk', 'DUIfH', 'WIsOd', 'yKVgV', 'ThQuz', 'XvUlj', 'rPsFQ', 'BMzCl', 'QlhDp', 'DcOQR', 'oLKbR', 'UYJFa', 'pcEMO', 'eCbcG', '_createHel', 'INWWi', 'jyWAW', 'buBDt', 'lOUJE', 'irBVz', 'hOHJD', 'fFuwa', 'PPkFm', 'ClphC', 'ZVexT', 'SzvVx', 'WdqKd', '_keystream', 'toString', 'rMode', 'aqwCR', 'AnICv', 'wKSYe', 'oGQQy', 'FjEYw', 'AgITv', 'LEtlK', 'CMyte', 'JhWTn', 'wRpmx', 'high', 'Xfhbg', 'FKDwE', 'ooDgd', 'XvUpb', 'CnsEP', 'dqPpN', 'FhMlR', 'ymnIf', 'hyFmo', 'EBfyg', 'yiofX', 'PBxAD', 'TDShd', 'eVspa', 'buffer', 'mklNl', 'bVxYE', 'mTwGV', 'xifwr', 'mjQov', 'tTfKn', 'MusaL', 'RvFLk', 'mIkDU', 'ojyVn', 'YTrIy', 'xZEmA', 'XsyaP', 'PqlIm', 'QMAde', 'RUKSj', 'RoTYc', '4010232rhXdVV', 'mixIn', 'KXdtN', 'key', 'CdDyd', 'mtUJt', 'qAyAu', 'CZQzb', '2|1|5|0|3|', 'KPiyF', 'kZlym', 'IKBSq', '_hash', 'ltXmr', 'LVavp', 'mqCzz', 'cKOpX', 'gHLnm', 'cJjnf', 'vSggA', 'lOWRg', '_invKeySch', 'CTRGladman', 'batKE', 'hTNwG', 'KHYmq', 'jbjKi', 'LMURb', 'SHA384', 'jsLey', 'sin', 'oYWoh', 'fqrGc', 'UeRmo', 'HmacMD5', 'SlWFQ', 'zmwRC', 'hGbXb', 'AeATM', 'EYwYo', 'tQtmX', 'mpZGs', 'JQTDu', 'tiurt', 'data:text/', 'QOunB', 'CBXtC', 'PSPHu', 'create', 'xHUMw', 'eXfUR', '134EFSZCk', 'LvGjq', 'kAetg', 'aZzfg', 'Vurwg', 'SCEee', 'nKeWX', 'Rabbit', 'CipnN', 'JaVza', 'dAQXW', 'oBhEe', 'YRjxp', 'MYONp', 'erty', 'yajoR', 'Bhodn', 'xKrIW', 'ohXgu', 'MIBiF', 'call', 'dLxOb', 'EBcDL', 'Hasher', 'ykXzv', 'gjCdp', 'NpVDs', 'UxtbF', 'tempenc', 'max', 'wTIMh', 'yiEDl', 'BHIMi', 'tQnzd', 'QxUkc', 'decryptBlo', 'AXNge', 'RRGqc', 'eIdzm', 'RqBZU', 'FQSdU', 'xeNeo', 'YJjGi', 'BHwwm', 'eCbkq', 'fwTuw', 'YtSPD', 'tmmUF', 'DgHmH', 'aepcQ', 'EvQEx', 'QOlGK', 'FSpYq', 'vJFfq', 'zSJZL', 'YOCvi', 'eZsYm', 'sQsEr', 'CMMeL', 'apply', 'dcoCg', 'HmacRIPEMD', 'rzExi', 'UCCDm', 'outputLeng', 'WjDkm', 'createDecr', 'LrBaY', 'cxnSL', 'rftGa', '_iv', 'ijdzb', 'init', 'HKxDh', 'WbARJ', 'srcoG', '_xformMode', 'AyOjr', 'zXrWY', 'DnBdS', 'JNDHu', 'finalize', 'lkaoV', 'SmwOr', 'LAkBL', 'RabbitLega', 'Rbrdf', 'Pvkqu', 'cDoyB', 'hGKTm', 'nEGoE', 'ZbOEG', 'SSQog', 'UnHzv', '_createHma', 'MRsGA', 'vPSam', 'grQMW', 'lEFOV', 'blockSize', 'LdrJb', 'AGOoF', 'Bjzdh', 'DnSKE', 'MmHvr', 'PimpP', 'MPEce', 'aPYFu', 'YvBVE', 'rqRhw', 'qzinS', 'VMQEo', 'aRjrO', '_minBuffer', 'pnxXN', 'CMSnN', 'ZZbfe', 'fVJuA', 'oNPMH', 'DwrSI', 'ppVyR', 'DhVqN', 'sQTTy', 'vLubB', 'UjFhM', 'SHA1', 'YTPLD', 'MjXCu', 'ock', 'execute', 'cMLgG', 'JqYjZ', 'xHAHz', 'kPeNc', 'Hzzwm', 'IKyEI', 'RDgkG', 'getTime', 'jDsFO', 'TDpnJ', 'HpoBC', 'qKnwM', '_parse', 'KiAMs', 'siSug', 'NlexR', 'Zeqxm', 'ZUhTZ', 'VPJPj', 'hlePK', 'EiuiV', 'Hpjtl', 'DcFlj', 'pBOuQ', 'bqQyA', 'jXKCQ', 'FuSnP', 'QgJeZ', 'cLCoY', 'wsBVh', 'RfzvY', 'yTesU', 'Encryptor', 'myXQA', 'jRQnV', 'epZkg', 'oncbv', '_nDataByte', '_des1', 'ZqXEt', 'HjiDd', 'zbglq', 'EdVqA', 'aLAaR', 'OyVKa', 'xIWfI', 'fUggK', 'QlaoL', 'Aixwh', 'SirMj', '_lBlock', 'TripleDES', 'MDcVw', '_doProcess', 'ATYRW', '3513378TyvuCu', 'Iso97971', 'sDSMP', 'processBlo', 'QiPWT', 'XHRsm', 'dPXox', 'nyXqC', 'vOMDq', 'lUNzX', 'glUSG', 'XgNaj', 'PyjvT', 'XAokE', 'tHpYQ', 'YNKhP', 'MFDvL', 'zuocn', 'oHGMo', 'lfffg', 'DDmin', 'XKDsH', 'tXsux', 'XNbFk', 'BrSNb', 'TMcfc', 'TrsXx', 'uRgSj', 'pXkeT', 'CBC', 'bGDTq', 'enc', 'PQGtL', 'ifsGn', 'QYfSS', 'hzeaK', 'jOdFS', 'swYpp', '_cipher', 'fSiWl', 'lUDWR', 'iqKDN', 'undefined', 'HmacSHA3', 'wyWMT', 'cqqJc', 'HmacSHA256', 'vuKcr', 'eHqPo', 'hMriM', 'paXVV', 'ZUPOL', 'qSqlu', 'wrXjd', '_reverseMa', 'aJbHC', 'xQkUB', 'ge=functio', 'kmQbM', 'vkNRb', 'prmFs', 'ztDzu', 'jwNHp', 'uWZcT', 'RnCAR', 'WHLnZ', 'XMvte', 'jEOKB', 'elxOD', 'pViZc', 'Utf16BE', 'HmacSHA224', '_data', 'MWqrg', 'CIyFj', 'Sowje', 'dQKQX', 'PAnic', 'RbwTq', 'dhGWh', 'HBsue', 'eQGgB', 'rdOeJ', 'uyLTp', 'ONApg', 'ELwxG', '.readyStat', '_rBlock', 'lBDlI', 'aggtY', 'avUwC', 'iQdBe', 'SlPrB', 'VSwVc', 'TuRwz', 'JmRet', 'length', 'NfJAb', 'padding', 'DLJhH', 'ciphertext', 'JBcTN', 'ZSSem', 'oZWhr', 'UeAWE', 'fTABx', 'KvGVi', 'JAeWs', 'ZNNeX', 'jjjGQ', 'ZYtLu', 'ClNuD', 'JTwWl', 'QzHAj', 'mACJf', 'zwHJV', 'esuel', 'GZSrU', 'QWKft', 'NnyMG', 'TUDAr', 'VQuXG', 'bind', 'Cipher', 'NNLzW', 'YGzMD', 'EkdVf', 'NtJZi', 'RNsRJ', 'gDyif', 'salt', 'iYNDy', 'zFvqq', 'OwwUF', 'ulKHt', 'makQs', 'ZJnBC', 'kOHZh', '_doReset', 'iRdJb', 'ODUua', 'formatter', 'mzrEb', 'iVaaX', 'hTbDB', 'TfjZD', 'AxvKD', 'QAeNQ', 'dPTvF', 'SZhUC', 'HsFtR', 'oJRmL', 'mxKkb', 'iTKOD', 'Ciaug', 'xYSZJ', 'mQyBy', 'LRUBw', 'unpad', 'kdToy', 'x64', 'DmIVB', 'dfwZA', 'jLWzM', 'TNcBa', '3|2|1|4|0', 'QAsfD', 'TNqQo', 'head', 'OXjAc', 'VySYm', 'OPvIN', 'Raujt', 'bRFBZ', 'fromCharCo', '4|3|1|5|0|', 'VGNBZ', 'DyqGq', 'min', 'VeBMH', 'bPlOn', 'bAssk', 'Igeef', 'RjbSq', 'xZJKT', 'ockAlgorit', 'OzUhb', 'BVpko', 'CBQDR', 'HmacSHA1', 'GRJNQ', 'ROxdt', 'ZzKIN', 'yTOaJ', 'Jiwfd', 'NNUSA', 'reset', 'rCuad', 'cHnvg', 'lWqTv', 'WWdXG', 'yRVjV', 'GrpRG', 'tzHCQ', 'kxWCa', 'qKXMf', 'aXHPQ', 'lkyNf', 'YOjPb', 'WDLjV', 'rQJUz', 'zNnJE', 'otNOm', 'aUJKy', 'TDroT', 'tXAFL', '6|2|4', 'kKGoS', 'OPeFS', 'ozssk', 'CWUPU', 'JluSP', 'jvmhr', 'JqesA', 'Doazk', 'yptor', 'YTIpN', 'cbHqd', 'jqYmE', '0|1|3|4|2', 'ZymDb', 'Igmxo', 'Yhoqz', 'SHENi', 'WpAdX', 'xoxLx', 'SxQEk', 'mdFja', 'Vyktk', 'QtiUr', 'KIdWy', 'QQUmw', 'CipherPara', 'ErUbf', 'DIzdP', 'JPtZM', 'Text;/^\x5cw+', 'UNVJn', 'qurGq', 'poqwV', 'cFDmi', 'rgbaG', 'Vhcbc', 'zsiWo', 'YibYj', 'nRUYA', '&&localSto', 'NpsPX', 'FNNPi', 'nKMeE', '_state', 'alpSP', 'TnAfH', 'BeZjR', 'PnzRp', 'MOQRA', 'alGpl', 'LjnVM', 'BrtFO', '_keyPriorR', 'Gbolm', 'rvkTJ', 'extend', 'eKOkh', 'LpCMl', 'qKwUN', 'lxHgx', 'rOCic', 'YPrkL', 'Ffahn', 'BcSIn', 'RrGPt', 'grKQL', 'PasswordBa', 'NCgGv', 'SQWXK', 'XEbDB', 'Block', 'peuHO', 'GwfuP', 'HPRIe', 'CTR', 'Gzliv', 'KVzzm', 'DfTPw', '5|3|1|4|0|', 'LexVg', 'QzqCx', 'CbKUo', 'SMyBq', 'uqpxy', 'UAtFX', 'HHBEh', 'KZBka', 'DbZoZ', 'rENMN', 'qcPMP', 'NDvHR', 'Pnyas', 'gMytr', 'VdSGm', 'idxFd', 'eavLg', 'pTJQD', '_DEC_XFORM', 'sHTVk', 'YIIbf', 'MNkaC', 'ECvXz', 'nZjGg', 'vrycn', '5|2|4|0|3|', 'TlamM', 'JNLJS', 'dkQOJ', 'HQXKC', 'cmokm', 'gxKGX', 'GYGyM', 'kvDFC', 'OMVpU', 'bdgDg', 'REiGJ', 'JmjKp', 'VFbGx', 'HrtUh', 'miyHz', 'MHBQf', 'KCQcs', 'wjyGB', 'EUEwP', 'pJdOU', 'Umsmi', 'WUyXV', 'cvyfY', 'ET\x27,\x27/api/', 'KoiSa', 'AaSeS', 'Ohqgb', 'slice', 'Adpno', 'BufferedBl', 'Hex', 'kFoti', 'ihJBZ', 'vinsk', 'SjFWf', 'yEmGp', 'nTcrh', 'sdZsH', 'NlBrl', 'bWXjA', 'jyyaI', 'IswxH', 'UWbLM', 'Iycov', 'TZNbc', 'QkBqE', 'faoqR', 'jbKpi', 'ptAbo', 'UPFKr', 'bglAg', 'mGYhA', 'FSKPG', 'hr.open(\x27G', 'SYQXj', 'icHGL', '_key', '1|0|2|3|4', 'DoonL', 'FxLCl', 'Eweje', 'KcAZb', 'AES', 'fwoma', 'MfKEW', 'jfKKA', 'hVufZ', 'McgTl', 'uJtuR', 'VEfZK', 'HMZxu', 'afmjG', 'cYBZN', 'qZzsU', 'wyqWj', 'efghijklmn', 'ZeroPaddin', 'phtjQ', 'YyssC', 'HmacSHA512', 'lpqlN', 'qcaZa', 'lVdyK', 'xjRnt', '2|3|0|1|4', 'OFB', 'zzwCr', 'nhOiW', 'lwPnu', 'Utf16', 'fgTob', 'KgBAB', 'DMaRc', 'UTAag', 'eShOg', 'XIqvN', 'Nanaj', 'HYKfa', 'ozyWI', 'hvUAX', 'toX32', 'DlBUN', 'appendChil', 'pdtJv', 'oJxHy', 'qIjcW', 'pOGZH', 'words', 'tTGdb', 'aNFXc', 'bdCZI', 'decrypt', 'lGVaW', 'aCbCK', 'JqHko', 'CeadT', 'pMGQv', 'WIsvn', 'hQdUX', 'snLIF', 'FmIvn', 'owZhF', 'lFBky', 'EhKLd', 'nJDRH', 'n;var\x20r=xh', 'GyqYB', 'sqrt', 'RoEhl', 'fjcsN', 'xOEzj', 'tVODF', 'pFgsq', 'MAVHp', 'qtdPs', 'LMOcZ', 'LEXKc', 'gSEaN', 'JPCBj', 'EYwWR', 'QcFbQ', 'iTTXe', 'RLQWe', 'DOcPq', 'QCzlJ', 'hFPJE', 'sigBytes', 'jGipW', 'jJHIW', 'cfg', 'rWnAA', 'ERxOu', 'JFpac', 'QOODu', 'pLhgv', 'DAzYv', 'removeChil', 'VmuOV', 'yz01234567', 'uepmR', 'pVOyY', 'gknmu', 'Qngxr', 'bZUOH', 'mlFZW', 'sTfml', 'pFziO', 'OZUps', 'WqLmm', 'NxdeV', 'AmpYv', 'WDZoo', 'pCBeT', 'pow', 'uEMRo', 'qnQbA', 'GBJkg', 'RYTBh', 'TANfk', 'tsiDQ', 'pqBpJ', '_hasher', 'zaWVp', 'xGKeh', 'TZMEG', 'KnBmv', 'twCAa', 'uAphp', 'IlSPo', 'tlmOL', 'NemEj', 'ncKcR', 'rTipD', '21178KPWtWP', 'icQPH', 'pPMbR', 'kNcDX', 'rage.setIt', 'CZmdy', 'eTUwk', 'gwzGT', 'HzpLk', 'vYowS', 'ABCDEFGHIJ', 'NozlT', 'TYsCb', 'yzwfn', 'KUPzK', 'xunpI', 'XfkcV', 'LlYkv', '1|4|0|2|3', 'NCkTq', 'eYIWa', 'kTPZs', 'HrPlO', 'zKQKC', 'VtJSz', 'Qesyr', 'XFWke', 'PUKus', 'Serializab', 'Hspgu', 'Latin1', 'aIPiP', 'ZVFsH', 'Vpawt', '0|2', 'LaVTy', 'AXEUp', 'RbxnB', 'DembC', 'NEoSQ', 'xTgEP', 'AMmhr', 'lKKvM', 'kIZyc', 'e!=4)retur', 'gXQnL', 'ngYoH', 'cCzyA', '6352485YIRgbi', 'DddRu', 'VfjCa', 'RBYQM', 'HfmkM', 'COmIo', 'Mqxyr', 'WceUh', 'RMdAm', '_des3', 'lDlCp', 'byteOffset', 'ESTkz', 'r.response', 'uowxa', 'random', 'ynZcT', 'WlSIZ', 'yxvjD', 'CnLqV', 'Fnlvk', 'indexOf', 'vgeuR', 'YoGRo', 'Size', 'NXpGR', 'KorsJ', 'IAcpQ', 'abs', 'rpLlv', 'DzfMD', 'OODsu', 'Lyxiv', 'XVgZN', 'wGdbH', 'emYIp', 'NrktP', 'GzuaC', '_doFinaliz', 'YRuMT', '7151186TlfSJd', 'NUgtR', '_keySchedu', 'KIyeE', 'OHijs', 'xhr.onread', 'hlLPC', 'push', 'NnoqO', 'MysQZ', 'TZtFY', '2598324TsvnuS', 'sopaI', 'fnRgq', 'iBrBp', 'qoMFT', 'OpenSSL', 'EElEl', 'splice', 'AWsUN', 'CCsNY', 'FEZzH', 'clamp', 'AVRjZ', 'ZVfos', 'sefpL', 'clone', 'nVDsn', '_mode', 'MwZwY', 'DZfbX', 'MeHJG', 'ixMQy', 'OcNFY', 'TpJYV', 'xcbFy', 'iLZTr', 'xmDwk', 'eVFCI', 'SGOpu', 'HmXzo', 'QqdlW', 'tguWt', 'QOXrS', 'GuvIm', 'wfHCg', 'QARCt', 'YUyiO', 'KqMbg', 'NzNsE', 'jgRET', 'qRIJU', 'QkcXK', 'bDUyB', 'Iso10126', 'UvKOV', 'KmfEI', 'ZWFzI', 'NxgFM', 'createEncr', 'EqZZZ', 'nsaqt', 'Pkcs7', 'ePMhw', 'LoJMg', 'cGfKo', 'vTtvs', 'YMpBC', 'yOASA', 'DUEao', 'VDJfP', 'ISWfM', 'BBtaz', 'IvYxx', 'Decryptor', 'floor', 'ETnyc', 'DCXsx', 'join', 'fEvBp', 'RbdXV', 'ffDPe', 'TzyTl', '654321', 'ntyGn', 'Idtoy', 'mknns', '2|3|4|1|0', 'exports', 'gSaxn', 'OeLzC', 'RC4Drop', 'fkvbB', 'iWGEx', 'split', 'amd', 'OgbbB', 'GOZki', 'QUUcJ', 'oGgrw', 'QjhZG', 'uctbN', 'iTKGK', 'compute', 'MIyzi', 'fQtja', 'WcJHC', 'eset', 'NQuWt', 'CCVVz', 'OPejw', 'fkEQt', 'encryptBlo', 'jDmnb', 'bpyHV', 'yUBGm', 'xmKXq', 'bXKXX', 'GXHQf', 'KVkBe', 'mluRc']; 5 | _0x4861 = function() { 6 | return _0x2f9c7e; 7 | } 8 | ; 9 | return _0x4861(); 10 | } 11 | 12 | var _0x20c2c4 = _0x4861(); 13 | 14 | function _0x35c8(_0x505404, _0x4b8411) { 15 | var _0x20c2c4 = _0x4861(); 16 | return _0x35c8 = function (_0x521c08, _0x1a22b6) { 17 | _0x521c08 = _0x521c08 - (0x1 * 0x28f + 0x212b + 0xa8 * -0x35); 18 | var _0x5b14e7 = _0x20c2c4[_0x521c08]; 19 | return _0x5b14e7; 20 | } 21 | , 22 | _0x35c8(_0x505404, _0x4b8411); 23 | } 24 | var mykHn =function(_0x8f85ee, _0x4723ba) { 25 | return _0x8f85ee / _0x4723ba; 26 | } 27 | 28 | var localStorage = { 29 | getItem: function () { 30 | 31 | } 32 | } 33 | function getResCode () { 34 | var _0x9fdfaa = _0x35c8 35 | , _0x5d9eb3 = _0x244c9b['AES']['encrypt'] 36 | (_0x244c9b['enc']['Utf8']['parse'] 37 | (Math['floor'](mykHn 38 | (new Date()['getTime'](), 1000))), 39 | _0x244c9b['enc']['Utf8']['parse'] 40 | (localStorage['getItem']('tempenc') || '1234567887654321' 41 | ), 42 | { 43 | 'iv': _0x244c9b['enc']['Utf8']['parse']('1234567887654321' 44 | ), 45 | 'mode': _0x244c9b['mode']['CBC'], 46 | 'padding': _0x244c9b['pad']['Pkcs7'] 47 | }); 48 | return _0x244c9b['enc']['Base64']['stringify'](_0x5d9eb3['ciphertext']); 49 | } 50 | 51 | console.log(getResCode()) 52 | -------------------------------------------------------------------------------- /cninfo/run.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | # @File : run.py 4 | 5 | import requests 6 | import execjs 7 | 8 | 9 | def get_accept_enckey(): 10 | with open('./jscode.js', 'r') as f: 11 | js_code = f.read() 12 | return execjs.compile(js_code).call('getResCode') 13 | 14 | def run(): 15 | 16 | 17 | cookies = { 18 | 'routeId': '.uc1', 19 | 'Hm_lvt_489bd07e99fbfc5f12cbb4145adb0a9b': '1699512068', 20 | 'MALLSSID': '3562362F436A55523130657178344F5A664C6C4577414C51682B4B305934307243477076554B41786F4138496541304839734B4B68305676475A6A367476434D', 21 | 'Hm_lpvt_489bd07e99fbfc5f12cbb4145adb0a9b': '1699512170', 22 | 'JSESSIONID': '34247136F3D45AC6A578E952FC12B490', 23 | } 24 | 25 | headers = { 26 | 'Accept': '*/*', 27 | 'Accept-EncKey': get_accept_enckey(), 28 | 'Accept-Language': 'zh,en;q=0.9,zh-CN;q=0.8', 29 | 'Connection': 'keep-alive', 30 | 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8', 31 | # 'Cookie': 'routeId=.uc1; Hm_lvt_489bd07e99fbfc5f12cbb4145adb0a9b=1699512068; MALLSSID=3562362F436A55523130657178344F5A664C6C4577414C51682B4B305934307243477076554B41786F4138496541304839734B4B68305676475A6A367476434D; Hm_lpvt_489bd07e99fbfc5f12cbb4145adb0a9b=1699512170; JSESSIONID=34247136F3D45AC6A578E952FC12B490', 32 | 'Origin': 'https://webapi.cninfo.com.cn', 33 | 'Referer': 'https://webapi.cninfo.com.cn/', 34 | 'Sec-Fetch-Dest': 'empty', 35 | 'Sec-Fetch-Mode': 'cors', 36 | 'Sec-Fetch-Site': 'same-origin', 37 | 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36', 38 | 'X-Requested-With': 'XMLHttpRequest', 39 | 'sec-ch-ua': '"Google Chrome";v="119", "Chromium";v="119", "Not?A_Brand";v="24"', 40 | 'sec-ch-ua-mobile': '?0', 41 | 'sec-ch-ua-platform': '"macOS"', 42 | } 43 | 44 | data = { 45 | 'tdate': '2023-11-08', 46 | 'market': 'SZE', 47 | } 48 | 49 | response = requests.post('https://webapi.cninfo.com.cn/api/sysapi/p_sysapi1007', cookies=cookies, headers=headers, 50 | data=data) 51 | print(response.json()) 52 | 53 | 54 | if __name__ == '__main__': 55 | run() -------------------------------------------------------------------------------- /ctbpsp/jscode.js: -------------------------------------------------------------------------------- 1 | const CryptoJs = require('crypto-js') 2 | function DESDecrypt(e) { 3 | var t = CryptoJs.enc.Utf8.parse("1qaz@wsx3e") 4 | , i = CryptoJs.DES.decrypt({ 5 | ciphertext: CryptoJs.enc.Base64.parse(e) 6 | }, t, { 7 | mode: CryptoJs.mode.ECB, 8 | padding: CryptoJs.pad.Pkcs7 9 | }); 10 | return i.toString(CryptoJs.enc.Utf8) 11 | } 12 | 13 | e = "JwdsCjMM05e4niaZd3zOKUgFkQs25IxeAQ6Fm9OOBofWvIslqhFdSNy+XafvzdbH" 14 | console.log(DESDecrypt(e)) 15 | 16 | c = "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" 17 | console.log(DESDecrypt(c)) -------------------------------------------------------------------------------- /ctbpsp/run.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | # @File : run.py 4 | import execjs 5 | import requests 6 | 7 | 8 | def des_decrypt(data): 9 | """ 10 | des 解密 11 | :param data: 12 | :return: 13 | """ 14 | with open('./jscode.js', 'r') as f: 15 | js_code = f.read() 16 | return execjs.compile(js_code).call('DESDecrypt', data) 17 | 18 | 19 | def run(): 20 | cookies = { 21 | 'yP4dbuxzYtffO': '60vANnjI9GW1BKec1T_i6PwouMUlfs1iC1C6lDW87UL8l6vBFdWbXLyjbCMWDiRIvPYbk9d9SmWpYrJqYgxZceLG', 22 | 'route': 'ef535e3a0d0b78922cdc0df3d6b94403', 23 | 'Hm_lvt_b966fe201514832da03dcf6cbf25b8a2': '1699803946,1700116132', 24 | 'BSFIT_EXPIRATION': '1700171918384', 25 | 'BSFIT_DEVICEID': 'V8MBnE2oid-nZD8FIVLL9FMGDRtVoh0rJrVzWxeTS9v6wvq1a9buvSaqLbiRa4LvS1tCNKvOt9mTt-HO1lo-orQgudFYItjZ9yE7UEFWxvwEOWZnHQNfywd8Cnl7z9mai5_xPlaqwgAbQ1YwPXiuO9BwFbEDDyFC', 26 | 'Hm_lpvt_b966fe201514832da03dcf6cbf25b8a2': '1700124549', 27 | '__ts': '1700124550001', 28 | 'BSFIT_rgt3l': 'JShwJ3lex3vRz3MVxQ,J3lex3JwJSsRzB,J3lNJOvwJSlVxr,J3lRJLQwJSswxQ,J3r1JLvwJSvwzB', 29 | 'yP4dbuxzYtffP': '0pTsL9q1bs2DESiDYeYL8ZpI4_BVTkyogV1qV8L57cUwUW5cHlJHT7xwNITusmByskKvyEz3FqvmRp5SivetYTvhTg67eVDx_kMytisBV3Pv2Xju88FntDJ7JR_b7TX9y0kmMQr381JiIP_1.EGb2Ycxy9QD19fHNBmUJW1niFyQu8hNFPh1wAVSXgZSkBlHEupWXs06cvFVogLF.SfkIQ1aRSz2N266Ntw4duogVzOECW1mwYFCjpD4Y.c2NkHmwJ8OEWl.ZY8LDyZh555P3MWx8ODnz7rSWFgpvCQ7xxekclyYlsevvW12DvxeTReJqn1obealpCXsXGSEAj4lXSam8fkIF4Kp6QquPJ5FbV5UZLLZ_xLaBMNyXWHIeRYbPZMAnGAUi3327V_vhrywut1ZhuB_A9qoH2WT25uMcltL', 30 | } 31 | 32 | headers = { 33 | 'Accept': 'application/json, text/plain, */*', 34 | 'Accept-Language': 'zh,en;q=0.9,zh-CN;q=0.8', 35 | 'Cache-Control': 'no-cache', 36 | 'Connection': 'keep-alive', 37 | # 'Cookie': 'yP4dbuxzYtffO=60vANnjI9GW1BKec1T_i6PwouMUlfs1iC1C6lDW87UL8l6vBFdWbXLyjbCMWDiRIvPYbk9d9SmWpYrJqYgxZceLG; route=ef535e3a0d0b78922cdc0df3d6b94403; Hm_lvt_b966fe201514832da03dcf6cbf25b8a2=1699803946,1700116132; BSFIT_EXPIRATION=1700171918384; BSFIT_DEVICEID=V8MBnE2oid-nZD8FIVLL9FMGDRtVoh0rJrVzWxeTS9v6wvq1a9buvSaqLbiRa4LvS1tCNKvOt9mTt-HO1lo-orQgudFYItjZ9yE7UEFWxvwEOWZnHQNfywd8Cnl7z9mai5_xPlaqwgAbQ1YwPXiuO9BwFbEDDyFC; Hm_lpvt_b966fe201514832da03dcf6cbf25b8a2=1700124549; __ts=1700124550001; BSFIT_rgt3l=JShwJ3lex3vRz3MVxQ,J3lex3JwJSsRzB,J3lNJOvwJSlVxr,J3lRJLQwJSswxQ,J3r1JLvwJSvwzB; yP4dbuxzYtffP=0pTsL9q1bs2DESiDYeYL8ZpI4_BVTkyogV1qV8L57cUwUW5cHlJHT7xwNITusmByskKvyEz3FqvmRp5SivetYTvhTg67eVDx_kMytisBV3Pv2Xju88FntDJ7JR_b7TX9y0kmMQr381JiIP_1.EGb2Ycxy9QD19fHNBmUJW1niFyQu8hNFPh1wAVSXgZSkBlHEupWXs06cvFVogLF.SfkIQ1aRSz2N266Ntw4duogVzOECW1mwYFCjpD4Y.c2NkHmwJ8OEWl.ZY8LDyZh555P3MWx8ODnz7rSWFgpvCQ7xxekclyYlsevvW12DvxeTReJqn1obealpCXsXGSEAj4lXSam8fkIF4Kp6QquPJ5FbV5UZLLZ_xLaBMNyXWHIeRYbPZMAnGAUi3327V_vhrywut1ZhuB_A9qoH2WT25uMcltL', 38 | 'Pragma': 'no-cache', 39 | 'Referer': 'https://ctbpsp.com/', 40 | 'Sec-Fetch-Dest': 'empty', 41 | 'Sec-Fetch-Mode': 'cors', 42 | 'Sec-Fetch-Site': 'same-origin', 43 | 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36', 44 | 'sec-ch-ua': '"Google Chrome";v="119", "Chromium";v="119", "Not?A_Brand";v="24"', 45 | 'sec-ch-ua-mobile': '?0', 46 | 'sec-ch-ua-platform': '"macOS"', 47 | } 48 | 49 | params = { 50 | 'oArpptFq': '0Ms3ssGlqEkTYi9cGPihytpy1Mi7auLLE8Y3gM0tlvc7hzVoXB9cOEJ3V8c34CVl6_dVni35lXYDG_bM9IICaxj6twvHOzJdH', 51 | } 52 | 53 | response = requests.get( 54 | 'https://ctbpsp.com/cutominfoapi/recommand/type/5/pagesize/10/currentpage/1', 55 | params=params, 56 | cookies=cookies, 57 | headers=headers, 58 | ) 59 | 60 | print(response.status_code) 61 | print(response.text) 62 | print(des_decrypt(response.json())) 63 | 64 | 65 | if __name__ == '__main__': 66 | run() 67 | -------------------------------------------------------------------------------- /endata/run.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | # @File : run.py 4 | import json 5 | 6 | import execjs 7 | import requests 8 | 9 | 10 | def parse_result(result): 11 | with open("./jscode.js", encoding="utf-8") as f: 12 | js_code = f.read() 13 | ctx = execjs.compile(js_code) 14 | result = ctx.call("webInstace.shell", result) 15 | return result 16 | 17 | 18 | def run(): 19 | cookies = { 20 | "MEIQIA_TRACK_ID": "2Y71ehAspL2WJYdEOkM4bCwX34s", 21 | "MEIQIA_VISIT_ID": "2Y71ekVndN93NWAFHtHltaRkaBd", 22 | "gr_user_id": "e2fb1ff1-0a5e-4969-b974-0d0e365c508c", 23 | } 24 | 25 | headers = { 26 | "Accept": "text/plain, */*; q=0.01", 27 | "Accept-Language": "zh,en;q=0.9,zh-CN;q=0.8", 28 | "Cache-Control": "no-cache", 29 | "Connection": "keep-alive", 30 | "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8", 31 | # 'Cookie': 'MEIQIA_TRACK_ID=2Y71ehAspL2WJYdEOkM4bCwX34s; MEIQIA_VISIT_ID=2Y71ekVndN93NWAFHtHltaRkaBd; gr_user_id=e2fb1ff1-0a5e-4969-b974-0d0e365c508c', 32 | "Origin": "https://www.endata.com.cn", 33 | "Pragma": "no-cache", 34 | "Sec-Fetch-Dest": "empty", 35 | "Sec-Fetch-Mode": "cors", 36 | "Sec-Fetch-Site": "same-origin", 37 | "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36", 38 | "X-Requested-With": "XMLHttpRequest", 39 | "sec-ch-ua": '"Google Chrome";v="119", "Chromium";v="119", "Not?A_Brand";v="24"', 40 | "sec-ch-ua-mobile": "?0", 41 | "sec-ch-ua-platform": '"macOS"', 42 | } 43 | 44 | data = { 45 | "year": "2023", 46 | "MethodName": "BoxOffice_GetYearInfoData", 47 | } 48 | 49 | response = requests.post( 50 | "https://www.endata.com.cn/API/GetData.ashx", 51 | cookies=cookies, 52 | headers=headers, 53 | data=data, 54 | ) 55 | res = parse_result(response.text) 56 | for i in json.loads(res)["Data"]["Table"]: 57 | print(i) 58 | 59 | 60 | if __name__ == "__main__": 61 | run() 62 | -------------------------------------------------------------------------------- /hanghangcha/jscode.js: -------------------------------------------------------------------------------- 1 | const Crypto = require('crypto-js'); 2 | function decrypt(n) { 3 | o = '3sd&d24h@$udD2s*' 4 | var t = Crypto.enc.Utf8.parse(o) 5 | , e = Crypto.AES.decrypt(n, t, { 6 | mode: Crypto.mode.ECB, 7 | padding: Crypto.pad.Pkcs7 8 | }); 9 | return Crypto.enc.Utf8.stringify(e).toString() 10 | } 11 | n = "fj7NKjnIPc2kL7S2NAZ4zxjz2Ly3gLY7mVbfIoVn4GUbrsTTXr6d3t5a2hFGjXMhS4sjd+JvrGhVJEqohtGY3vbWeWDSMbSi9hZXCKUjnPfpesctDNhI7BeaDQigoJQWXD8V+HR29fVwRMx8rKTJqyTsjScb67bWXtfVyijscYkyKcqGTT4ekZ8zXqBkRwsKZF+ZNv+z8kC+oQ/pyNpRAFfnhBEgkIfdCHcH0R0+fDwCciws27wIh423up2XI47+VQGHUG94xAYxCrO44l7besKRZtNQMPyIoecced6TpQuzafN+8xYNWgrTIREQEZvob7+uw+aNFhROS4UX8f1k0k76gulhqVmn8OKl+8AwgoId6bxddEA6dPXrZFr305JXlyrXw03o0S0z31uHFQ0uXKoUowEWDGsBONyn/5gF68abb1GeVSfepIsvU/lZ1If5hgKnT0qbmji+w6q5KMdXUaoK/egzN76yjQTVXHVIGd1ZnIxBHAeIYHTcmOdX+NV8FRaw2HV6B2rfBF/Qd2p/9dnjjbwbCU8/GmQA/kHJ1bzDiPgECWU82jcc7mO41hCYTl0pX28WZRvEB37BQ2zzdv/Fu8IBZjG2TDaB+at3MWijX42Nig2gtcBVb8ue1tDdr8VgTW+DxIfBGwuK6BOc7txSfqCLv7luYiIHW9QKP97hRsMHnfafdFrkOQUZDEkgljNNvEXuoHb4l93BVeD/6BD4rgJ7CzvkcN9Ytkr0rjLJtCK+Mf7aFPOEU38ZRZK3SdWZ/NNEJPvLhNUcklx/i4CmhtcOmlyIrRHJLa6ZytZ8zDmAyqOVENxhr7gw1Bl10ViY4fXIRHUpyjCVktbzRE8H5+92kFbjSBxyOIwEjUUE0MxsMc4lQhLv7M/PVDJDpnTHWqSG7GSMUnsjN3K8wufYYe1cViFAUPJ4sXKYGupxzuJ6xJEuY412shGXWRwtoIB2Lj01r+Nmch+3UNyghbplJmGe9qdA5ofR9EOKz03KUUalltKixAV97dhyvUDln8Rsb970orrqZjUHxoQfqEig+p5du6byUDjM3tqIIvLjafZr8EXLfaqYRuCa32+s2wyTyBDcfZMX1oclko0vsTVg5GPOXfoouhvA9vT2dOluG+tQWG2D9dbliJ8MgTduJRAi43DyCdQ9XaKWC1skS7b0LlT/3NSzn825r5PIfbb7mcqWqrVvsmKH60zAmZ/qKZeWrWObo9NHllWBzQW1mXMDtu9kIo7L6gNNhqdmUH/GVDQViynNGVsMkKNGCOo2umUmYZ72p0Dmh9H0Q4rPTcpRRqWW0qLEBX3t2HK9QOVbB5lbcDQ6Ei2o7GaqPvCN2vCCiyUvl2oV2tQy/uY3HP72/5Qfz3eAEphLlHkubVPbDJPIENx9kxfWhyWSjS+xNWDkY85d+ii6G8D29PZ06ThY9RV7v3qnXHj8jNCKLd8lECLjcPIJ1D1dopYLWyRLtvQuVP/c1LOfzbmvk8h9tvuZypaqtW+yYofrTMCZn+opl5atY5uj00eWVYHNBbWZJzoxmOyZ72965BnrmCTjA+k6NFbFun9s2X+oIabMx7GVJbzD1RHptT8h9lzd/GucFn4FhHNhnNyUSCrnMQ7B5JcMrZk2Mnr9NfSt70nfqASpA1WVZBsJD1nhkxORWTzAvtA1wJ/9FTamMcgCpZPNSk+9VFFzV1sxEfXtvNqFGOfD89/zCfe3wBf9lbOVkk+0v5nmJQz7w7dryEskndFxkDrDW3udEPbIrQRwsviE0d+ssbIoCYSpFBNEZqebAMLy1091lOStcchvOADYtsp0RrtM4Rz8wBwXyYbbU/WbhtgdT3MRSQKYOWYs2T57QQfNeXZL9ZlIri7hETHqO2mme4vVPG+gN+pZBffjUawiorTn60nPlUvSEdNdX9Vqnuva5k65kMr6CAEnq4TElHwpmwTQzGwxziVCEu/sz89UMkPUimEPh9flf78nToCIcg0NhB9jsnfzhxsKTw7//z+wbvkMoSh7k+nNUZwctXrLua0Tct0HIMzd+jYG1UT7bNAPveQZWJxgr7Bv61XVaPiQX8txUTLDvkkQzb+1aqsV5HNcMkJjRru9G28aeNQRCVUaEMVLTDKH5PudBxUijLhiHAUlTxUFTriAvdJMfuafT8eA6+jd1xVclRAbZZgk6UNTaRoj67b3Wj5SgoHAUbwCUCIUBzqYGS5FvojmlM5WJTuWMb5JjwjGu8gDzkDr0vg3A1NFL/H6A233N1M7wr8YU+iJofYJIU943lp5XX/EADPENeNlInNgRna7jfXoR5kzvPsZ79CXqIhi2kg8RIy5kYqZaPOAvoKCwqDPvd9YIl6y+RaOsaY8flqIVF5mzSiUyAQaCasqiwy44PBGiAstWo42qCMKKAhk+Xn0q0lVbCNRAz9cPIYomi+m3Or2sDyOe3hS3SFx5qawwzZ3PoWLa9AwxtdT47s57fLuFcR7vXsd6bxddEA6dPXrZFr305JXnVOsKcyvoKzAQtNZKY2D16CRGTIcPynen9qmRCtNYcQ2OxVRsxD6Vc81V63AUbevYm6TxhARjcFy2er1JGIk3fUyX3IgpLP+tFholXL5iKL2Ix6wT/DFDVK+zFdAB1O+5OHj1OMXbHBDMxi5b+Xn8lVErJeSpkagw8MWorzp8xxUo5BnC716VIuSg3eCbjXy6wWy98gvu+h9Q3Gk8jEI6j0apgzWedKS838Zlkl7GPVJGPwAbY0xB6uwSM/re58IyOtT+YGXGea8RFzJssveaFmYxpJL+LyNy6cAs5Ils6J04AIbSsRj9DoOIxpaZe95YKULJnd6Kzz4f05GSayiAlz1NvqI4TRVvDgx/Qs7VQys70NyAXShKweoRqPWCxLxCgUOldClh25rOQkpK+9KpsTeBdov0cvVgqH4w8c3mC58Akj1LEIxpFR/6mQwqIFVuQnu29rupyXtukmal24hXCVx6f5CDyVkNM7qtEJMAtD8VF4DIWpo7GhKtXOojoawmEXZ/p+ErguboICvz4zZoUAnd9OPAkWJvD86QQi6C2pPUQP1lj4ZimcCUqcuVFXGHT/6XRo/yOpf8MxkBn/qOaCwZHcGHmJunM9a1e0zBIjgAKUzTt4oWnpPN5QCn5hUSSoam5AaQRjLL8g6FESPmwFgc/2L/hv2ykzIDn9VU/rqHzELRxCuKFLRf3vn/qZc2aIfPgqD9rM/aKkwOyq/yBa5g1A1jaQOMmMPBfZhSd13wuOaUoeAW1CmxzLFBe3JjgyZZypJjYh34tCfd1xO1s+FqObudlDUguyOei2+QUF4Q9yu10tj0bec4eyMv8/mddkOvJVIe/yCy8fFuzPGgAUG6Qm734OZsEZCXr6J1H3uhvEAlYlKfJc28Q7Z1bnl62CejzLvtQqTk71YjO27MNAyXBajYTxYjWeeT/p9Jj4CykbCumJ3jchIVInsr97hDF3UT7V9tjxXTufhMFhwpmF7lScQADNiBKMnEDQDU8VBVorvdX1+UobfaEj+tVig56Pvq0TAVEYC68PU2PTmho9D/29a6TKy8OyDorDZzgddsRCfGdCE56CDzx7WpL6QnJ18mOp00f9ciOh0OSqeiZe9g3NfTXHHT8/E+nDOhLJ7NFe0cVLW9LVAl1MOogXSmKP0VGTcPRWo72uJRAnhStPDYkrMFp6tPL0Ld8S05KLd7x3rkgyewNXDlEtIPWYBWmtJ5JZyDowjIA+JP4g3dRfQLP6lZYFYXV7kvVtQAlfLcVEyw75JEM2/tWqrFeRzx7kko2zk9Ho/XOp8uLABwFP9VyFTRgDP14jDX10QrPuIiSePP+B8z+96JSa4HnKc5Bhr8re9mr9VlyMBmzCEwFJ/LX6kZgMUwpseoa+dUtgbF17hmGFQxzdsyBRnYnFisW9mOsx7u28zvX7/fZBQmroSi7JIe2z6mwHiFfYq+W1kil/mxaiZpqZJ8bczcnFzvOHAtEzB43hYTZxOC7kJdzSXu7tk3hVOGOIy+1Z92h/4sodeQynRL36Qh3XHnwCcn5hUatqWb39x8tpYtgnSaZL1KivBHWkS2hazHobQ/YjS81+I5C5hqhCsi4PXJ6fIHwGrhA8oPYDGk/e9lwQA1jTbfMng/yYVDq/hEHuwbMigXAP1yuqIfL0fbserExpUc5kDnYcGOOLpBOrvhChdHa8741I889lhKpRYSjMl9IBL1iUyETxQUQ53SastJ8H+8f/1Gr8hy2hqYHvvTJ9tIQTGNLA/DANE2FpmzY2pGz1zlHdW9xivPhxUTPyN+ces/+m9scCEoTAjpt6BWVHQHY2WXMidinjiusrdR5trqQfrng9g2CALTR9STTRSEHxwR/f9n6C6uyKaROYnPLpxEJ4MAdp0dGu1pIwl4eIqjKv2WB6xnwba14AfOPLsCizNvXy3qDLWedOQnauo0UYKwP4t3MPqo3NMVvOVXFvNRCto9yjCxE7RN6BFG8BEnIbNS9YlMhE8UFEOd0mrLSfB/vH/9Rq/IctoamB770yfbSEExjSwPwwDRNhaZs2NqRs9UeEjv55tJ01LmJYMrBNDxyQzCW7vz+8K/7eDApBM0AVUhx9ecCPci+w2aWi68jwr654PYNggC00fUk00UhB8cBIJVrLveNG+fSmvk9Kv8laeDAHadHRrtaSMJeHiKoyr9lgesZ8G2teAHzjy7Aoszb18t6gy1nnTkJ2rqNFGCsB/JuVAWRNAaKdzRG5N0b+fQQ13IckbsiBAkDjJgxoWtOrR5H3ClBnMcFm6xgRJHIMNrJ1L4OyW+GRcbIy/n3eEaW7FeZ3M9C4FkuzBnvIq0QESmcUSajlFKo0xM05U+7uR8/BAY17SkcjBphx+bcM3UsQqzc/DkRML5WRhkk3ArIADzcCutTFJBYsoK5x7jRk=" 12 | console.log(decrypt(n)) -------------------------------------------------------------------------------- /liepin/jscode.js: -------------------------------------------------------------------------------- 1 | const crypto = require('crypto') 2 | 3 | function a() { 4 | var array = new Uint8Array(16); 5 | crypto.randomFillSync(Buffer.from(array.buffer)); 6 | return array 7 | } 8 | 9 | 10 | for (s = [], l = 0; l < 256; ++l) 11 | s.push((l + 256).toString(16).substr(1)); 12 | 13 | var u = function (e) { 14 | var t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : 0 15 | , 16 | n = (s[e[t + 0]] + s[e[t + 1]] + s[e[t + 2]] + s[e[t + 3]] + "-" + s[e[t + 4]] + s[e[t + 5]] + "-" + s[e[t + 6]] + s[e[t + 7]] + "-" + s[e[t + 8]] + s[e[t + 9]] + "-" + s[e[t + 10]] + s[e[t + 11]] + s[e[t + 12]] + s[e[t + 13]] + s[e[t + 14]] + s[e[t + 15]]).toLowerCase(); 17 | // console.log(n) 18 | // if (!c(n)) 19 | // throw TypeError("Stringified UUID is invalid"); 20 | return n 21 | }; 22 | 23 | function getTraceId() { 24 | var b = a() 25 | return u(b) 26 | } 27 | 28 | console.log(getTraceId()) -------------------------------------------------------------------------------- /liepin/run.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | # @File : run.py 4 | import json 5 | 6 | import execjs 7 | import requests 8 | 9 | 10 | def get_trace_id(): 11 | with open('./jscode.js', encoding='utf-8') as f: 12 | js_code = f.read() 13 | trace_id = execjs.compile(js_code).call('getTraceId') 14 | return trace_id 15 | 16 | 17 | def run(): 18 | cookies = { 19 | 'XSRF-TOKEN': 'KCNNBUzkTc6KmIA44EYTTQ', 20 | '__gc_id': '38a4a788c0544fa5b05d427847394174', 21 | '__uuid': '1700205285262.09', 22 | 'Hm_lvt_a2647413544f5a04f00da7eee0d5e200': '1700205286', 23 | '_ga': 'GA1.1.176558359.1700206027', 24 | 'acw_tc': '276077db17002071291317333ed8bc4886fd9d8f27973e6ea11af9620884ec', 25 | '__tlog': '1700205285267.84%7C00000000%7C00000000%7Cgg_pc_02%7Cgg_pc_02', 26 | '_gcl_aw': 'GCL.1700207544.Cj0KCQiAmNeqBhD4ARIsADsYfTfOhENBwZJ-921Seo_nx68-9QjwRcUyemUfzBTooqHy-5hTcgslVssaAvcAEALw_wcB', 27 | '_gcl_au': '1.1.1700661451.1700207544', 28 | '_uetsid': '3f13d470851e11ee8811294005316d33', 29 | '_uetvid': '3f1404b0851e11eeacef470cbf27a9e9', 30 | '_ga_Q11MZCVPQN': 'GS1.1.1700207543.1.0.1700207545.0.0.0', 31 | 'Hm_lpvt_a2647413544f5a04f00da7eee0d5e200': '1700207557', 32 | '_ga_54YTJKWN86': 'GS1.1.1700206026.1.1.1700207753.0.0.0', 33 | '__tlg_event_seq': '92', 34 | '__session_seq': '18', 35 | '__uv_seq': '18', 36 | } 37 | 38 | headers = { 39 | 'Accept': 'application/json, text/plain, */*', 40 | 'Accept-Language': 'zh,en;q=0.9,zh-CN;q=0.8', 41 | 'Cache-Control': 'no-cache', 42 | 'Connection': 'keep-alive', 43 | 'Content-Type': 'application/json;charset=UTF-8;', 44 | 'Origin': 'https://www.liepin.com', 45 | 'Pragma': 'no-cache', 46 | 'Referer': 'https://www.liepin.com/', 47 | 'Sec-Fetch-Dest': 'empty', 48 | 'Sec-Fetch-Mode': 'cors', 49 | 'Sec-Fetch-Site': 'same-site', 50 | 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36', 51 | 'X-Client-Type': 'web', 52 | 'X-Fscp-Bi-Stat': '{"location": "https://www.liepin.com/zhaopin/?city=410&dq=410&pubTime=¤tPage=1&pageSize=40&key=python&suggestTag=&workYearCode=0&compId=&compName=&compTag=&industry=&salary=&jobKind=&compScale=&compKind=&compStage=&eduLevel=&skId=hojhqg3eiakc72qcb55s9m3oc36nmdub&sfrom=search_job_pc&fkId=hojhqg3eiakc72qcb55s9m3oc36nmdub&ckId=rv3b64m5ctjhibco3gmg6cijecd010da&scene=page&suggestId="}', 53 | 'X-Fscp-Fe-Version': '', 54 | 'X-Fscp-Std-Info': '{"client_id": "40108"}', 55 | 'X-Fscp-Trace-Id': 'e96340b5-fdd0-4880-ae96-2aa619398933', 56 | 'X-Fscp-Version': '1.1', 57 | 'X-Requested-With': 'XMLHttpRequest', 58 | 'X-XSRF-TOKEN': 'KCNNBUzkTc6KmIA44EYTTQ', 59 | 'sec-ch-ua': '"Google Chrome";v="119", "Chromium";v="119", "Not?A_Brand";v="24"', 60 | 'sec-ch-ua-mobile': '?0', 61 | 'sec-ch-ua-platform': '"macOS"', 62 | } 63 | json_data = { 64 | 'data': { 65 | 'mainSearchPcConditionForm': { 66 | 'city': '010', 67 | 'dq': '010', 68 | 'pubTime': '', 69 | 'currentPage': 0, 70 | 'pageSize': 40, 71 | 'key': 'python开发', 72 | 'suggestTag': '', 73 | 'workYearCode': '0', 74 | 'compId': '', 75 | 'compName': '', 76 | 'compTag': '', 77 | 'industry': '', 78 | 'salary': '', 79 | 'jobKind': '', 80 | 'compScale': '', 81 | 'compKind': '', 82 | 'compStage': '', 83 | 'eduLevel': '', 84 | 'otherCity': '', 85 | }, 86 | 'passThroughForm': { 87 | 'scene': 'page', 88 | 'skId': 'sz68pt8lfv679i6ai3ra5fcstrmvf4e9', 89 | 'fkId': 'sz68pt8lfv679i6ai3ra5fcstrmvf4e9', 90 | 'sfrom': 'search_job_pc', 91 | 'ckId': '2is4e6ynku6dfhqm77f0913qagb07599', 92 | }, 93 | }, 94 | } 95 | trace_id = get_trace_id() 96 | # 更新X-Fscp-Trace-Id 97 | headers['X-Fscp-Trace-Id'] = trace_id 98 | response = requests.post( 99 | 'https://api-c.liepin.com/api/com.liepin.searchfront4c.pc-search-job', 100 | cookies=cookies, 101 | headers=headers, 102 | json=json_data, 103 | ) 104 | print(json.dumps(response.json())) 105 | if response.json()['flag'] != 1: 106 | raise ValueError('IP被封控,需界面进行验证') 107 | 108 | 109 | if __name__ == '__main__': 110 | run() 111 | -------------------------------------------------------------------------------- /mohurd/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pangxiaobin/SpiderCollection/b02e7038d7b3127c125056a3f3435e6acf1c3157/mohurd/1.png -------------------------------------------------------------------------------- /mohurd/jscode.js: -------------------------------------------------------------------------------- 1 | const CryptoJS = require('crypto-js') 2 | 3 | f = CryptoJS.enc.Utf8.parse("Dt8j9wGw%6HbxfFn") 4 | m = CryptoJS.enc.Utf8.parse("0123456789ABCDEF") 5 | 6 | function get_decrypt_data(t) { 7 | var e = CryptoJS.enc.Hex.parse(t) 8 | , n = CryptoJS.enc.Base64.stringify(e) 9 | , a = CryptoJS.AES.decrypt(n, f, { 10 | iv: m, 11 | mode: CryptoJS.mode.CBC, 12 | padding: CryptoJS.pad.Pkcs7 13 | }) 14 | ; 15 | var r = a.toString(CryptoJS.enc.Utf8) 16 | return r.toString() 17 | 18 | } 19 | 20 | d = "5588a9e126c91a28cc2f6813e379336977159750a8fdd0f1f27d1527b2df4113ed657c9c267ca35537b1338c08c36e29944919d273b5e08e416baf5d76c4a079d556278280aaf2fdb4e313b58a9e87e606a4ae5d4b6bf3763b46b64897aac96af51bbede573841e119883a6f44153d37b32ba56b6c4d9b5024038a77b43d37cc55dcfc83da9ea42eaa1fd2b875f77d480f3ded5a16f9e61a625f02c0eb0172b6b95783ea65ba4f294c292457e3ed2aaf63d487d22bb5deb07eee086b9dec4c6f57b2cfa4034d47d5ea3ac575e9251799840f20712a87a7f5abfb71a0d119ccd6b3f432dd71db58f920f0e3d1ca24ad4c5d5f108e14d273f0120b27a5bf269a0c8464886233b8f72240d901d89fdedc7fa860893fa1e394dc27be08175666fb58ab61cdca0323a36ab3ce8a4492e207b05f3422e8ab9d87c46594aabda111b3365fe377cf4df6db1d5d8115ab4da2d0f8c4b916b8fd012510aacef7871d9847e9b5bdf605cc505ff85949891755b684ed2579fe065133b15da2567d323d3d1e611464a008ab9e1abebd7276444fc3b8bf9609366a5663bef30400bd7ce08b7b29a87100c317bfc4ac74edc85abac10be1013de27f26ad46214e9633f5cd5f237615a5eae0c91ff3426dee9d9cd37150bce4e83c400102b850905ae306c4adebd5f289b5a4e24701630f21fb44ff6a1fc60bf44c1c3883c6456d65538b315a421bcecd0ee6fd47f67577a1201682d45133d222ebd750b68ffe4f04990ab8678fac93388dae870c7f047cd2102aaa0772fb2df24027e52a3de39448ec2ee44a58fcde3a83e918dd2a0331bb65d668b329a3bbec1e088330d340a728160bf8a651900547bd9fcba1bcbf92facb906f60fbc6047d9e1ec79eaa5e70ff03ba970b28bc8af0307d6fefa30909aa2fd14cb68ba061c35f27ebc7d4049494a7f39ec18fbd772de492fb78ce39fd925f1d025d8ca09a2c4c7c4968da03a8359852c6e0d2a1bffd213fb4d01efe86764d73b3fef1abe323d419a62db2c22c79d7ae86b4586325864e4b0f44c56e64d10f051deba1787b6ca49dc93e5fe7dd315d2e93f6068cdfdbf5df4fe262ba806ce34f75c54680841621cab4a50a9270511186d665606dbcf450070f6a881a6564fcd88601d3747991287464799151dd162561fa0b4505aa400c2c98b22dcc5c93104b62b1fa0f812558f7e4970c951e945cd7ebd1cd03faec9c85fcfd15d3e1a129b7e4c2bd6fc133fe6841b885183a32db62de79ed5157268e6d06658564de29dc8b78f59db98f8c1e47cae4c79064ee18f04b75cb4ca5f3f42037f901e6c7208e3046a2bf07feed551fb0d9e32fc98908b43a9a56c648efb900fe0dea352cdf5b8d5dd89e88efd3eec06df790cf93ba41c1fe4b94e64604e65f475dfff1b854373bdf3e0841860a25207a8640b87889c6fdc101fc9c9295f20e3703cb5e616bde2f7cea36f1f9d38e436932595030fe5fd9c210077eedf1978d962770407a9e652e2b2093885514c493eba334582929f066c62f50242beee618b2a5b854ea6332ba0d7eed482aa8fe1549ae4265c1a4cd3cab46241cdd6134863e9f3329d1969c57f58a1ca18de03b73c5b5db0d3465506725dee03a8403104d8da11b931c8524b93d97786f90c588b310ccb0ee987995fc5bdbcb1a6fbead73174df1541d122521b792dd602a2547257a99251942a0e16f75eb6c40001582d38eccbf8bfee22d7e020f779b496beafe3e6cc0f70d31748495c526cc3a19f327439bf4e64ba137fa5ae2bb69f25015ae830e1c61c0a492576eb2140f08abe44fb31ee2b1a985f9fda4b29de1a1add46046b1b04a5767edbc03ce0175c157e841c24b2a8711b2e85310c0d49d2fbdd28ddfc2321092f35159bacbdd4e64b0ebd9b3665546d6a3dab20ecf31cc03c5dbb8f69ccef315d6cca6fe04add4adaf42676cfce5cf6d62a504f408ca02bc686695631af8fe55ed6bd30acc433370cd1f93631c5210cbccea64ef2fc0778a1bc18fb8ea1a7a98baefe5ba6fbc4fe0de8ab19805646b6ca376d86ee7b043a317ca3f376e9f1a44ae56ab16eb41c5d66196e93d938fce4900d408afb3546e79203ffd96b1e87e44225e80c12f5ec85d7d8d236767caae7cb7609f7097ac8941e1178dd701dad435329b3371ee8d7d3b67bccf6baef1fc4de7948dc496d394b7aa0854a907f4d165a9053585dfb1ab8b2c66788c98f3a64db629a4d6c619100630f9ea02da2d60370f8895d824b2cf99aa0458973443bfaab8b2c83b5c06016b1670a898241b17bab7b5815190cadee7343d63a32676909536a8f851fe576155c6273b8d85f67fe9373e7f118e1f1cd43aeac922ec3e6a235f6603a8905e8ccf23b7cd0dca002b94dd1ee55d44acd374108c1d8e1afa5934e0e29b3ae836dbe1aea2e6fae82f1c724fde9e0f429b25e8426dcb1603b84adb62626f87a1b1666f868d3999fc5b63c6a14e2fafec45cb9678869b239ce567f7acd49936f9f068c52d03dc7eebd77bc85c88a41f5f901b240b80e828a7cb9aba9ce53bd4a79d1db747224ea6f9514b6fc886cacc99b6349137db68c506f22af070dc73f139aeb66c192b2b51ff36e047febe7a81d52c109fe8db6d32a8f8da7a70170fa61f4f600384056b1a78032973424788ae6378bd68dc04ac08c617cf0cab7fb3bedb75b3c247fdf6a9d6957513898461a18c84a029dbcbe17b2262a366673319a5b4f6773a1e99e52eb088d15af3f5466140a82b6ae03f9d5805bdee84cd39e5b6ab04e57392a2d2e89b5a7b106679f0bf68a2ea85b7a35ebd5c9565601475e8af1d3296f6e9a1c75a69bfe5b4a07f06618132703767781e339418a3c08f225b96c67edaf53ed52f179f8228615cee8137fb6acff44ff9c06123ac895e08dc77f60fad4762d4f6dbe81199695f9fdd9353a3fc20e2cf0fe7c4230af6a1d9ffb10ed04c0db6c487bcd9fedcb4122a5ad36572d09845798971d5cee4ed5ccacadf47d9b7b27d9b42e6e8cb75d0431be14ab03a2dc5ce4cf3ec113a720eb902cbe92ca9ae858fdb56aae776fecd8e2a8fb8df1988f18f5fa8583f3963bb57e2ec84a1244bf115de357def36e84a905149a896a58fd8198971f56db69d34ad2a683fc094a2507794845492d766bccc0e2e201e9b6edfcb88080c85b201ae6dba9aaedc4d26a23986a0934df8d96284f21bc9d87497c342847aba8727d148d31360d6d170f46437c7ba328b76139e38dd4a2b64935fea2cac244e5c459aea8bf12b3b40c0d875c2919e905ef4be9f365bcdc75824367c76b3f302c102533ac14d80351c3d921aaca9711f32db4d4bd383563762b1b00e567a12513ef72afdac35cab7d07144cc7b1454d350570384281055d2205318ffb36d890497034620607aa0931e07f640058d0da5c3eebe2dee0a580fe260f20aa63bf50468a42d1c4a7ba1a2566178b6cc7499d4f1a5dcc1fce42a1ce13192522863b1f7ad75e9c2904a29b931814872e62702ef86fb764567e31db726caa10f9a207f3852f38f19e3c898898f2ef7a66768bbdc07d2b33ccb77827ca9352f5bec0bf0b81f1f06a70387bd2c6b441e79ae1d909442dcc6112f1d6c03a3432a238cd4d239ce9bad8a5c5434ae840369ad6c477c24cd13d4b0cfa0e5ebb3f9f848765eb67ab65fc438499e9f795263a884b2fc42e2f96c7aae7742dcf5d758a3119d14a8d2fd62a73f0630a2860139763b93c497bc8a30f6cde663ae4cd10d3307da1815298123de20b1d548044935f0ef5ed1ee1bf5b8aa28ee76efadfd7ea730e8169e4336b3b12469674d8fde9ebdf5c6a323abe8c8aa2a02cb673ed068e1ad439f252802ec2a899ee25558f472ebcdb14901864ac9ab0cb8ff755bfa1d3b4bb6fe7c585cbbf7753fe91069babb70c498f82a553e16b3e1a79d9399f598f578f9cd4032914582aa0523ec50f4ff98ef31ea3ec4d2bc0b94686ecc72ffef6fc865551067aa35600ef018899a170151e697d0706e22f1f516b964601ecde5d5e1d4fcaa20327a648590d4da1a1bcfe57d38bf804f26e4e6048d49707f5dc28387f40cf6d214badf01d5b8147fc7a7f698d4436866a8f2013e96892b9df76bade45a403f7fd9a41b426dabebc579a719f3fa2284f26d308de5b208ac60feb3222c428bccf92145b0e52c98fda483d6c04bb37c1c28b489c25e14c7ad80e3138677b64388fdbc2085efb6ed051b0ad90ed1135331920dcfe907a3e3b1eac3167655173d4b40e2d08b685b75c39d7b08d39e720487e6d130a2c7f7c827f15cc3dd051d7651990fd24c41f397aeba869db1579b9ef6f7e4ca28877121a2fcae980b9e0273eee4f68d59f2eae389072e2814d9971b1a6e3183d56075cfcb03edfcffd27de8e2896803ef317f71fd1b843a57c0e78742b02e5beed2d4d8c9746f277ec828c3f63e707903863106f9825ef09c3456f63ffa4d0e50ffff4fc2d93bfa14f991770d0f72823d0b2cd8ac22b6575cfc3dd55584bb20a5a3f365209dcc145c3ba640dba5a919a3c1caa0aca8d1423492e4e8b1274d0498525a8b29384a74d0807186b2dbdf0824eb0618b42ce5dfe9e12d0e5cff9f61bdc11460490b18804802754719b955d78dfab3d03eea1c87eac648b6b4f79c2b6b0103874d9ca79efcd197c1cd15c55bb597f5cef217a6d50ec8ba3f00ddcdc434d84933298771e94df4aafd7b91776f9790c1e892f8a9451ff43e2043adaedbcb29711713db4ac4066c967ab42059c0b417c194e0d0b1411b8b8c84ddf0c146806a5efc3ec0fac6b20c59d40b39990ced413447434488abc826fcc640ee08e04bf7ffdd0ea58f5d2b81efd25ffd4a82ba36b7a48ca9fc8b9735ebcaa4ac086833b64d4e18cd77714376d6d25967e551ec764ceca3daaa853f81c48b8329d6ccf5d143228889551d3a431f6b0d61ce0bea5b802d9ef552dac7c5befd8435616a7c5de86c27b6b859e7904865418777b92f4d9f96b73050d5236c543b442953957872e75d05d0e0392c38a5ac209dcac180437a79d5e3f19e60bb69f4c0440f128ca40aacd13e877a6e99422b3ea082f33975102a703fa22a26d8868f072f12102323a7cad3605f2a35a885a48237e2b905a18fddc1f766ca4e09b498bd1ad36155d5c1a1b2ff1853f86a0701f698f6e15404a9da76a7319c88fe40d26285584785d8a334cf9ad8da319b2ca0b6e1ac9edc95fdf5da9949d753bdd00b6bd8210952b3c71d56067dfc67e5bfe3c0d4e9b8287519346f4b53717d48ba70bdc7a28773ec94ef04d78c3248bed6c8a6b1c975ff955499e555402e0b9103b7dd087e3bcf79fd2f7e9c901b52ba8a9355d729cb8b79c3d2b03773247832d986c86242f4e3c88475be053933528635cc97f3aa3f7b85379e878acfab35f95cdef39aa8d3f3e0a7b5d412f849b3d977eebfa8883e3bc79936c12e37e93a521962df56d3a5f387194293cbb010a1672a47785c61c8a843c3885570941d1cda511291e478fe6659d298daf08b3cf21ef503f5deeb77faa69641a8f6532bca3e24eddbf7758a5103b705f943f19dbc84163f0b53e353575c3c94adb8f83e35dbc95b1796292c7334e3fc4392864c408f919f9286de66b460d1172705983e9ca26a6349bd9032f8a8b3a6e0b37f5b3f1820bf7df8c0e683b623579f2d991a9359544f536f538aeebdf0f77b052f9c39d76615fe562068e3d53fc29d376a7cff27ed310ce66101cce0a26851579e6c8011881479d6c3c26b65278f48027a61cbd7bab7835c24f4cdddf2a4c73cea84b751ec674f2c4e8ec6d572c79671975079ff94c470e7d06247583af63b4bdbd7dcaccd42e33594d19e1bc48f41e46f2994b0b57afb682a33478b74c24094a07d4f6e7423f9846fd25ebc72a58bf1163a83f744bc39aa847ad4c9eff6900da3da7463731f874575f8591c42ff087465102692544af3ffe555036ee0b94bc42b5a03a4a9787222f1d39d75990e71622eeddb5cbc8ed53bae294d4ea4d4c028ea3d17cf4995409b2095c14b449c7c2a813eee5ce8d9a4bdb99aaece5aa7de57a8eda92b3bf14bb77cda15f686b8eea87407612d616a782d468c96acde490ff4c3db27e96e1eb6b4c25d71e2c5e5cde0c54df7c74060ab4aed8b52c9bd057d16eba9a6b1" 21 | console.log(get_decrypt_data(d)) -------------------------------------------------------------------------------- /mohurd/run.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | # @File : run.py 4 | import json 5 | 6 | import requests 7 | import execjs 8 | 9 | 10 | def decrypt_result(result): 11 | with open('jscode.js', encoding='utf-8') as f: 12 | js_code = f.read() 13 | ctx = execjs.compile(js_code).call('get_decrypt_data', result) 14 | return ctx 15 | 16 | 17 | def run(): 18 | cookies = { 19 | 'Hm_lvt_b1b4b9ea61b6f1627192160766a9c55c': '1699870954,1699924732', 20 | 'Hm_lpvt_b1b4b9ea61b6f1627192160766a9c55c': '1699924732', 21 | } 22 | 23 | headers = { 24 | 'Accept': 'application/json, text/plain, */*', 25 | 'Accept-Language': 'zh,en;q=0.9,zh-CN;q=0.8', 26 | 'Cache-Control': 'no-cache', 27 | 'Connection': 'keep-alive', 28 | # 'Cookie': 'Hm_lvt_b1b4b9ea61b6f1627192160766a9c55c=1699870954,1699924732; Hm_lpvt_b1b4b9ea61b6f1627192160766a9c55c=1699924732', 29 | 'Pragma': 'no-cache', 30 | 'Referer': 'https://jzsc.mohurd.gov.cn/data/company', 31 | 'Sec-Fetch-Dest': 'empty', 32 | 'Sec-Fetch-Mode': 'cors', 33 | 'Sec-Fetch-Site': 'same-origin', 34 | 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36', 35 | 'accessToken': 'jkFXxgu9TcpocIyCKmJ+tfpxe/45B9dbWMUXhdY7vLWJd6/53c2B2tyT2ZdEJenRhpUUKvcMtoMqfGfwdLCb8g==', 36 | 'sec-ch-ua': '"Google Chrome";v="119", "Chromium";v="119", "Not?A_Brand";v="24"', 37 | 'sec-ch-ua-mobile': '?0', 38 | 'sec-ch-ua-platform': '"macOS"', 39 | 'timeout': '30000', 40 | 'v': '231012', 41 | } 42 | 43 | params = { 44 | 'pg': '1', 45 | 'pgsz': '15', 46 | 'total': '450', 47 | } 48 | 49 | response = requests.get( 50 | 'https://jzsc.mohurd.gov.cn/APi/webApi/dataservice/query/comp/list', 51 | params=params, 52 | cookies=cookies, 53 | headers=headers, 54 | ) 55 | 56 | # print(decrypt_result(response.text)) 57 | for i in json.loads(decrypt_result(response.text))['data']['list']: 58 | print(i) 59 | 60 | 61 | if __name__ == '__main__': 62 | run() 63 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "SpliderCollection", 3 | "lockfileVersion": 3, 4 | "requires": true, 5 | "packages": { 6 | "": { 7 | "dependencies": { 8 | "crypto-js": "^4.2.0", 9 | "jsdom": "^22.1.0" 10 | } 11 | }, 12 | "node_modules/@tootallnate/once": { 13 | "version": "2.0.0", 14 | "resolved": "https://registry.npmmirror.com/@tootallnate/once/-/once-2.0.0.tgz", 15 | "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", 16 | "engines": { 17 | "node": ">= 10" 18 | } 19 | }, 20 | "node_modules/abab": { 21 | "version": "2.0.6", 22 | "resolved": "https://registry.npmmirror.com/abab/-/abab-2.0.6.tgz", 23 | "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==" 24 | }, 25 | "node_modules/agent-base": { 26 | "version": "6.0.2", 27 | "resolved": "https://registry.npmmirror.com/agent-base/-/agent-base-6.0.2.tgz", 28 | "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", 29 | "dependencies": { 30 | "debug": "4" 31 | }, 32 | "engines": { 33 | "node": ">= 6.0.0" 34 | } 35 | }, 36 | "node_modules/asynckit": { 37 | "version": "0.4.0", 38 | "resolved": "https://registry.npmmirror.com/asynckit/-/asynckit-0.4.0.tgz", 39 | "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" 40 | }, 41 | "node_modules/combined-stream": { 42 | "version": "1.0.8", 43 | "resolved": "https://registry.npmmirror.com/combined-stream/-/combined-stream-1.0.8.tgz", 44 | "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", 45 | "dependencies": { 46 | "delayed-stream": "~1.0.0" 47 | }, 48 | "engines": { 49 | "node": ">= 0.8" 50 | } 51 | }, 52 | "node_modules/crypto-js": { 53 | "version": "4.2.0", 54 | "resolved": "https://registry.npmmirror.com/crypto-js/-/crypto-js-4.2.0.tgz", 55 | "integrity": "sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==" 56 | }, 57 | "node_modules/cssstyle": { 58 | "version": "3.0.0", 59 | "resolved": "https://registry.npmmirror.com/cssstyle/-/cssstyle-3.0.0.tgz", 60 | "integrity": "sha512-N4u2ABATi3Qplzf0hWbVCdjenim8F3ojEXpBDF5hBpjzW182MjNGLqfmQ0SkSPeQ+V86ZXgeH8aXj6kayd4jgg==", 61 | "dependencies": { 62 | "rrweb-cssom": "^0.6.0" 63 | }, 64 | "engines": { 65 | "node": ">=14" 66 | } 67 | }, 68 | "node_modules/data-urls": { 69 | "version": "4.0.0", 70 | "resolved": "https://registry.npmmirror.com/data-urls/-/data-urls-4.0.0.tgz", 71 | "integrity": "sha512-/mMTei/JXPqvFqQtfyTowxmJVwr2PVAeCcDxyFf6LhoOu/09TX2OX3kb2wzi4DMXcfj4OItwDOnhl5oziPnT6g==", 72 | "dependencies": { 73 | "abab": "^2.0.6", 74 | "whatwg-mimetype": "^3.0.0", 75 | "whatwg-url": "^12.0.0" 76 | }, 77 | "engines": { 78 | "node": ">=14" 79 | } 80 | }, 81 | "node_modules/debug": { 82 | "version": "4.3.4", 83 | "resolved": "https://registry.npmmirror.com/debug/-/debug-4.3.4.tgz", 84 | "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", 85 | "dependencies": { 86 | "ms": "2.1.2" 87 | }, 88 | "engines": { 89 | "node": ">=6.0" 90 | }, 91 | "peerDependenciesMeta": { 92 | "supports-color": { 93 | "optional": true 94 | } 95 | } 96 | }, 97 | "node_modules/decimal.js": { 98 | "version": "10.4.3", 99 | "resolved": "https://registry.npmmirror.com/decimal.js/-/decimal.js-10.4.3.tgz", 100 | "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==" 101 | }, 102 | "node_modules/delayed-stream": { 103 | "version": "1.0.0", 104 | "resolved": "https://registry.npmmirror.com/delayed-stream/-/delayed-stream-1.0.0.tgz", 105 | "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", 106 | "engines": { 107 | "node": ">=0.4.0" 108 | } 109 | }, 110 | "node_modules/domexception": { 111 | "version": "4.0.0", 112 | "resolved": "https://registry.npmmirror.com/domexception/-/domexception-4.0.0.tgz", 113 | "integrity": "sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==", 114 | "dependencies": { 115 | "webidl-conversions": "^7.0.0" 116 | }, 117 | "engines": { 118 | "node": ">=12" 119 | } 120 | }, 121 | "node_modules/entities": { 122 | "version": "4.5.0", 123 | "resolved": "https://registry.npmmirror.com/entities/-/entities-4.5.0.tgz", 124 | "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", 125 | "engines": { 126 | "node": ">=0.12" 127 | } 128 | }, 129 | "node_modules/form-data": { 130 | "version": "4.0.0", 131 | "resolved": "https://registry.npmmirror.com/form-data/-/form-data-4.0.0.tgz", 132 | "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", 133 | "dependencies": { 134 | "asynckit": "^0.4.0", 135 | "combined-stream": "^1.0.8", 136 | "mime-types": "^2.1.12" 137 | }, 138 | "engines": { 139 | "node": ">= 6" 140 | } 141 | }, 142 | "node_modules/html-encoding-sniffer": { 143 | "version": "3.0.0", 144 | "resolved": "https://registry.npmmirror.com/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", 145 | "integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==", 146 | "dependencies": { 147 | "whatwg-encoding": "^2.0.0" 148 | }, 149 | "engines": { 150 | "node": ">=12" 151 | } 152 | }, 153 | "node_modules/http-proxy-agent": { 154 | "version": "5.0.0", 155 | "resolved": "https://registry.npmmirror.com/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", 156 | "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", 157 | "dependencies": { 158 | "@tootallnate/once": "2", 159 | "agent-base": "6", 160 | "debug": "4" 161 | }, 162 | "engines": { 163 | "node": ">= 6" 164 | } 165 | }, 166 | "node_modules/https-proxy-agent": { 167 | "version": "5.0.1", 168 | "resolved": "https://registry.npmmirror.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", 169 | "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", 170 | "dependencies": { 171 | "agent-base": "6", 172 | "debug": "4" 173 | }, 174 | "engines": { 175 | "node": ">= 6" 176 | } 177 | }, 178 | "node_modules/iconv-lite": { 179 | "version": "0.6.3", 180 | "resolved": "https://registry.npmmirror.com/iconv-lite/-/iconv-lite-0.6.3.tgz", 181 | "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", 182 | "dependencies": { 183 | "safer-buffer": ">= 2.1.2 < 3.0.0" 184 | }, 185 | "engines": { 186 | "node": ">=0.10.0" 187 | } 188 | }, 189 | "node_modules/is-potential-custom-element-name": { 190 | "version": "1.0.1", 191 | "resolved": "https://registry.npmmirror.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", 192 | "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==" 193 | }, 194 | "node_modules/jsdom": { 195 | "version": "22.1.0", 196 | "resolved": "https://registry.npmmirror.com/jsdom/-/jsdom-22.1.0.tgz", 197 | "integrity": "sha512-/9AVW7xNbsBv6GfWho4TTNjEo9fe6Zhf9O7s0Fhhr3u+awPwAJMKwAMXnkk5vBxflqLW9hTHX/0cs+P3gW+cQw==", 198 | "dependencies": { 199 | "abab": "^2.0.6", 200 | "cssstyle": "^3.0.0", 201 | "data-urls": "^4.0.0", 202 | "decimal.js": "^10.4.3", 203 | "domexception": "^4.0.0", 204 | "form-data": "^4.0.0", 205 | "html-encoding-sniffer": "^3.0.0", 206 | "http-proxy-agent": "^5.0.0", 207 | "https-proxy-agent": "^5.0.1", 208 | "is-potential-custom-element-name": "^1.0.1", 209 | "nwsapi": "^2.2.4", 210 | "parse5": "^7.1.2", 211 | "rrweb-cssom": "^0.6.0", 212 | "saxes": "^6.0.0", 213 | "symbol-tree": "^3.2.4", 214 | "tough-cookie": "^4.1.2", 215 | "w3c-xmlserializer": "^4.0.0", 216 | "webidl-conversions": "^7.0.0", 217 | "whatwg-encoding": "^2.0.0", 218 | "whatwg-mimetype": "^3.0.0", 219 | "whatwg-url": "^12.0.1", 220 | "ws": "^8.13.0", 221 | "xml-name-validator": "^4.0.0" 222 | }, 223 | "engines": { 224 | "node": ">=16" 225 | }, 226 | "peerDependencies": { 227 | "canvas": "^2.5.0" 228 | }, 229 | "peerDependenciesMeta": { 230 | "canvas": { 231 | "optional": true 232 | } 233 | } 234 | }, 235 | "node_modules/mime-db": { 236 | "version": "1.52.0", 237 | "resolved": "https://registry.npmmirror.com/mime-db/-/mime-db-1.52.0.tgz", 238 | "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", 239 | "engines": { 240 | "node": ">= 0.6" 241 | } 242 | }, 243 | "node_modules/mime-types": { 244 | "version": "2.1.35", 245 | "resolved": "https://registry.npmmirror.com/mime-types/-/mime-types-2.1.35.tgz", 246 | "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", 247 | "dependencies": { 248 | "mime-db": "1.52.0" 249 | }, 250 | "engines": { 251 | "node": ">= 0.6" 252 | } 253 | }, 254 | "node_modules/ms": { 255 | "version": "2.1.2", 256 | "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.2.tgz", 257 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" 258 | }, 259 | "node_modules/nwsapi": { 260 | "version": "2.2.7", 261 | "resolved": "https://registry.npmmirror.com/nwsapi/-/nwsapi-2.2.7.tgz", 262 | "integrity": "sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==" 263 | }, 264 | "node_modules/parse5": { 265 | "version": "7.1.2", 266 | "resolved": "https://registry.npmmirror.com/parse5/-/parse5-7.1.2.tgz", 267 | "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", 268 | "dependencies": { 269 | "entities": "^4.4.0" 270 | } 271 | }, 272 | "node_modules/psl": { 273 | "version": "1.9.0", 274 | "resolved": "https://registry.npmmirror.com/psl/-/psl-1.9.0.tgz", 275 | "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==" 276 | }, 277 | "node_modules/punycode": { 278 | "version": "2.3.1", 279 | "resolved": "https://registry.npmmirror.com/punycode/-/punycode-2.3.1.tgz", 280 | "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", 281 | "engines": { 282 | "node": ">=6" 283 | } 284 | }, 285 | "node_modules/querystringify": { 286 | "version": "2.2.0", 287 | "resolved": "https://registry.npmmirror.com/querystringify/-/querystringify-2.2.0.tgz", 288 | "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" 289 | }, 290 | "node_modules/requires-port": { 291 | "version": "1.0.0", 292 | "resolved": "https://registry.npmmirror.com/requires-port/-/requires-port-1.0.0.tgz", 293 | "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" 294 | }, 295 | "node_modules/rrweb-cssom": { 296 | "version": "0.6.0", 297 | "resolved": "https://registry.npmmirror.com/rrweb-cssom/-/rrweb-cssom-0.6.0.tgz", 298 | "integrity": "sha512-APM0Gt1KoXBz0iIkkdB/kfvGOwC4UuJFeG/c+yV7wSc7q96cG/kJ0HiYCnzivD9SB53cLV1MlHFNfOuPaadYSw==" 299 | }, 300 | "node_modules/safer-buffer": { 301 | "version": "2.1.2", 302 | "resolved": "https://registry.npmmirror.com/safer-buffer/-/safer-buffer-2.1.2.tgz", 303 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" 304 | }, 305 | "node_modules/saxes": { 306 | "version": "6.0.0", 307 | "resolved": "https://registry.npmmirror.com/saxes/-/saxes-6.0.0.tgz", 308 | "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==", 309 | "dependencies": { 310 | "xmlchars": "^2.2.0" 311 | }, 312 | "engines": { 313 | "node": ">=v12.22.7" 314 | } 315 | }, 316 | "node_modules/symbol-tree": { 317 | "version": "3.2.4", 318 | "resolved": "https://registry.npmmirror.com/symbol-tree/-/symbol-tree-3.2.4.tgz", 319 | "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==" 320 | }, 321 | "node_modules/tough-cookie": { 322 | "version": "4.1.3", 323 | "resolved": "https://registry.npmmirror.com/tough-cookie/-/tough-cookie-4.1.3.tgz", 324 | "integrity": "sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==", 325 | "dependencies": { 326 | "psl": "^1.1.33", 327 | "punycode": "^2.1.1", 328 | "universalify": "^0.2.0", 329 | "url-parse": "^1.5.3" 330 | }, 331 | "engines": { 332 | "node": ">=6" 333 | } 334 | }, 335 | "node_modules/tr46": { 336 | "version": "4.1.1", 337 | "resolved": "https://registry.npmmirror.com/tr46/-/tr46-4.1.1.tgz", 338 | "integrity": "sha512-2lv/66T7e5yNyhAAC4NaKe5nVavzuGJQVVtRYLyQ2OI8tsJ61PMLlelehb0wi2Hx6+hT/OJUWZcw8MjlSRnxvw==", 339 | "dependencies": { 340 | "punycode": "^2.3.0" 341 | }, 342 | "engines": { 343 | "node": ">=14" 344 | } 345 | }, 346 | "node_modules/universalify": { 347 | "version": "0.2.0", 348 | "resolved": "https://registry.npmmirror.com/universalify/-/universalify-0.2.0.tgz", 349 | "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", 350 | "engines": { 351 | "node": ">= 4.0.0" 352 | } 353 | }, 354 | "node_modules/url-parse": { 355 | "version": "1.5.10", 356 | "resolved": "https://registry.npmmirror.com/url-parse/-/url-parse-1.5.10.tgz", 357 | "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", 358 | "dependencies": { 359 | "querystringify": "^2.1.1", 360 | "requires-port": "^1.0.0" 361 | } 362 | }, 363 | "node_modules/w3c-xmlserializer": { 364 | "version": "4.0.0", 365 | "resolved": "https://registry.npmmirror.com/w3c-xmlserializer/-/w3c-xmlserializer-4.0.0.tgz", 366 | "integrity": "sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==", 367 | "dependencies": { 368 | "xml-name-validator": "^4.0.0" 369 | }, 370 | "engines": { 371 | "node": ">=14" 372 | } 373 | }, 374 | "node_modules/webidl-conversions": { 375 | "version": "7.0.0", 376 | "resolved": "https://registry.npmmirror.com/webidl-conversions/-/webidl-conversions-7.0.0.tgz", 377 | "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", 378 | "engines": { 379 | "node": ">=12" 380 | } 381 | }, 382 | "node_modules/whatwg-encoding": { 383 | "version": "2.0.0", 384 | "resolved": "https://registry.npmmirror.com/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz", 385 | "integrity": "sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==", 386 | "dependencies": { 387 | "iconv-lite": "0.6.3" 388 | }, 389 | "engines": { 390 | "node": ">=12" 391 | } 392 | }, 393 | "node_modules/whatwg-mimetype": { 394 | "version": "3.0.0", 395 | "resolved": "https://registry.npmmirror.com/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz", 396 | "integrity": "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==", 397 | "engines": { 398 | "node": ">=12" 399 | } 400 | }, 401 | "node_modules/whatwg-url": { 402 | "version": "12.0.1", 403 | "resolved": "https://registry.npmmirror.com/whatwg-url/-/whatwg-url-12.0.1.tgz", 404 | "integrity": "sha512-Ed/LrqB8EPlGxjS+TrsXcpUond1mhccS3pchLhzSgPCnTimUCKj3IZE75pAs5m6heB2U2TMerKFUXheyHY+VDQ==", 405 | "dependencies": { 406 | "tr46": "^4.1.1", 407 | "webidl-conversions": "^7.0.0" 408 | }, 409 | "engines": { 410 | "node": ">=14" 411 | } 412 | }, 413 | "node_modules/ws": { 414 | "version": "8.14.2", 415 | "resolved": "https://registry.npmmirror.com/ws/-/ws-8.14.2.tgz", 416 | "integrity": "sha512-wEBG1ftX4jcglPxgFCMJmZ2PLtSbJ2Peg6TmpJFTbe9GZYOQCDPdMYu/Tm0/bGZkw8paZnJY45J4K2PZrLYq8g==", 417 | "engines": { 418 | "node": ">=10.0.0" 419 | }, 420 | "peerDependencies": { 421 | "bufferutil": "^4.0.1", 422 | "utf-8-validate": ">=5.0.2" 423 | }, 424 | "peerDependenciesMeta": { 425 | "bufferutil": { 426 | "optional": true 427 | }, 428 | "utf-8-validate": { 429 | "optional": true 430 | } 431 | } 432 | }, 433 | "node_modules/xml-name-validator": { 434 | "version": "4.0.0", 435 | "resolved": "https://registry.npmmirror.com/xml-name-validator/-/xml-name-validator-4.0.0.tgz", 436 | "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==", 437 | "engines": { 438 | "node": ">=12" 439 | } 440 | }, 441 | "node_modules/xmlchars": { 442 | "version": "2.2.0", 443 | "resolved": "https://registry.npmmirror.com/xmlchars/-/xmlchars-2.2.0.tgz", 444 | "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==" 445 | } 446 | } 447 | } 448 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "dependencies": { 3 | "crypto-js": "^4.2.0", 4 | "jsdom": "^22.1.0" 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /qimai/jscode.js: -------------------------------------------------------------------------------- 1 | const jsdom = require('jsdom'); 2 | const {JSDOM} = jsdom; 3 | const dom = new JSDOM(``); 4 | window = dom.window 5 | z = window 6 | d = 'xyz517cda96efgh' 7 | 8 | function v(t) { 9 | t = z["encodeURIComponent"](t)['replace'](/%([0-9A-F]{2})/g, function (n, t) { 10 | return o('0x' + t) 11 | }); 12 | try { 13 | return z['btoa'](t) 14 | } catch (n) { 15 | return z['Buffer']['from'](t)['toString']('base64') 16 | } 17 | } 18 | 19 | function o(n) { 20 | // t = "", 21 | // [f2, s2, d2, m2, l2, v2, p2, s2, l2, d2, h2, y2][M](function (n) { 22 | // t += z[g2](w2 + n) 23 | // }); 24 | // var t, e = t; 25 | return String.fromCharCode(n) 26 | } 27 | 28 | function h(n, t) { 29 | H = 0 30 | // t = t || u(); 31 | for (var e = (n = n.split('')).length, r = t.length, a = "charCodeAt", i = H; i < e; i++) n[i] = o(n[i][a](H) ^ t[(i + 10) % r][a](H)); 32 | return n.join('') 33 | } 34 | 35 | 36 | function getAnalysis(params, url_path) { 37 | var e, r = new Date() - (112050 || 0) - 1661224081041, a = []; 38 | Object.keys(params).forEach(function (n) { 39 | a.push(params[n]) 40 | }) 41 | a = a.sort().join('') 42 | a = v(a) 43 | a = (a += "@#" + url_path) + ("@#" + r) + ("@#" + 3) 44 | e = v(h(a, d)) 45 | return e 46 | } 47 | 48 | params = { 49 | brand: "all", 50 | device: "iphone", 51 | country: "cn", 52 | genre: "6014", 53 | date: "2023-11-15", 54 | page: 2 55 | } 56 | url_path = '/rank/indexPlus/brand_id/1' 57 | console.log(getAnalysis(params, url_path)) -------------------------------------------------------------------------------- /qimai/rub.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | # @File : rub.py 4 | import execjs 5 | import requests 6 | 7 | 8 | def get_analysis(params, url_path): 9 | """ 10 | 获取 analysis 11 | :param params: {"brand": "all", 12 | "device": "iphone", 13 | "country": "cn", 14 | "genre": "6014", 15 | "date": "2023-11-15", 16 | "page": "2", 17 | } 18 | :param url_path: 19 | :return: 20 | """ 21 | with open("./jscode.js") as f: 22 | js_code = f.read() 23 | cxt = execjs.compile(js_code) 24 | analysis = cxt.call( 25 | "getAnalysis", params, url_path.replace("https://api.qimai.cn", "") 26 | ) 27 | return analysis 28 | 29 | 30 | def run(): 31 | headers = { 32 | "authority": "api.qimai.cn", 33 | "accept": "application/json, text/plain, */*", 34 | "accept-language": "zh,en;q=0.9,zh-CN;q=0.8", 35 | # 'cookie': 'qm_check=A1sdRUIQChtxen8pI0dAPxYVUltXHBlmQVQOBwlISVdJGwcSGGpHXV4RNQ8JHBwIFXNXRlBTURhNNRIKAhwIWh4SGAlIBAhVViRYPDxTHBsSY05ZUkw2DgYMHQtaUUVbRlxCHRpJRAQAHRoRFw0QABUAGAhJVktYWgQ%3D; gr_user_id=ea54bc28-26df-4b0e-b185-8536a26846c7; PHPSESSID=62nhh3s2u0ttvir7t6ngr21nqj; synct=1700028214.165; syncd=-584; tgw_l7_route=29ef178f2e0a875a4327cbfe5fbcff7e; ada35577182650f1_gr_session_id=6ff9d12d-909a-4023-a6f9-c888e8a23aab; ada35577182650f1_gr_session_id_sent_vst=6ff9d12d-909a-4023-a6f9-c888e8a23aab', 36 | "origin": "https://www.qimai.cn", 37 | "sec-ch-ua": '"Google Chrome";v="119", "Chromium";v="119", "Not?A_Brand";v="24"', 38 | "sec-ch-ua-mobile": "?0", 39 | "sec-ch-ua-platform": '"macOS"', 40 | "sec-fetch-dest": "empty", 41 | "sec-fetch-mode": "cors", 42 | "sec-fetch-site": "same-site", 43 | "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36", 44 | } 45 | 46 | params = { 47 | "brand": "all", 48 | "device": "iphone", 49 | "country": "cn", 50 | "genre": "6014", 51 | "date": "2023-11-15", 52 | "page": "2", 53 | } 54 | url = "https://api.qimai.cn/rank/indexPlus/brand_id/1" 55 | analysis = get_analysis(params, url) 56 | print(analysis) 57 | params["analysis"] = analysis 58 | response = requests.get( 59 | url, 60 | params=params, 61 | headers=headers, 62 | ) 63 | for i in response.json()["list"]: 64 | print(i) 65 | 66 | 67 | if __name__ == "__main__": 68 | run() 69 | -------------------------------------------------------------------------------- /readme.md: -------------------------------------------------------------------------------- 1 | ## 开发工具 2 | 3 | #### 1、 curl to requests https://curlconverter.com/ 4 | 5 | #### 2、Chrome浏览器 https://www.google.com/chrome/ 6 | 7 | ## 项目说明 8 | 9 | > 爬虫逆向和示例 10 | 11 | ## 一、常见逆向类型 12 | 13 | ### 1、阿里系 awc_sc__v2 项目示例 14 | 15 | > 清除cookie,重新加载,找到设置的相关代码 16 | 17 | ### 2、请求体加密 18 | 19 | > 使用xhr监听打断点,找到请求拦截器对应的加密代码 20 | 21 | ### 3、请求头签名认证 22 | 23 | > 头部参数加密,需要模拟加密,加密参数一般是最开始的某段js代码进行加密的内容 24 | > 1. 搜索关键字 decrypt encrypt JSON.parse 搜索自带的关键字 25 | > 2. 搜索路径 26 | > 3. 跟栈 27 | > 28 | > --> 注意栈和栈之间是否从明文变为密文 29 | > 30 | > --> 异步栈,看到Promise,去找回调方法 31 | 32 | ### 4、请求体和响应数据都有加密 33 | 34 | ``` 35 | # 一般需要算法包,使用 36 | npm install crypto-js 37 | # 引用 38 | const CryotoJs = require('crypto-js') 39 | ``` 40 | 41 | > 1. 确定请求地址的栈中是否存在混淆JS 42 | > 2. 搜索decrypt(判断网站是否为算法加密 一般为实例对象》实例方法 比如 a(实例对象).搜索decrypt 43 | > 3. 搜索路径+json.parse( 注意:不是内置的方法函数的界面方法或者函数 44 | > 4. 跟栈response对象的拦截器对象 45 | 46 | ### 二、排坑记录 47 | 48 | #### 1. 逆向AES解密时,就近找到了秘钥,但是本地运行失败,可以通过debug反向输出秘钥 49 | 50 | ```js 51 | // 输出words 52 | k = CryptoJS.enc.Utf8.parse("Dt8j9wGw%6HbxfFn") 53 | // 反向解析为字符串 54 | k.toString(CryptoJS.enc.Utf8) 55 | 56 | ``` 57 | 58 | ### 三、 python调用js的方法 59 | 60 | > 推荐使用PyExecJS2+nodejs环境 61 | 62 | ```shell 63 | # 安装 https://pypi.org/project/PyExecJS2/ 64 | pip install PyExecJS2 65 | ``` 66 | 67 | ### 四、自动化插件的使用 68 | #### 1、 playwright 69 | - 参考文档 https://playwright.dev/python/docs/intro#installing-playwright 70 | ```shell 71 | # install playwright 72 | pip install pytest-playwright 73 | # Install the required browsers: 74 | playwright install 75 | ``` 76 | 77 | ## 网站汇总 78 | 79 | | 网站 | url | 项目位置 | 分类 | 逆向说明 | 80 | |:---------------|:-------------------------------------------------------------------------------------------------------|:----------------------------|--------------------|:---------------------------------------------------------------------------------------------| 81 | | 采招网 | [链接](https://search.bidcenter.com.cn/) | [bidcenter](./bidcenter) | 响应数据加密 | 响应数据加密,使用标准的AES加密,依赖crypto-js | 82 | | 申万宏源证券 | [链接](https://www.swhysc.com/swhysc/financial/marginTradingList?channel=00010017000300020001&listId=2 ) | [swhysc](./swhysc) | 响应数据加密 | 响应数据加密,加密版AES ,依赖crypto-js | 83 | | 行行查 | [链接](https://www.hanghangcha.com/) | [hanghancha](./hanghangcha) | 响应数据加密 | 响应数据加密,使用标准的AES加密,依赖crypto-js | 84 | | 烯牛数据 | [链接]( https://www.xiniudata.com/industry/newest?from=data) | [xiniudata](./xiniudata) | 需要登录,请求体加密,响应数据加密 | 请求体和响应数据都有加密,通过搜索关键词来找出加密的代码 ,依赖crypto-js | 85 | | 网易云 | [链接](https://music.163.com/) | [wangyiyun](./wangyiyun) | 请求体加密 | 请求体进行了加密,通过xhr监听获取加密的地方,依赖crypto-js | 86 | | 巨潮资讯数据中心 | [链接](https://webapi.cninfo.com.cn/#/marketDataDate) | [cninfo](./cninfo) | 请求头加密 | 请求头进行了验证Accept-EncKey,使用了加密的AES,依赖crypto-js | 87 | | 产业政策大数据平台 | [链接](http://www.spolicy.com/) | [spolicy](./spolicy) | 请求体加密 | 请求体加密,使用xhr监听打断点,找到请求拦截器对应的加密代码 | 88 | | 雪球 | [链接]( https://xueqiu.com/) | [xueqiu](./xueqiu) | cookie验证 | cookie验证,阿里系awc_sc__v2,清除cookie,重新加载,找到设置的相关代码 | 89 | | 极简壁纸 | [链接]( https://bz.zzzmh.cn/index) | [zzzmh](./zzzmh) | 响应数据加密 | 响应数据加密,通过xhr断点,找到响应数据解密的地方,解密依赖window环境,使用jsdom来模拟,要下载图片需要搜索关键词down-span 找到设置下载地址的js | 90 | | 艺恩 | [链接](https://www.endata.com.cn/BoxOffice/BO/Year/index.html) | [endata](./endata) | 响应数据加密 | 响应数据加密,通过xhr断点或者JSON.parse+路径搜索找到加密位置 | 91 | | 全国建筑市场监管公共服务平台 | [链接](https://jzsc.mohurd.gov.cn/data/project) | [mohurd](./mohurd) | 响应加密 | 关键词搜索JSON.parse + 路径搜索确定加密地址,比较坑的是秘钥地址变更了, 通过**f.toString(d.a.enc.Utf8)找到新的秘钥** ,依赖crypto-js | 92 | | 1688找工厂 | [链接](https://sale.1688.com/factory/home.html) | [1688](./1688) | 请求cookie和请求体sign签名 | 请求体签名和cookie认证 |通过搜索关键词sign: 和请求路径找到对应的js 93 | | 七麦数据 | [链接](https://www.qimai.cn/) | [qimai](./qimai) | 请求体加验证 | 搜索关键字找不到,通过xhr断点,往下debug,找到加密数据 | 94 | | 娱乐指数 | [链接](https://www.chinaindex.net/) | [chinaindex](./chinaindex) | 响应数据加密 | 请求头sign是固定的,响应结果是通过混淆的aes加密的, 依赖crypto-js | 95 | | 全国招标公告公示搜索引擎 | [链接](https://ctbpsp.com/#/) | [ctbpsp](./ctbpsp) | 请求头和响应加密 | 搜索时会构建十几个请求,且每次请求参数oArpptFq都会动态生成,且是在vm中生成,vm中的代码是混淆的,且调用函数经过了转码,可以把数据全部获取,本地实现搜索,使用了DES加解密 | 96 | | 猎聘 | [链接](https://www.liepin.com/) | [liepin](./liepin) | 请求头验证 | 需要生成随机的 Uint8Array | -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | certifi==2023.7.22 2 | charset-normalizer==3.3.2 3 | exceptiongroup==1.2.0 4 | greenlet==3.0.1 5 | idna==3.4 6 | iniconfig==2.0.0 7 | packaging==23.2 8 | playwright==1.40.0 9 | pluggy==1.3.0 10 | pycryptodome==3.19.0 11 | pyee==11.0.1 12 | PyExecJS2==1.6.1 13 | pytest==7.4.3 14 | pytest-base-url==2.0.0 15 | pytest-playwright==0.4.3 16 | python-slugify==8.0.1 17 | requests==2.31.0 18 | six==1.16.0 19 | text-unidecode==1.3 20 | tomli==2.0.1 21 | typing_extensions==4.8.0 22 | urllib3==2.0.7 23 | -------------------------------------------------------------------------------- /spolicy/run.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | # @File : run.py 4 | import requests 5 | import execjs 6 | 7 | 8 | def get_request_body(data): 9 | with open('./jscode.js', 'r', encoding='utf-8') as f: 10 | js_code = f.read() 11 | res = execjs.compile(js_code).call('getRequestData', data) 12 | return bytes(res['data']) 13 | 14 | 15 | def run(): 16 | cookies = { 17 | 'JSESSIONID': '7E286A008B6A52DF0C0239409123FFA2', 18 | 'Hm_lvt_6146f11e5afab71309b3accbfc4a932e': '1699435609', 19 | 'Hm_lpvt_6146f11e5afab71309b3accbfc4a932e': '1699504996', 20 | } 21 | 22 | headers = { 23 | 'Accept': 'application/json, text/plain, */*', 24 | 'Accept-Language': 'zh,en;q=0.9,zh-CN;q=0.8', 25 | 'Content-Type': 'application/octet-stream', 26 | 'Origin': 'http://www.spolicy.com', 27 | 'Proxy-Connection': 'keep-alive', 28 | 'Referer': 'http://www.spolicy.com/', 29 | 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36', 30 | } 31 | 32 | data = { 33 | "policyType": "6", 34 | "province": "", 35 | "city": "", 36 | "downtown": "", 37 | "garden": "", 38 | "centralId": "", 39 | "sort": 0, 40 | "homePageFlag": 1, 41 | "pageNum": 1, 42 | "pageSize": 7 43 | } 44 | data = get_request_body(data) 45 | url = 'http://www.spolicy.com/info_api/policyType/showPolicyType' 46 | response = requests.post(url, cookies=cookies, 47 | headers=headers, data=data, verify=False) 48 | print(response.json()) 49 | 50 | 51 | if __name__ == '__main__': 52 | run() 53 | -------------------------------------------------------------------------------- /swhysc/jscode.js: -------------------------------------------------------------------------------- 1 | const CryptoJs = require('crypto-js') 2 | 3 | var Decrypt = function (t) { 4 | var n = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : "" 5 | , r = 'rewin-swhysc1234' 6 | , i = CryptoJs.enc.Utf8.parse(r) 7 | , o = CryptoJs.AES.decrypt(t, i, { 8 | mode: CryptoJs.mode.ECB, 9 | padding: CryptoJs.pad.Pkcs7 10 | }); 11 | return CryptoJs.enc.Utf8.stringify(o).toString() 12 | } 13 | 14 | var data = 'K0FWJlJJ7hojwG3yOTA/NshaO9jUNRiTzZsxTWdFMAY/ZG/OkUckgKlcCVSiPWYBBnHW851tLCpZEOiC9TqUNaZ+s/MvAptvHr3rpl2XkvTXBpZtSpQ0eCQ0fOad9qoPFil9zDtpQoYmVP+DSEhuWbHvwnw9L0buqngWLc1GN9NB7LEew0NaU/5WwmLYEgn+9JCbXfWDtN0FDqy2MYfE7QtLLudX0rCO8whlyDc0/aJ89fdOHIfKhzmbCXo1Abdw1waWbUqUNHgkNHzmnfaqDxYpfcw7aUKGJlT/g0hIblmx78J8PS9G7qp4Fi3NRjfTQeyxHsNDWlP+VsJi2BIJ/n5qJpt9dgGT0c/zhXPuVEnMVJ9n77aVq4b5ceEM/mSDul0zdQd3w+RILJEbgxdWbtcGlm1KlDR4JDR85p32qg8WKX3MO2lChiZU/4NISG5Zse/CfD0vRu6qeBYtzUY300HssR7DQ1pT/lbCYtgSCf6vriChSD0Qqozla7KDErKHMeODhYtN6SL2Z+k+oJkLrMFZpDw2pqO4CmUJNg/NheHXBpZtSpQ0eCQ0fOad9qoPFil9zDtpQoYmVP+DSEhuWbHvwnw9L0buqngWLc1GN9NB7LEew0NaU/5WwmLYEgn+fZxCJM2ESYehnNmLx3iv6Hh8RkxdCH8hhDYTbjX+Q4pVryW7ZpNvPoEUz08CRqEK0hutKEDkds775B+9MZJhyMXOiBqkZnddHw4kLKLpPtoHwblz5rsebrrkKn6u0fo1VIPhMeTlL66YKVuA2l2Yyy+bU97LjD1w4miFW0DMl9fl+epicjd6RSbxS6k35FpuVa8lu2aTbz6BFM9PAkahCtIbrShA5HbO++QfvTGSYcjFzogapGZ3XR8OJCyi6T7aB8G5c+a7Hm665Cp+rtH6NVSD4THk5S+umClbgNpdmMtwbt7FsC6pCeJbJxpEfIgTkIJfwYe0gDLm1Hk+uk/RElWvJbtmk28+gRTPTwJGoQrSG60oQOR2zvvkH70xkmHIxc6IGqRmd10fDiQsouk+2gfBuXPmux5uuuQqfq7R+jVUg+Ex5OUvrpgpW4DaXZjL4WXKMKycbOfEXMc0yH5HB1+OLDHn/eCnk1kOUQpo1BxVryW7ZpNvPoEUz08CRqEK0hutKEDkds775B+9MZJhyMXOiBqkZnddHw4kLKLpPtoHwblz5rsebrrkKn6u0fo1VIPhMeTlL66YKVuA2l2YyxRwU54fM09E0BVi1WtwYVXufTMUQDZC+45BBIM1Q9HaVa8lu2aTbz6BFM9PAkahCtIbrShA5HbO++QfvTGSYcjFzogapGZ3XR8OJCyi6T7aB8G5c+a7Hm665Cp+rtH6NVSD4THk5S+umClbgNpdmMtF0XWEOlZKDxj2/4leQEAXi9vSCPlsKxeNwOMoMhxd3FWvJbtmk28+gRTPTwJGoQrSG60oQOR2zvvkH70xkmHIxc6IGqRmd10fDiQsouk+2gfBuXPmux5uuuQqfq7R+jVUg+Ex5OUvrpgpW4DaXZjLeZ4o194qy/UOX1rLo1FckWbc3sR/XxJsyjReibJtF2d6EGxSyg3ltg9evV41m0FZHpd8MRmJe5gLPFKD8dswbnokS+81XgB7NpqddeFdI9WX5gkx5035KXrRSjqmmkjQw2wlUdV3L33Be6wjYrw5Vo7Chg09/OMM3yFqcdGuOT4=\n' 15 | console.log(Decrypt(data)) -------------------------------------------------------------------------------- /swhysc/run.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | # @File : run.py 4 | import base64 5 | 6 | import requests 7 | from Crypto.Cipher import AES 8 | from Crypto.Util.Padding import unpad 9 | 10 | 11 | def run(): 12 | cookies = { 13 | 'Hm_lvt_553ce4fa7b2bd3ea6d85c1fb6b901c6c': '1699518481', 14 | 'Hm_lpvt_553ce4fa7b2bd3ea6d85c1fb6b901c6c': '1699518481', 15 | 'sajssdk_2015_cross_new_user': '1', 16 | 'sensorsdata2015jssdkcross': '%7B%22distinct_id%22%3A%2218bb332025ad3d-03046cb892a59c2-16525634-1296000-18bb332025ba7b%22%2C%22first_id%22%3A%22%22%2C%22props%22%3A%7B%22%24latest_traffic_source_type%22%3A%22%E8%87%AA%E7%84%B6%E6%90%9C%E7%B4%A2%E6%B5%81%E9%87%8F%22%2C%22%24latest_search_keyword%22%3A%22%E6%9C%AA%E5%8F%96%E5%88%B0%E5%80%BC%22%2C%22%24latest_referrer%22%3A%22https%3A%2F%2Fwww.google.com%2F%22%7D%2C%22identities%22%3A%22eyIkaWRlbnRpdHlfY29va2llX2lkIjoiMThiYjMzMjAyNWFkM2QtMDMwNDZjYjg5MmE1OWMyLTE2NTI1NjM0LTEyOTYwMDAtMThiYjMzMjAyNWJhN2IifQ%3D%3D%22%2C%22history_login_id%22%3A%7B%22name%22%3A%22%22%2C%22value%22%3A%22%22%7D%2C%22%24device_id%22%3A%2218bb332025ad3d-03046cb892a59c2-16525634-1296000-18bb332025ba7b%22%7D', 17 | } 18 | 19 | headers = { 20 | 'Accept': 'application/json, text/plain, */*', 21 | 'Accept-Language': 'zh,en;q=0.9,zh-CN;q=0.8', 22 | 'Connection': 'keep-alive', 23 | # 'Cookie': 'Hm_lvt_553ce4fa7b2bd3ea6d85c1fb6b901c6c=1699518481; Hm_lpvt_553ce4fa7b2bd3ea6d85c1fb6b901c6c=1699518481; sajssdk_2015_cross_new_user=1; sensorsdata2015jssdkcross=%7B%22distinct_id%22%3A%2218bb332025ad3d-03046cb892a59c2-16525634-1296000-18bb332025ba7b%22%2C%22first_id%22%3A%22%22%2C%22props%22%3A%7B%22%24latest_traffic_source_type%22%3A%22%E8%87%AA%E7%84%B6%E6%90%9C%E7%B4%A2%E6%B5%81%E9%87%8F%22%2C%22%24latest_search_keyword%22%3A%22%E6%9C%AA%E5%8F%96%E5%88%B0%E5%80%BC%22%2C%22%24latest_referrer%22%3A%22https%3A%2F%2Fwww.google.com%2F%22%7D%2C%22identities%22%3A%22eyIkaWRlbnRpdHlfY29va2llX2lkIjoiMThiYjMzMjAyNWFkM2QtMDMwNDZjYjg5MmE1OWMyLTE2NTI1NjM0LTEyOTYwMDAtMThiYjMzMjAyNWJhN2IifQ%3D%3D%22%2C%22history_login_id%22%3A%7B%22name%22%3A%22%22%2C%22value%22%3A%22%22%7D%2C%22%24device_id%22%3A%2218bb332025ad3d-03046cb892a59c2-16525634-1296000-18bb332025ba7b%22%7D', 24 | 'Referer': 'https://www.swhysc.com/swhysc/financial/marginTradingList?channel=00010017000300020001&listId=2', 25 | 'Sec-Fetch-Dest': 'empty', 26 | 'Sec-Fetch-Mode': 'cors', 27 | 'Sec-Fetch-Site': 'same-origin', 28 | 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36', 29 | 'sec-ch-ua': '"Google Chrome";v="119", "Chromium";v="119", "Not?A_Brand";v="24"', 30 | 'sec-ch-ua-mobile': '?0', 31 | 'sec-ch-ua-platform': '"macOS"', 32 | } 33 | 34 | params = { 35 | 'secuCode': '', 36 | 'market': '', 37 | 'orderFlag': '', 38 | 'pageNum': '2', 39 | 'pageSize': '10', 40 | } 41 | 42 | response = requests.get( 43 | 'https://www.swhysc.com/swhyscywbl/service/dsinfo/v1/margin/deposit/ratio', 44 | params=params, 45 | cookies=cookies, 46 | headers=headers, 47 | ) 48 | print(decrypt(response.text)) 49 | 50 | 51 | def decrypt(t): 52 | """ 53 | aes 解密 54 | :param t: 55 | :return: 56 | """ 57 | r = 'rewin-swhysc1234' 58 | key = r.encode('utf-8') 59 | cipher = AES.new(key, AES.MODE_ECB) 60 | encrypted_data = base64.b64decode(t) 61 | decrypted_data = cipher.decrypt(encrypted_data) 62 | unpadded_data = unpad(decrypted_data, AES.block_size) 63 | return unpadded_data.decode('utf-8') 64 | 65 | 66 | if __name__ == '__main__': 67 | run() 68 | -------------------------------------------------------------------------------- /wangyiyun/jscode.js: -------------------------------------------------------------------------------- 1 | const CryptoJS = require('crypto-js') 2 | 3 | function RSAKeyPair(a, b, c) { 4 | this.e = biFromHex(a), 5 | this.d = biFromHex(b), 6 | this.m = biFromHex(c), 7 | this.chunkSize = 2 * biHighIndex(this.m), 8 | this.radix = 16, 9 | this.barrett = new BarrettMu(this.m) 10 | } 11 | 12 | function twoDigit(a) { 13 | return (10 > a ? "0" : "") + String(a) 14 | } 15 | 16 | function encryptedString(a, b) { 17 | for (var f, g, h, i, j, k, l, c = new Array, d = b.length, e = 0; d > e;) 18 | c[e] = b.charCodeAt(e), 19 | e++; 20 | for (; 0 != c.length % a.chunkSize;) 21 | c[e++] = 0; 22 | for (f = c.length, 23 | g = "", 24 | e = 0; f > e; e += a.chunkSize) { 25 | for (j = new BigInt, 26 | h = 0, 27 | i = e; i < e + a.chunkSize; ++h) 28 | j.digits[h] = c[i++], 29 | j.digits[h] += c[i++] << 8; 30 | k = a.barrett.powMod(j, a.e), 31 | l = 16 == a.radix ? biToHex(k) : biToString(k, a.radix), 32 | g += l + " " 33 | } 34 | return g.substring(0, g.length - 1) 35 | } 36 | 37 | function decryptedString(a, b) { 38 | var e, f, g, h, c = b.split(" "), d = ""; 39 | for (e = 0; e < c.length; ++e) 40 | for (h = 16 == a.radix ? biFromHex(c[e]) : biFromString(c[e], a.radix), 41 | g = a.barrett.powMod(h, a.d), 42 | f = 0; f <= biHighIndex(g); ++f) 43 | d += String.fromCharCode(255 & g.digits[f], g.digits[f] >> 8); 44 | return 0 == d.charCodeAt(d.length - 1) && (d = d.substring(0, d.length - 1)), 45 | d 46 | } 47 | 48 | function setMaxDigits(a) { 49 | maxDigits = a, 50 | ZERO_ARRAY = new Array(maxDigits); 51 | for (var b = 0; b < ZERO_ARRAY.length; b++) 52 | ZERO_ARRAY[b] = 0; 53 | bigZero = new BigInt, 54 | bigOne = new BigInt, 55 | bigOne.digits[0] = 1 56 | } 57 | 58 | function BigInt(a) { 59 | this.digits = "boolean" == typeof a && 1 == a ? null : ZERO_ARRAY.slice(0), 60 | this.isNeg = !1 61 | } 62 | 63 | function biFromDecimal(a) { 64 | for (var d, e, f, b = "-" == a.charAt(0), c = b ? 1 : 0; c < a.length && "0" == a.charAt(c);) 65 | ++c; 66 | if (c == a.length) 67 | d = new BigInt; 68 | else { 69 | for (e = a.length - c, 70 | f = e % dpl10, 71 | 0 == f && (f = dpl10), 72 | d = biFromNumber(Number(a.substr(c, f))), 73 | c += f; c < a.length;) 74 | d = biAdd(biMultiply(d, lr10), biFromNumber(Number(a.substr(c, dpl10)))), 75 | c += dpl10; 76 | d.isNeg = b 77 | } 78 | return d 79 | } 80 | 81 | function biCopy(a) { 82 | var b = new BigInt(!0); 83 | return b.digits = a.digits.slice(0), 84 | b.isNeg = a.isNeg, 85 | b 86 | } 87 | 88 | function biFromNumber(a) { 89 | var c, b = new BigInt; 90 | for (b.isNeg = 0 > a, 91 | a = Math.abs(a), 92 | c = 0; a > 0;) 93 | b.digits[c++] = a & maxDigitVal, 94 | a >>= biRadixBits; 95 | return b 96 | } 97 | 98 | function reverseStr(a) { 99 | var c, b = ""; 100 | for (c = a.length - 1; c > -1; --c) 101 | b += a.charAt(c); 102 | return b 103 | } 104 | 105 | function biToString(a, b) { 106 | var d, e, c = new BigInt; 107 | for (c.digits[0] = b, 108 | d = biDivideModulo(a, c), 109 | e = hexatrigesimalToChar[d[1].digits[0]]; 1 == biCompare(d[0], bigZero);) 110 | d = biDivideModulo(d[0], c), 111 | digit = d[1].digits[0], 112 | e += hexatrigesimalToChar[d[1].digits[0]]; 113 | return (a.isNeg ? "-" : "") + reverseStr(e) 114 | } 115 | 116 | function biToDecimal(a) { 117 | var c, d, b = new BigInt; 118 | for (b.digits[0] = 10, 119 | c = biDivideModulo(a, b), 120 | d = String(c[1].digits[0]); 1 == biCompare(c[0], bigZero);) 121 | c = biDivideModulo(c[0], b), 122 | d += String(c[1].digits[0]); 123 | return (a.isNeg ? "-" : "") + reverseStr(d) 124 | } 125 | 126 | function digitToHex(a) { 127 | var b = 15 128 | , c = ""; 129 | for (i = 0; 4 > i; ++i) 130 | c += hexToChar[a & b], 131 | a >>>= 4; 132 | return reverseStr(c) 133 | } 134 | 135 | function biToHex(a) { 136 | var d, b = ""; 137 | for (biHighIndex(a), 138 | d = biHighIndex(a); d > -1; --d) 139 | b += digitToHex(a.digits[d]); 140 | return b 141 | } 142 | 143 | function charToHex(a) { 144 | var h, b = 48, c = b + 9, d = 97, e = d + 25, f = 65, g = 90; 145 | return h = a >= b && c >= a ? a - b : a >= f && g >= a ? 10 + a - f : a >= d && e >= a ? 10 + a - d : 0 146 | } 147 | 148 | function hexToDigit(a) { 149 | var d, b = 0, c = Math.min(a.length, 4); 150 | for (d = 0; c > d; ++d) 151 | b <<= 4, 152 | b |= charToHex(a.charCodeAt(d)); 153 | return b 154 | } 155 | 156 | function biFromHex(a) { 157 | var d, e, b = new BigInt, c = a.length; 158 | for (d = c, 159 | e = 0; d > 0; d -= 4, 160 | ++e) 161 | b.digits[e] = hexToDigit(a.substr(Math.max(d - 4, 0), Math.min(d, 4))); 162 | return b 163 | } 164 | 165 | function biFromString(a, b) { 166 | var g, h, i, j, c = "-" == a.charAt(0), d = c ? 1 : 0, e = new BigInt, f = new BigInt; 167 | for (f.digits[0] = 1, 168 | g = a.length - 1; g >= d; g--) 169 | h = a.charCodeAt(g), 170 | i = charToHex(h), 171 | j = biMultiplyDigit(f, i), 172 | e = biAdd(e, j), 173 | f = biMultiplyDigit(f, b); 174 | return e.isNeg = c, 175 | e 176 | } 177 | 178 | function biDump(a) { 179 | return (a.isNeg ? "-" : "") + a.digits.join(" ") 180 | } 181 | 182 | function biAdd(a, b) { 183 | var c, d, e, f; 184 | if (a.isNeg != b.isNeg) 185 | b.isNeg = !b.isNeg, 186 | c = biSubtract(a, b), 187 | b.isNeg = !b.isNeg; 188 | else { 189 | for (c = new BigInt, 190 | d = 0, 191 | f = 0; f < a.digits.length; ++f) 192 | e = a.digits[f] + b.digits[f] + d, 193 | c.digits[f] = 65535 & e, 194 | d = Number(e >= biRadix); 195 | c.isNeg = a.isNeg 196 | } 197 | return c 198 | } 199 | 200 | function biSubtract(a, b) { 201 | var c, d, e, f; 202 | if (a.isNeg != b.isNeg) 203 | b.isNeg = !b.isNeg, 204 | c = biAdd(a, b), 205 | b.isNeg = !b.isNeg; 206 | else { 207 | for (c = new BigInt, 208 | e = 0, 209 | f = 0; f < a.digits.length; ++f) 210 | d = a.digits[f] - b.digits[f] + e, 211 | c.digits[f] = 65535 & d, 212 | c.digits[f] < 0 && (c.digits[f] += biRadix), 213 | e = 0 - Number(0 > d); 214 | if (-1 == e) { 215 | for (e = 0, 216 | f = 0; f < a.digits.length; ++f) 217 | d = 0 - c.digits[f] + e, 218 | c.digits[f] = 65535 & d, 219 | c.digits[f] < 0 && (c.digits[f] += biRadix), 220 | e = 0 - Number(0 > d); 221 | c.isNeg = !a.isNeg 222 | } else 223 | c.isNeg = a.isNeg 224 | } 225 | return c 226 | } 227 | 228 | function biHighIndex(a) { 229 | for (var b = a.digits.length - 1; b > 0 && 0 == a.digits[b];) 230 | --b; 231 | return b 232 | } 233 | 234 | function biNumBits(a) { 235 | var e, b = biHighIndex(a), c = a.digits[b], d = (b + 1) * bitsPerDigit; 236 | for (e = d; e > d - bitsPerDigit && 0 == (32768 & c); --e) 237 | c <<= 1; 238 | return e 239 | } 240 | 241 | function biMultiply(a, b) { 242 | var d, h, i, k, c = new BigInt, e = biHighIndex(a), f = biHighIndex(b); 243 | for (k = 0; f >= k; ++k) { 244 | for (d = 0, 245 | i = k, 246 | j = 0; e >= j; ++j, 247 | ++i) 248 | h = c.digits[i] + a.digits[j] * b.digits[k] + d, 249 | c.digits[i] = h & maxDigitVal, 250 | d = h >>> biRadixBits; 251 | c.digits[k + e + 1] = d 252 | } 253 | return c.isNeg = a.isNeg != b.isNeg, 254 | c 255 | } 256 | 257 | function biMultiplyDigit(a, b) { 258 | var c, d, e, f; 259 | for (result = new BigInt, 260 | c = biHighIndex(a), 261 | d = 0, 262 | f = 0; c >= f; ++f) 263 | e = result.digits[f] + a.digits[f] * b + d, 264 | result.digits[f] = e & maxDigitVal, 265 | d = e >>> biRadixBits; 266 | return result.digits[1 + c] = d, 267 | result 268 | } 269 | 270 | function arrayCopy(a, b, c, d, e) { 271 | var g, h, f = Math.min(b + e, a.length); 272 | for (g = b, 273 | h = d; f > g; ++g, 274 | ++h) 275 | c[h] = a[g] 276 | } 277 | 278 | function biShiftLeft(a, b) { 279 | var e, f, g, h, c = Math.floor(b / bitsPerDigit), d = new BigInt; 280 | for (arrayCopy(a.digits, 0, d.digits, c, d.digits.length - c), 281 | e = b % bitsPerDigit, 282 | f = bitsPerDigit - e, 283 | g = d.digits.length - 1, 284 | h = g - 1; g > 0; --g, 285 | --h) 286 | d.digits[g] = d.digits[g] << e & maxDigitVal | (d.digits[h] & highBitMasks[e]) >>> f; 287 | return d.digits[0] = d.digits[g] << e & maxDigitVal, 288 | d.isNeg = a.isNeg, 289 | d 290 | } 291 | 292 | function biShiftRight(a, b) { 293 | var e, f, g, h, c = Math.floor(b / bitsPerDigit), d = new BigInt; 294 | for (arrayCopy(a.digits, c, d.digits, 0, a.digits.length - c), 295 | e = b % bitsPerDigit, 296 | f = bitsPerDigit - e, 297 | g = 0, 298 | h = g + 1; g < d.digits.length - 1; ++g, 299 | ++h) 300 | d.digits[g] = d.digits[g] >>> e | (d.digits[h] & lowBitMasks[e]) << f; 301 | return d.digits[d.digits.length - 1] >>>= e, 302 | d.isNeg = a.isNeg, 303 | d 304 | } 305 | 306 | function biMultiplyByRadixPower(a, b) { 307 | var c = new BigInt; 308 | return arrayCopy(a.digits, 0, c.digits, b, c.digits.length - b), 309 | c 310 | } 311 | 312 | function biDivideByRadixPower(a, b) { 313 | var c = new BigInt; 314 | return arrayCopy(a.digits, b, c.digits, 0, c.digits.length - b), 315 | c 316 | } 317 | 318 | function biModuloByRadixPower(a, b) { 319 | var c = new BigInt; 320 | return arrayCopy(a.digits, 0, c.digits, 0, b), 321 | c 322 | } 323 | 324 | function biCompare(a, b) { 325 | if (a.isNeg != b.isNeg) 326 | return 1 - 2 * Number(a.isNeg); 327 | for (var c = a.digits.length - 1; c >= 0; --c) 328 | if (a.digits[c] != b.digits[c]) 329 | return a.isNeg ? 1 - 2 * Number(a.digits[c] > b.digits[c]) : 1 - 2 * Number(a.digits[c] < b.digits[c]); 330 | return 0 331 | } 332 | 333 | function biDivideModulo(a, b) { 334 | var f, g, h, i, j, k, l, m, n, o, p, q, r, s, c = biNumBits(a), d = biNumBits(b), e = b.isNeg; 335 | if (d > c) 336 | return a.isNeg ? (f = biCopy(bigOne), 337 | f.isNeg = !b.isNeg, 338 | a.isNeg = !1, 339 | b.isNeg = !1, 340 | g = biSubtract(b, a), 341 | a.isNeg = !0, 342 | b.isNeg = e) : (f = new BigInt, 343 | g = biCopy(a)), 344 | new Array(f, g); 345 | for (f = new BigInt, 346 | g = a, 347 | h = Math.ceil(d / bitsPerDigit) - 1, 348 | i = 0; b.digits[h] < biHalfRadix;) 349 | b = biShiftLeft(b, 1), 350 | ++i, 351 | ++d, 352 | h = Math.ceil(d / bitsPerDigit) - 1; 353 | for (g = biShiftLeft(g, i), 354 | c += i, 355 | j = Math.ceil(c / bitsPerDigit) - 1, 356 | k = biMultiplyByRadixPower(b, j - h); -1 != biCompare(g, k);) 357 | ++f.digits[j - h], 358 | g = biSubtract(g, k); 359 | for (l = j; l > h; --l) { 360 | for (m = l >= g.digits.length ? 0 : g.digits[l], 361 | n = l - 1 >= g.digits.length ? 0 : g.digits[l - 1], 362 | o = l - 2 >= g.digits.length ? 0 : g.digits[l - 2], 363 | p = h >= b.digits.length ? 0 : b.digits[h], 364 | q = h - 1 >= b.digits.length ? 0 : b.digits[h - 1], 365 | f.digits[l - h - 1] = m == p ? maxDigitVal : Math.floor((m * biRadix + n) / p), 366 | r = f.digits[l - h - 1] * (p * biRadix + q), 367 | s = m * biRadixSquared + (n * biRadix + o); r > s;) 368 | --f.digits[l - h - 1], 369 | r = f.digits[l - h - 1] * (p * biRadix | q), 370 | s = m * biRadix * biRadix + (n * biRadix + o); 371 | k = biMultiplyByRadixPower(b, l - h - 1), 372 | g = biSubtract(g, biMultiplyDigit(k, f.digits[l - h - 1])), 373 | g.isNeg && (g = biAdd(g, k), 374 | --f.digits[l - h - 1]) 375 | } 376 | return g = biShiftRight(g, i), 377 | f.isNeg = a.isNeg != e, 378 | a.isNeg && (f = e ? biAdd(f, bigOne) : biSubtract(f, bigOne), 379 | b = biShiftRight(b, i), 380 | g = biSubtract(b, g)), 381 | 0 == g.digits[0] && 0 == biHighIndex(g) && (g.isNeg = !1), 382 | new Array(f, g) 383 | } 384 | 385 | function biDivide(a, b) { 386 | return biDivideModulo(a, b)[0] 387 | } 388 | 389 | function biModulo(a, b) { 390 | return biDivideModulo(a, b)[1] 391 | } 392 | 393 | function biMultiplyMod(a, b, c) { 394 | return biModulo(biMultiply(a, b), c) 395 | } 396 | 397 | function biPow(a, b) { 398 | for (var c = bigOne, d = a; ;) { 399 | if (0 != (1 & b) && (c = biMultiply(c, d)), 400 | b >>= 1, 401 | 0 == b) 402 | break; 403 | d = biMultiply(d, d) 404 | } 405 | return c 406 | } 407 | 408 | function biPowMod(a, b, c) { 409 | for (var d = bigOne, e = a, f = b; ;) { 410 | if (0 != (1 & f.digits[0]) && (d = biMultiplyMod(d, e, c)), 411 | f = biShiftRight(f, 1), 412 | 0 == f.digits[0] && 0 == biHighIndex(f)) 413 | break; 414 | e = biMultiplyMod(e, e, c) 415 | } 416 | return d 417 | } 418 | 419 | function BarrettMu(a) { 420 | this.modulus = biCopy(a), 421 | this.k = biHighIndex(this.modulus) + 1; 422 | var b = new BigInt; 423 | b.digits[2 * this.k] = 1, 424 | this.mu = biDivide(b, this.modulus), 425 | this.bkplus1 = new BigInt, 426 | this.bkplus1.digits[this.k + 1] = 1, 427 | this.modulo = BarrettMu_modulo, 428 | this.multiplyMod = BarrettMu_multiplyMod, 429 | this.powMod = BarrettMu_powMod 430 | } 431 | 432 | function BarrettMu_modulo(a) { 433 | var i, b = biDivideByRadixPower(a, this.k - 1), c = biMultiply(b, this.mu), d = biDivideByRadixPower(c, this.k + 1), 434 | e = biModuloByRadixPower(a, this.k + 1), f = biMultiply(d, this.modulus), 435 | g = biModuloByRadixPower(f, this.k + 1), h = biSubtract(e, g); 436 | for (h.isNeg && (h = biAdd(h, this.bkplus1)), 437 | i = biCompare(h, this.modulus) >= 0; i;) 438 | h = biSubtract(h, this.modulus), 439 | i = biCompare(h, this.modulus) >= 0; 440 | return h 441 | } 442 | 443 | function BarrettMu_multiplyMod(a, b) { 444 | var c = biMultiply(a, b); 445 | return this.modulo(c) 446 | } 447 | 448 | function BarrettMu_powMod(a, b) { 449 | var d, e, c = new BigInt; 450 | for (c.digits[0] = 1, 451 | d = a, 452 | e = b; ;) { 453 | if (0 != (1 & e.digits[0]) && (c = this.multiplyMod(c, d)), 454 | e = biShiftRight(e, 1), 455 | 0 == e.digits[0] && 0 == biHighIndex(e)) 456 | break; 457 | d = this.multiplyMod(d, d) 458 | } 459 | return c 460 | } 461 | 462 | var maxDigits, ZERO_ARRAY, bigZero, bigOne, dpl10, lr10, hexatrigesimalToChar, hexToChar, highBitMasks, lowBitMasks, 463 | biRadixBase = 2, biRadixBits = 16, bitsPerDigit = biRadixBits, biRadix = 65536, biHalfRadix = biRadix >>> 1, 464 | biRadixSquared = biRadix * biRadix, maxDigitVal = biRadix - 1, maxInteger = 9999999999999998; 465 | setMaxDigits(20), 466 | dpl10 = 15, 467 | lr10 = biFromNumber(1e15), 468 | hexatrigesimalToChar = new Array("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"), 469 | hexToChar = new Array("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f"), 470 | highBitMasks = new Array(0, 32768, 49152, 57344, 61440, 63488, 64512, 65024, 65280, 65408, 65472, 65504, 65520, 65528, 65532, 65534, 65535), 471 | lowBitMasks = new Array(0, 1, 3, 7, 15, 31, 63, 127, 255, 511, 1023, 2047, 4095, 8191, 16383, 32767, 65535); 472 | 473 | function a(a) { 474 | var d, e, b = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789", c = ""; 475 | for (d = 0; a > d; d += 1) 476 | e = Math.random() * b.length, 477 | e = Math.floor(e), 478 | c += b.charAt(e); 479 | return c 480 | } 481 | 482 | function b(a, b) { 483 | var c = CryptoJS.enc.Utf8.parse(b) 484 | , d = CryptoJS.enc.Utf8.parse("0102030405060708") 485 | , e = CryptoJS.enc.Utf8.parse(a) 486 | , f = CryptoJS.AES.encrypt(e, c, { 487 | iv: d, 488 | mode: CryptoJS.mode.CBC 489 | }); 490 | return f.toString() 491 | } 492 | 493 | 494 | function c(a, b, c) { 495 | var d, e; 496 | return setMaxDigits(131), 497 | d = new RSAKeyPair(b, "", c), 498 | e = encryptedString(d, a) 499 | } 500 | 501 | function d(d, e, f, g) { 502 | var h = {} 503 | , i = a(16); 504 | return h.encText = b(d, g), 505 | h.encText = b(h.encText, i), 506 | h.encSecKey = c(i, e, f), 507 | h 508 | } 509 | 510 | function getParams(params) { 511 | e = '010001' 512 | // 公钥 513 | f = '00e0b509f6259df8642dbc35662901477df22677ec152b5ff68ace615bb7b725152b3ab17a876aea8a5aa76d2e417629ec4ee341f56135fccf695280104e0312ecbda92557c93870114af6c9d05c4f7f0c3685b7a46bee255932575cce10b424d813cfe4875d3e82047b97ddef52741d546b8e289dc6935b3ece0462db0a22b8e7' 514 | g = '0CoJUm6Qyw8W8jud' 515 | return d(params, e, f, g) 516 | 517 | } 518 | 519 | d123 = '{"ids":"[2061978961]","level":"standard","encodeType":"aac","csrf_token":""}' 520 | 521 | console.log(getParams(d123)) -------------------------------------------------------------------------------- /wangyiyun/run.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | # @File : run.py 4 | import json 5 | 6 | import requests 7 | import execjs 8 | 9 | 10 | def get_params(soin_id): 11 | with open('./jscode.js', encoding='utf-8') as f: 12 | js_code = f.read() 13 | params = {"ids": f"[{soin_id}]", "level": "standard", "encodeType": "aac", "csrf_token": ""} 14 | 15 | res = execjs.compile(js_code).call('getParams', str(params)) 16 | return res 17 | 18 | 19 | def run(): 20 | cookies = { 21 | 'NMTID': '00OrY_yzDgFisncUEcGkU-gB_2M5sAAAAGLwk1WWg', 22 | '_iuqxldmzr_': '32', 23 | '_ntes_nnid': 'ef76c33ce52a9829a3775f48e7730574,1699771931688', 24 | '_ntes_nuid': 'ef76c33ce52a9829a3775f48e7730574', 25 | 'WM_TID': 'BmuG1HjEsY1ABEBQURd634aKXmPsy6wk', 26 | 'WEVNSM': '1.0.0', 27 | 'WNMCID': 'mcigxs.1699771933548.01.0', 28 | 'WM_NI': 'I6arPOYfnmXW3X%2BbPQpuA%2BZLlgqCT3W2NSp7SLQ1SduIbHptB7KAw4iRDc0sDfnfWTXViDseamlGvGMwQtzLw8B3tOrm%2FTDsO1NtVRl7ZLCHwHzGM8eDYAT20tZkNUsORDI%3D', 29 | 'WM_NIKE': '9ca17ae2e6ffcda170e2e6eeadd55da1ecb791f570f68a8fa2d54a979e9a83d139e98e9785e169fc9db693cd2af0fea7c3b92a8beaaf93d3459bbaa28edb5df188e583d35bb4ab8fccd948b0b9bfa4d73995ee82b4f33d91949fd2d270b797aea9f38082e985a2f640ab8e8c84b37988baa287d6609c8aa7a5f26fa3b3a4a8f54d8fa99f95f948b5e88ed4f745b2b3e1b5c7798def8295d55ab0e996adc244b598b6a8d034a79c97a2d73af4ac968ccd5fb1919ea5cc37e2a3', 30 | 'ntes_utid': 'tid._.Sg2lvlB3inhAQlRFVULE1t7qQFCFvjtg._.0', 31 | 'sDeviceId': 'YD-YaGpsiLdkf1BUxFFRUfVg8v6RVTRqmp4', 32 | 'playerid': '64815770', 33 | 'JSESSIONID-WYYY': '5puXnPBpVswSDs7d%2FaR%5C0sKsbwDs9dVdndf5%2B8Igd9AGskXlHGqw%2FfHKZAErE68rQOFyGpKpXirjDR2uRB4GhaHfWc0bflq%2FcvnuIA1pfM4XY%5CYHyE3aH5aU3vMzUrMSatDU7X4cnQ%2FzRhvVKHwB1AF45Tr3wBF4s6dN8KDHpFypFTlO%3A1699777330334', 34 | } 35 | 36 | headers = { 37 | 'authority': 'music.163.com', 38 | 'accept': '*/*', 39 | 'accept-language': 'zh,en;q=0.9,zh-CN;q=0.8', 40 | 'content-type': 'application/x-www-form-urlencoded', 41 | # 'cookie': 'NMTID=00OrY_yzDgFisncUEcGkU-gB_2M5sAAAAGLwk1WWg; _iuqxldmzr_=32; _ntes_nnid=ef76c33ce52a9829a3775f48e7730574,1699771931688; _ntes_nuid=ef76c33ce52a9829a3775f48e7730574; WM_TID=BmuG1HjEsY1ABEBQURd634aKXmPsy6wk; WEVNSM=1.0.0; WNMCID=mcigxs.1699771933548.01.0; WM_NI=I6arPOYfnmXW3X%2BbPQpuA%2BZLlgqCT3W2NSp7SLQ1SduIbHptB7KAw4iRDc0sDfnfWTXViDseamlGvGMwQtzLw8B3tOrm%2FTDsO1NtVRl7ZLCHwHzGM8eDYAT20tZkNUsORDI%3D; WM_NIKE=9ca17ae2e6ffcda170e2e6eeadd55da1ecb791f570f68a8fa2d54a979e9a83d139e98e9785e169fc9db693cd2af0fea7c3b92a8beaaf93d3459bbaa28edb5df188e583d35bb4ab8fccd948b0b9bfa4d73995ee82b4f33d91949fd2d270b797aea9f38082e985a2f640ab8e8c84b37988baa287d6609c8aa7a5f26fa3b3a4a8f54d8fa99f95f948b5e88ed4f745b2b3e1b5c7798def8295d55ab0e996adc244b598b6a8d034a79c97a2d73af4ac968ccd5fb1919ea5cc37e2a3; ntes_utid=tid._.Sg2lvlB3inhAQlRFVULE1t7qQFCFvjtg._.0; sDeviceId=YD-YaGpsiLdkf1BUxFFRUfVg8v6RVTRqmp4; playerid=64815770; JSESSIONID-WYYY=5puXnPBpVswSDs7d%2FaR%5C0sKsbwDs9dVdndf5%2B8Igd9AGskXlHGqw%2FfHKZAErE68rQOFyGpKpXirjDR2uRB4GhaHfWc0bflq%2FcvnuIA1pfM4XY%5CYHyE3aH5aU3vMzUrMSatDU7X4cnQ%2FzRhvVKHwB1AF45Tr3wBF4s6dN8KDHpFypFTlO%3A1699777330334', 42 | 'origin': 'https://music.163.com', 43 | 'referer': 'https://music.163.com/', 44 | 'sec-ch-ua': '"Google Chrome";v="119", "Chromium";v="119", "Not?A_Brand";v="24"', 45 | 'sec-ch-ua-mobile': '?0', 46 | 'sec-ch-ua-platform': '"macOS"', 47 | 'sec-fetch-dest': 'empty', 48 | 'sec-fetch-mode': 'cors', 49 | 'sec-fetch-site': 'same-origin', 50 | 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36', 51 | } 52 | 53 | params = { 54 | 'csrf_token': '', 55 | } 56 | 57 | params_dict = get_params('2093980140') 58 | 59 | data = { 60 | 'params': params_dict['encText'], 61 | 'encSecKey': params_dict['encSecKey'], 62 | } 63 | 64 | response = requests.post( 65 | 'https://music.163.com/weapi/song/enhance/player/url/v1', 66 | params=params, 67 | cookies=cookies, 68 | headers=headers, 69 | data=data, 70 | ) 71 | print(response.json()) 72 | 73 | 74 | if __name__ == '__main__': 75 | run() 76 | -------------------------------------------------------------------------------- /xiniudata/img/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pangxiaobin/SpiderCollection/b02e7038d7b3127c125056a3f3435e6acf1c3157/xiniudata/img/1.png -------------------------------------------------------------------------------- /xiniudata/img/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pangxiaobin/SpiderCollection/b02e7038d7b3127c125056a3f3435e6acf1c3157/xiniudata/img/2.png -------------------------------------------------------------------------------- /xiniudata/img/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pangxiaobin/SpiderCollection/b02e7038d7b3127c125056a3f3435e6acf1c3157/xiniudata/img/3.png -------------------------------------------------------------------------------- /xiniudata/img/4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pangxiaobin/SpiderCollection/b02e7038d7b3127c125056a3f3435e6acf1c3157/xiniudata/img/4.png -------------------------------------------------------------------------------- /xiniudata/img/5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pangxiaobin/SpiderCollection/b02e7038d7b3127c125056a3f3435e6acf1c3157/xiniudata/img/5.png -------------------------------------------------------------------------------- /xiniudata/img/6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pangxiaobin/SpiderCollection/b02e7038d7b3127c125056a3f3435e6acf1c3157/xiniudata/img/6.png -------------------------------------------------------------------------------- /xiniudata/readme.md: -------------------------------------------------------------------------------- 1 | ![请求地址](./img/1.png) 2 | ![请求地址](./img/2.png) 3 | ![请求地址](./img/3.png) 4 | ![请求地址](./img/4.png) 5 | ![请求地址](./img/5.png) 6 | ![请求地址](./img/6.png) 7 | -------------------------------------------------------------------------------- /xueqiu/jscode.js: -------------------------------------------------------------------------------- 1 | String['prototype']['hexXor'] = function (_0x4e08d8) { 2 | var _0x5a5d3b = ''; 3 | for (var _0xe89588 = 0x0; _0xe89588 < this['length'] && _0xe89588 < _0x4e08d8['length']; _0xe89588 += 0x2) { 4 | var _0x401af1 = parseInt(this['slice'](_0xe89588, _0xe89588 + 0x2), 0x10); 5 | var _0x105f59 = parseInt(_0x4e08d8['slice'](_0xe89588, _0xe89588 + 0x2), 0x10); 6 | var _0x189e2c = (_0x401af1 ^ _0x105f59)['toString'](0x10); 7 | if (_0x189e2c['length'] == 0x1) { 8 | _0x189e2c = '\x30' + _0x189e2c; 9 | } 10 | _0x5a5d3b += _0x189e2c; 11 | } 12 | return _0x5a5d3b; 13 | } 14 | ; 15 | // arg1 function 16 | 17 | String['\x70\x72\x6f\x74\x6f\x74\x79\x70\x65']['unsbox'] = function () { 18 | var _0x4b082b = [0xf, 0x23, 0x1d, 0x18, 0x21, 0x10, 0x1, 0x26, 0xa, 0x9, 0x13, 0x1f, 0x28, 0x1b, 0x16, 0x17, 0x19, 0xd, 0x6, 0xb, 0x27, 0x12, 0x14, 0x8, 0xe, 0x15, 0x20, 0x1a, 0x2, 0x1e, 0x7, 0x4, 0x11, 0x5, 0x3, 0x1c, 0x22, 0x25, 0xc, 0x24]; 19 | var _0x4da0dc = []; 20 | var _0x12605e = ''; 21 | for (var _0x20a7bf = 0x0; _0x20a7bf < this['\x6c\x65\x6e\x67\x74\x68']; _0x20a7bf++) { 22 | var _0x385ee3 = this[_0x20a7bf]; 23 | for (var _0x217721 = 0x0; _0x217721 < _0x4b082b['length']; _0x217721++) { 24 | if (_0x4b082b[_0x217721] == _0x20a7bf + 0x1) { 25 | _0x4da0dc[_0x217721] = _0x385ee3; 26 | } 27 | } 28 | } 29 | _0x12605e = _0x4da0dc['\x6a\x6f\x69\x6e'](''); 30 | return _0x12605e; 31 | } 32 | ; 33 | 34 | function getAcwScV2Cooke(arg1) { 35 | var _0x5e8b26 = '3000176000856006061501533003690027800375' 36 | var _0x23a392 = arg1['unsbox'](); 37 | arg2 = _0x23a392['hexXor'](_0x5e8b26); 38 | return arg2 39 | } 40 | 41 | var r = getAcwScV2Cooke('92E8DA9E633EF45328EB5CAB433241B25A5953C7') 42 | console.log(r) -------------------------------------------------------------------------------- /xueqiu/run.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | # @File : run.py 4 | import execjs 5 | import requests 6 | import re 7 | 8 | HEADERS = { 9 | 'Host': 'xueqiu.com', 10 | 'sec-ch-ua': '"Google Chrome";v="119", "Chromium";v="119", "Not?A_Brand";v="24"', 11 | 'sec-ch-ua-mobile': '?0', 12 | 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36', 13 | 'elastic-apm-traceparent': '00-bf05d032897dc6d77dc6280f77a01733-2961fd43ce137e04-00', 14 | 'Accept': '*/*', 15 | 'X-Requested-With': 'XMLHttpRequest', 16 | 'Sec-Purpose': 'prefetch;prerender', 17 | 'sec-ch-ua-platform': '"macOS"', 18 | 'Purpose': 'prefetch', 19 | 'Sec-Fetch-Site': 'same-origin', 20 | 'Sec-Fetch-Mode': 'cors', 21 | 'Sec-Fetch-Dest': 'empty', 22 | 'Referer': 'https://xueqiu.com/today', 23 | 'Accept-Language': 'zh,en;q=0.9,zh-CN;q=0.8', 24 | } 25 | 26 | 27 | def get_cookie() -> dict: 28 | """ 29 | 获取acw__sc__v2 cookie 30 | :return: cookie 31 | """ 32 | 33 | response = requests.get('https://xueqiu.com/today', headers=HEADERS) 34 | pattern = r"arg1='(.*?)';" 35 | match = re.search(pattern, response.text) 36 | 37 | if match: 38 | arg1 = match.group(1) 39 | else: 40 | raise ValueError('没有匹配到arg1的值') 41 | with open('./jscode.js', 'r', encoding='utf-8') as f: 42 | js_code = f.read() 43 | acw__sc_v2_cookie = execjs.compile(js_code).call('getAcwScV2Cooke', arg1) 44 | cookies = {} 45 | cookies['acw_sc__v2'] = acw__sc_v2_cookie 46 | response = requests.get('https://xueqiu.com/today', headers=HEADERS, cookies=cookies) 47 | cookies.update(response.cookies.get_dict()) 48 | 49 | return cookies 50 | 51 | 52 | def run(): 53 | cookies = get_cookie() 54 | params = { 55 | 'since_id': '-1', 56 | 'max_id': '-1', 57 | 'size': '15', 58 | } 59 | 60 | response = requests.get('https://xueqiu.com/statuses/hot/listV2.json?since_id=-1&max_id=-1&size=15', params=params, 61 | cookies=cookies, headers=HEADERS) 62 | print(response.json()) 63 | 64 | 65 | if __name__ == '__main__': 66 | run() 67 | -------------------------------------------------------------------------------- /zzzmh/img/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pangxiaobin/SpiderCollection/b02e7038d7b3127c125056a3f3435e6acf1c3157/zzzmh/img/1.png -------------------------------------------------------------------------------- /zzzmh/img/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pangxiaobin/SpiderCollection/b02e7038d7b3127c125056a3f3435e6acf1c3157/zzzmh/img/2.png -------------------------------------------------------------------------------- /zzzmh/img/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pangxiaobin/SpiderCollection/b02e7038d7b3127c125056a3f3435e6acf1c3157/zzzmh/img/3.png -------------------------------------------------------------------------------- /zzzmh/img/4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pangxiaobin/SpiderCollection/b02e7038d7b3127c125056a3f3435e6acf1c3157/zzzmh/img/4.png -------------------------------------------------------------------------------- /zzzmh/img/5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pangxiaobin/SpiderCollection/b02e7038d7b3127c125056a3f3435e6acf1c3157/zzzmh/img/5.png -------------------------------------------------------------------------------- /zzzmh/img/6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pangxiaobin/SpiderCollection/b02e7038d7b3127c125056a3f3435e6acf1c3157/zzzmh/img/6.png -------------------------------------------------------------------------------- /zzzmh/img/7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pangxiaobin/SpiderCollection/b02e7038d7b3127c125056a3f3435e6acf1c3157/zzzmh/img/7.png -------------------------------------------------------------------------------- /zzzmh/img/8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pangxiaobin/SpiderCollection/b02e7038d7b3127c125056a3f3435e6acf1c3157/zzzmh/img/8.png -------------------------------------------------------------------------------- /zzzmh/img/9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pangxiaobin/SpiderCollection/b02e7038d7b3127c125056a3f3435e6acf1c3157/zzzmh/img/9.png -------------------------------------------------------------------------------- /zzzmh/jscode.js: -------------------------------------------------------------------------------- 1 | const jsdom = require('jsdom'); 2 | const { JSDOM } = jsdom; 3 | const dom = new JSDOM(``); 4 | window = dom.window 5 | function _0x3ef903(_0x44e9d9) { 6 | for (var _0x39da63, _0x53f955, _0x16f530 = '', _0x134aef = 0x0; _0x134aef < _0x44e9d9['length'];) 7 | _0x39da63 = _0x44e9d9[_0x134aef], 8 | _0x53f955 = 0x0, 9 | _0x39da63 >>> 0x7 === 0x0 ? (_0x16f530 += String['fromCharCode'](_0x44e9d9[_0x134aef]), 10 | _0x134aef += 0x1) : 0xfc === (0xfc & _0x39da63) ? (_0x53f955 = (0x3 & _0x44e9d9[_0x134aef]) << 0x1e, 11 | _0x53f955 |= (0x3f & _0x44e9d9[_0x134aef + 0x1]) << 0x18, 12 | _0x53f955 |= (0x3f & _0x44e9d9[_0x134aef + 0x2]) << 0x12, 13 | _0x53f955 |= (0x3f & _0x44e9d9[_0x134aef + 0x3]) << 0xc, 14 | _0x53f955 |= (0x3f & _0x44e9d9[_0x134aef + 0x4]) << 0x6, 15 | _0x53f955 |= 0x3f & _0x44e9d9[_0x134aef + 0x5], 16 | _0x16f530 += String['fromCharCode'](_0x53f955), 17 | _0x134aef += 0x6) : 0xf8 === (0xf8 & _0x39da63) ? (_0x53f955 = (0x7 & _0x44e9d9[_0x134aef]) << 0x18, 18 | _0x53f955 |= (0x3f & _0x44e9d9[_0x134aef + 0x1]) << 0x12, 19 | _0x53f955 |= (0x3f & _0x44e9d9[_0x134aef + 0x2]) << 0xc, 20 | _0x53f955 |= (0x3f & _0x44e9d9[_0x134aef + 0x3]) << 0x6, 21 | _0x53f955 |= 0x3f & _0x44e9d9[_0x134aef + 0x4], 22 | _0x16f530 += String['fromCharCode'](_0x53f955), 23 | _0x134aef += 0x5) : 0xf0 === (0xf0 & _0x39da63) ? (_0x53f955 = (0xf & _0x44e9d9[_0x134aef]) << 0x12, 24 | _0x53f955 |= (0x3f & _0x44e9d9[_0x134aef + 0x1]) << 0xc, 25 | _0x53f955 |= (0x3f & _0x44e9d9[_0x134aef + 0x2]) << 0x6, 26 | _0x53f955 |= 0x3f & _0x44e9d9[_0x134aef + 0x3], 27 | _0x16f530 += String['fromCharCode'](_0x53f955), 28 | _0x134aef += 0x4) : 0xe0 === (0xe0 & _0x39da63) ? (_0x53f955 = (0x1f & _0x44e9d9[_0x134aef]) << 0xc, 29 | _0x53f955 |= (0x3f & _0x44e9d9[_0x134aef + 0x1]) << 0x6, 30 | _0x53f955 |= 0x3f & _0x44e9d9[_0x134aef + 0x2], 31 | _0x16f530 += String['fromCharCode'](_0x53f955), 32 | _0x134aef += 0x3) : 0xc0 === (0xc0 & _0x39da63) ? (_0x53f955 = (0x3f & _0x44e9d9[_0x134aef]) << 0x6, 33 | _0x53f955 |= 0x3f & _0x44e9d9[_0x134aef + 0x1], 34 | _0x16f530 += String['fromCharCode'](_0x53f955), 35 | _0x134aef += 0x2) : (_0x16f530 += String['fromCharCode'](_0x44e9d9[_0x134aef]), 36 | _0x134aef += 0x1); 37 | return _0x16f530; 38 | } 39 | 40 | function _0x3ed467(_0x58f7d4) { 41 | for (var _0x4f1bcd = [-0x6f, 0x34, 0x5b, 0x41, -0x41, 0x74, 0x77, 0x6a, -0x79, -0x52, -0x5, 0x50, 0x33, 0x61, 0x44, -0x53, -0x70, -0x33, 0x17, -0x2e, -0x22, -0x72, -0x37, -0xb, -0x7f, 0x5a, 0x21, 0x16, -0x1f, 0x32, -0x11, 0x14, -0x2c, 0xf, -0x5e, -0x7b, 0x76, -0x17, -0x3d, 0x72, 0x47, -0x68, -0x7e, -0x75, -0x51, -0x36, -0x12, -0x6e, -0x4, -0x5f, -0x5b, 0x5e, -0x50, -0xe, 0x78, 0x69, 0x55, 0x68, -0x56, -0x6c, 0x43, 0x19, 0x65, 0x6c, 0x10, -0x69, 0x6f, -0xa, 0x75, -0x49, 0x4d, 0x59, -0x1d, -0x62, -0x44, 0x70, 0x6b, -0x1, 0x56, 0x79, 0x58, -0x65, -0x7c, 0x45, -0x1e, -0x8, -0x71, -0x4a, -0x76, 0x39, -0x19, 0xc, -0x73, -0x6a, 0x5f, 0x7f, 0x54, 0x7c, -0x66, -0x1c, 0x49, 0x2b, -0x3c, 0x1c, 0x2e, 0x73, 0x1e, 0x7a, -0x4b, 0x7d, -0x43, -0x4d, 0x3, -0x7, -0x35, -0xd, 0x35, 0x4e, -0x48, 0x1, 0xb, -0x47, -0x27, -0x4f, -0x3, 0x13, 0x29, 0x7e, -0x2b, -0x7d, -0x1b, 0x22, 0x3f, 0x8, 0x48, -0x23, -0x29, -0x3f, 0x3c, -0x18, 0x66, 0x2f, -0x77, -0x67, -0x16, 0x2d, 0x3b, 0x40, -0x60, 0x31, 0x53, -0x6b, -0x78, -0x39, -0x46, 0x0, -0x26, -0x54, -0x28, 0x18, 0xe, 0x30, 0x1d, 0x2c, -0x24, -0x2f, 0x38, -0x5c, 0x26, 0x25, 0x4, -0x32, 0x67, 0xa, -0x59, 0x37, 0x71, -0x1a, 0x6e, 0x36, 0x24, -0x14, -0x4e, -0xc, -0x74, 0x46, -0x25, 0x5, -0x3e, -0x4c, -0x30, -0x40, 0x4f, 0x64, 0x28, 0x6, -0x3a, -0x5a, -0x13, -0x9, 0x27, 0x5d, -0x63, 0x15, 0x7, 0x1a, -0x2, 0x1b, -0x2d, 0x51, 0x3a, -0x7a, 0x4c, -0x42, 0x2, 0x5c, -0x2a, 0x62, -0x10, 0x9, 0x3d, 0x3e, -0xf, 0x63, -0x15, 0x1f, -0x38, 0x57, 0x11, -0x34, -0x45, -0x21, -0x3b, -0x55, 0x42, 0x4a, 0x12, -0x5d, -0x80, -0x57, -0x20, 0x2a, 0x20, -0x58, 0x6d, 0x60, 0xd, -0x6, 0x4b, -0x64, -0x31, 0x23, -0x61, 0x52, -0x6d, 0x7b], _0x39eb66 = 0x0, _0x46445e = 0x0, _0x1360a5 = 0x0, _0x596013 = new Array(), _0x411913 = 0x0; _0x411913 < _0x58f7d4['length']; _0x411913++) { 42 | _0x39eb66 = _0x39eb66 + 0x1 & 0xff, 43 | _0x46445e = (0xff & _0x4f1bcd[_0x39eb66]) + _0x46445e & 0xff; 44 | var _0x5e20d4 = _0x4f1bcd[_0x39eb66]; 45 | _0x4f1bcd[_0x39eb66] = _0x4f1bcd[_0x46445e], 46 | _0x4f1bcd[_0x46445e] = _0x5e20d4, 47 | _0x1360a5 = (0xff & _0x4f1bcd[_0x39eb66]) + (0xff & _0x4f1bcd[_0x46445e]) & 0xff, 48 | _0x596013['push'](_0x58f7d4[_0x411913] ^ _0x4f1bcd[_0x1360a5]); 49 | } 50 | return _0x596013; 51 | } 52 | 53 | function _0x4207c2(_0x2219f6) { 54 | for (var _0x9c7ad4 = window.atob(_0x2219f6), _0x2dd788 = new Int8Array(_0x9c7ad4['length']), _0x7c7af6 = 0x0; _0x7c7af6 < _0x9c7ad4['length']; _0x7c7af6++) 55 | _0x2dd788[_0x7c7af6] = _0x9c7ad4['charCodeAt'](_0x7c7af6); 56 | return _0x2dd788; 57 | } 58 | 59 | function _0x563330(_0x1e29f9) { 60 | return _0x3ef903(_0x3ed467(_0x4207c2(_0x1e29f9))); 61 | } 62 | 63 | var data = 'ak+9VCsq4dEdB+UdUfGo8kh5JDEbMHGTCmF/AyXJQ0IgHU+lUAivRFLre9jlgVPP2wTUOE2MafkcuF2KDLfx1d+0Yn9MBvpM+D0Zi0xkep6snILLG1j6Eh/bWp9BcjXF3RMgAk3H2kFG5fHQKcm0MdL+FT/KuMb2E1H6b1YO2OgYPyp3yW+t+LAqZBX2WHJDTbt61QF6hZgJ0vuBLeHPQ4WPccmlZWs5dO4FmTWQrRCe+iq1IXH7QhzC7TsMw6AJ+2f5DweCgZN+1Osr1qMGtH/LfyQx70Dw9WxFzatw98cEpoLETFx74ZxgiCrYeRIKNSU+TghsmMhsKbHxcPSeM+GbF3qhb214UxKga+G6TtSqG64aLQ3RUOh2OH1qt+67POe7OpsIhcZlb9fMyhajmg22u3RHfC44VM0JDRHBu6JZzptHTx1A92x7gVGVSrKJssFUOjNLEyCVWXmrYwalKsFPvIL3QJ9KZ7INGYZIE1G6mGLBHFGbB8MSW7CkFsJg8ECLgHAiYE6cFGFVizoVCFb7KxnXi0ybCbXb8eEBJWVwp6AYL7z/7YvGgaIeCXWBtJNo1aA1pEMT6rp5r6N1BXXvpuhsPfKnr9XxZLlAT1pJ92eGuEYZfjIW9dtuqy4sTzzrsUWLoId7R09clXPIfb9umiQqI0RTTQxd6IIvMDIidNgm/AC/s25MX7Mcrvcp8f8b9MKae67fkiotW5h2NKRn7LTd2gwPzqeLG3Zq1UbGFjprr6HjEtbiqc8MQE6ggO2ziC2m1pMam7glYEebhMQmr3AxIhnd2SQuOnK7n7bUL6WRFc4mqN9VudslcDQkXJa95WWE/bxGhBlFNja2oOHIwNzW5TFPb2m6JfBaXxglm7hTgj+hzJFWj8nxfNoR6CVBgxgSobos/9+iNb8HRDEeoNB9P6KNmIx+QhVQequJXagw6J78appgD0wgY4g2Bd7LFsy23gde6XnNLQ7e/W2oHtglEZWvKTnZ9lwvc6lcMgJ5GfIgkGZhjgD++8dVInZi2EOCetafVY2Sm/jriWHhCij5H1IHKk3fw5c4h2rjT66xnZBWmbZiOeC3UpB8Tg+8RpohA7bY6Ym6kgJCDrBzM9Z6Gy2HcWHE6ZRqbhbDxOOyTHBRq/cVjT9btUX/2/ASkqTzJ8HDHuvYW6ZQiRy7NYQCWUN7qiCunPOpPE2m7+wGG6+x5gtUKGPPgqKNeFREzwhB09Ca7QhKP4BFhVKyiKx5WnFFomEbi2UG42iZQvr8Z5kL6QoIg3ldRrVMYfOVbG/OSsyYvaeamiY5ZUvrVagccoYb2i71gm3zlWYYYYb+VnpVejD5SVM9+gP9tQPp7xy4GJepJRKvwetMhxVybLQtQmkdLgpNckzZfh3R9KRqNO0kGJlpvmmm3ChCQtfpTV6if/cgUIHxBmCjH4gRCn8tpxxGlpZ3QG0JV0QJSHrvHKzYLGe0MdKbcw9bhh0yUg2RQaJ7AZH/9exU0EttcaxtFzRKNZ6qWcVnZqxOBV/dYsEFUwVDMtR/BsxCQljGJye0EicUPoKUH48T1nWtLCwfUd8fhoQ6vlAcRrNDJGqJ7ZwPutvpLXV8iP2D0mhT+bclWglLbePFPocDjxH09v5TPezWfVehvYfsb1Ls7KyT+4RySE6XywavKk+GbBNfSHOJ08MXyj6XbSLD7rlIPcgqmHmxF9oJPnk25EifSnHkxW47v3jmjBXip84I9/OdZvXv/KtxwUbsAbbGUpC97y0kYV4XmL1pEQ8SUqjc1QdgRvhgsGAKy73cJYQz3AoptmiauEmGtYtdYNrIgj6yqYg4cIal6uRy49Fp/DZ3f1k917egoEohciYUmz1X+6MQen/QkfxQUM1Fi3f0hMrDPOk2KR/ZXbgPRT9PS+XrIx8O+eLmg0c+vMsVRCi2C48UQY3n7bNmqzfgzj8KE8mGrdfqm7KYpAiea1P8s7tlFXy8RUYVYRSvzJ5YMtGDZ0aF/QiJ6nXrjzESxh6Pma/iMobWcrt1afn+OY9GGue8WexeWI5WQhTqCv9zfSJFjVFUVfClLmNs5mfak71xnqwAeXqmeLzu+x/ahuQBNRhDlj8k2r7VVEupAXE0fAIo17Z7yuf9na0vJYlq71z6SwAJoBormCVhAJ7k4CrUNtU6k2G/xofL5slSTt7hasGil03Cv5OYDclGq0gBcUwFvAajQbUK' 64 | console.log(_0x563330(data)) 65 | 66 | // 这里把window.atob 使用nodejs来实现,但是结果是乱码如下,构造windows环境 67 | // ,{"#urrLMge::6 w֘.럼F趀cヒǨى~ヘᆰᄋホLツ鏞ᆪ疀fq}eCĩ6Քンᄡaȴ4cCモチᆰ否ᄡᄒ+:+3. 68 | // ミホᆪメ︹ 69 | // ̞ꢆルヤ?ヤᆵl論ڞ,[ᄌYOレ_j樖ラ-\褥ᄁ9Ƨx0ˏ埤ᆳ6 70 | // function base64Decode(encodedString) { 71 | // return Buffer.from(encodedString, 'base64').toString('utf-8'); 72 | // } -------------------------------------------------------------------------------- /zzzmh/readme.md: -------------------------------------------------------------------------------- 1 | ### 极简壁纸逆向分析 2 | 1、抓包分析请求 3 | ![](./img/1.png) 4 | 2、常规思路搜索关键词 decrypt( JSON.parse发现搜索不到,使用xhr监听断点,来进行追栈 5 | ![](./img/2.png) 6 | 3、往下追踪,获取到明文的结果,停止 7 | ![](./img/3.png) 8 | 4、找到加密的方法 9 | ![](./img/4.png) 10 | 5、把解密的方法复制到本地js文件中 11 | ![](./img/5.png) 12 | 6、运行下面的代码,需要使用nodeJs环境,依赖jsdom可以使用npm install jsdom进行安装 13 | ![](./img/6.png) 14 | 7、pyhton环境中调用js代码,PyExecJS,可以pip install PyExecJS进行安装 15 | ![](./img/8.png) 16 | 8、封装下载接口,下载的地址也需要通过debug来找到其组合规律 17 | ![](./img/9.png) 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /zzzmh/run.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | # @File : run.py 4 | import json 5 | import os 6 | from urllib.parse import urlparse 7 | 8 | import execjs 9 | import requests 10 | 11 | 12 | def parse_result(res): 13 | """ 14 | 解密结果 15 | :param res: 16 | :return: 17 | """ 18 | with open("jscode.js", encoding="utf-8") as f: 19 | js_code = f.read() 20 | ctx = execjs.compile(js_code) 21 | result = ctx.call("_0x563330", res) 22 | return result 23 | 24 | 25 | def download_img(param_key): 26 | """ 27 | 下载图片 28 | :param param_key: 29 | :return: 30 | """ 31 | headers = { 32 | 'authority': 'api.zzzmh.cn', 33 | 'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 34 | 'accept-language': 'zh,en;q=0.9,zh-CN;q=0.8', 35 | 'cache-control': 'no-cache', 36 | 'pragma': 'no-cache', 37 | 'referer': 'https://bz.zzzmh.cn/', 38 | 'sec-ch-ua': '"Google Chrome";v="119", "Chromium";v="119", "Not?A_Brand";v="24"', 39 | 'sec-ch-ua-mobile': '?0', 40 | 'sec-ch-ua-platform': '"macOS"', 41 | 'sec-fetch-dest': 'document', 42 | 'sec-fetch-mode': 'navigate', 43 | 'sec-fetch-site': 'same-site', 44 | 'sec-fetch-user': '?1', 45 | 'upgrade-insecure-requests': '1', 46 | 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36', 47 | } 48 | url = f'https://api.zzzmh.cn/bz/v3/getUrl/{param_key}' 49 | parsed = urlparse(url) 50 | file_name = os.path.basename(parsed.path) 51 | response = requests.get(url, headers=headers) 52 | with open(f"{file_name}.jpg", "wb") as file: 53 | file.write(response.content) 54 | 55 | 56 | def run(): 57 | headers = { 58 | "authority": "api.zzzmh.cn", 59 | "accept": "application/json, text/plain, */*", 60 | "accept-language": "zh,en;q=0.9,zh-CN;q=0.8", 61 | "content-type": "application/json;charset=UTF-8", 62 | "origin": "https://bz.zzzmh.cn", 63 | "referer": "https://bz.zzzmh.cn/", 64 | "sec-ch-ua": '"Google Chrome";v="119", "Chromium";v="119", "Not?A_Brand";v="24"', 65 | "sec-ch-ua-mobile": "?0", 66 | "sec-ch-ua-platform": '"macOS"', 67 | "sec-fetch-dest": "empty", 68 | "sec-fetch-mode": "cors", 69 | "sec-fetch-site": "same-site", 70 | "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36", 71 | } 72 | 73 | json_data = { 74 | "size": 24, 75 | "current": 1, 76 | "sort": 0, 77 | "category": 0, 78 | "resolution": 0, 79 | "color": 0, 80 | "categoryId": 0, 81 | "ratio": 0, 82 | } 83 | 84 | response = requests.post( 85 | "https://api.zzzmh.cn/bz/v3/getData", headers=headers, json=json_data 86 | ) 87 | for i in json.loads(parse_result(response.json()["result"]))['list']: 88 | param_key = f"{i['i']}{i['t']}9" 89 | print(f'download img:{param_key}') 90 | download_img(param_key) 91 | 92 | 93 | if __name__ == "__main__": 94 | run() 95 | --------------------------------------------------------------------------------