js加密进阶与搭建Node服务
创始人
2024-02-20 11:05:05

js加密进阶与搭建Node服务

X = 1621779426453
U = 1621779410888
w = 1621779395276
jt.data = 1621779395276

加密参数

  • s

    • O

      监听垂直滚动条事件(scrollTop)

      window.document.body.scrollTop
      
      O.data = [{scrollTop: xxx,timestamp = Date.now() - w   // w = 1621523124040
      }]
      
    • R

      监听鼠标点击事件, 按下鼠标(mousedown)

      R.data = [
      {clientX: 715clientY: 325elementId: ""timestamp: Date.now() - w},....
      ]
      
    • 时间戳w

      Ltcase "0":r[n("0x97", "bpr9")](qt);continue;case "1":this[n("0x132", "GmkI")](t[j] || 879609302220);continue;case "2":r[n("0xf2", "^o[d")](Gt, Z, et);continue;case "3":Z = ot[w]();continue;case "4":r[n("0x150", "%LaC")](It);continue}
      
  • Wt

    监听鼠标点击事件(click), 如果Wt.data > 1执行Wt.data.shift(). 即记录的是最后一条点击事件

    Wt.data = [{clientX: 715clientY: 325elementId: ""timestamp: Date.now() - w
    }]
    
  • pt

    当前页面地址

    document.location.href
    
    pt.data = {href: "http://yangkeduo.com/pincard_share_card_popup.html?_pdd_fs=1&_pdd_tc=00ffffff&categoryId=39236&refer_origin_page_sn=17542&refer_page_name=list_channel&refer_page_id=67387_1615819189608_3dep3yqyuo&refer_page_sn=67387&refer_abtest_info=%7B%7D",port: ""
    }
    
  • mt

    mt.data = {availHeight: 1025,availWidth: 1891
    }
    
  • vt

    vt.data = "3287976604829790-1621528579964"  // vt.data = 随机数-U
    
    • U

      Lt[d("0x1d", "s2FC")][d("0x40", "cn*L")] = function(t) {X = ot[w](),U = t       // 1621528579964
      }
      
  • bt

    验证浏览器环境

    bt.data = 8192# bt的验证参数r
    r = [0: 0   // 判断当前window.outHeight < 1 || window.outWidth < 11: 0   // 判断档期是否有windwow._phantom || window.callPhantom2: 0   // 判断有无window.Buffer3: 0   // 判断有无window.emit4: 0   // 判断有无window.spawn5: 0   // 判断有无navigator.webdriver6: 0   // 判断有无window.domAutomation8: 0   // 判断navigator.plugins是否大于09: 0   // 判断navigator.language是否为""10: 0  // 判断有无window.vendor11: 0  // 判断有无window.Modernizr12: 0  // 判断有无window.chrome13: 1  // 判断'webdriver' in navigaotr14: 0  // 判断navigator.hasOwnProperty('webdriver')是否为true15: 0  // 判断History.back.toString()中是否有'ipcRenderer'16: 0  // 判断browser.versions 是否有module17: 0  // 判断window.document.getElementById.toString() 是否含有native code]
    
  • gt

    gt.data = c.pbc(window.location.href)
    
  • kt

    // DeviceOrientationEvent 表示手机屏幕翻转
    kt.data  = 'n'   // 网页端固定为n
    
  • _t

    // DeviceMotionEvent位置和方向改变速度的信号
    _t.data = 'n'   // 网页端固定为n
    
  • yt

    yt.data = Date.now() - X    // x = 1621528592265
    
  • wt

    wt.data = User-Agent
    
  • Ct

    cookie中的_nano_fp

    Ct.data = {nano_cookie_fp: "XpEaX0galpCxlpXylT_1I6dtvD7pLG1UO7xZIpLs",nano_storage_fp: "XpEaX0galpCxlpXylT_1I6dtvD7pLG1UO7xZIpLs"
    }
    
  • St

    St.data = window.document.referrer.split("?")[0]
    
  • Ot

    cookie中的pdd_user_id

    Ot.data = "pdd_user_id"
    
  • Rt

    cookie中的api_uid

    Rt.data = "CksBgV/4eYkFCwBSPt8WAg=="
    
  • Pt

    请求anti_content的次数

    Pt.data = 7
    
  • jt

    页面初始化的时候产生的时间戳

    jt.data = w
    
  • Dt

    cookie中的pdd_vds

    Dt.data = "gaLLNIyLQNiimoGtPyOQEQOIaomoabtNNGbGnQQmIbnLPEQatNOtbPOaLLam"
    
  • 扣加密函数的时候最好用源文件来扣, 我们自己还原的文件可能会有略微差异, 也就是说我们还原的文件只适合参考

  • 混淆变量的函数可能不唯一, 导致了结果不同

函数角度调用加密函数

  • 扣函数的要求
    • 熟悉全部参数获取流程, 加工流程, 加密流程;
    • 工作量非常大;

对象角度调用加密函数

  • AntiContent生成函数At的环境和调用c.encode的环境是不一样的

    • At

      控制anti_content生成的流程

    • c

      实际加密, 加工参数的对象, 里面有各种加密函数

    • Lt

      初始化参数中的一些时间戳

  • 找到两者作用域的合集fbeZ

  • 补全fbez所需要的参数, 并调用fbez

  • 对比真实环境和我们node环境下上下文环境是否一致

  • 将需要的window环境和document环境补全

    • 复制特殊对象

      d = {}
      for (let key in window.navigator){d[key] = window.navigator[key]}
      

      封装getAntiContent函数

搭建Node服务

  • 安装环境

    npm install express     //服务框架
    npm install body-parser // 解析库
    
  • 启动服务

    const express = require('express');
    const bodyParser = require("body-parser");
    const getAntiContent = require("./obj_anti_content").getAntiContentconst app = express()
    app.use(bodyParser.json({limit: '50mb'}))
    app.use(bodyParser.urlencoded({ extend: true, limit: '50mb'}))app.post("/anti_content", function (req, res){...
    })const server = app.listen(1111, function (){let host = server.address().address;let port = server.address().port;console.log("Server is running at http: //%s: %s", host, port)
    })
    

Python模拟请求

  • 传递给node服务的参数, 如果是[]会被node服务解析json数据格式的时候忽略掉;
    • 需要将传递的鼠标事件通过json.dumps转为json数据格式传递
    • 相应的, node服务中getAnticontent需要使用JSON.parse解析json数据格式
    • 参数传递过程中整数类型会被转变为字符串, 需要通过parseInt转变为整数
  • Python时间戳是秒, JS时间戳是毫秒
  • 请求次数requestTimes和当前page是有关系的, 不可以随便给, 当前`requestTime >= page

相关内容

热门资讯

埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...