百度post参数分析(二)完结,dv、traceid的js来源
2019-01-08 11:14
204 查看
上一篇已经找到了post参数中的dv来源,今天继续往下看,回顾一上一篇中dv的相关js
v 4000 ar a = document.getElementById("dv_Input") , c = { gid: n.guideRandom || "", username: n._SBCtoDBC(i.value), countrycode: s, bdstoken: n.bdPsWtoken, tpl: n.config.product ? n.config.product : "", vcodestr: n.getElement("smsHiddenFields_smsVcodestr").value, vcodesign: n.getElement("smsHiddenFields_smsVcodesign").value, verifycode: n._SBCtoDBC(n.getElement("confirmVerifyCode").value), flag_code: n.config.voice_sms_flag, dv: a ? a.value : window.LG_DV_ARG && window.LG_DV_ARG.dvjsInput || "" }
dv来源window.LG_DV_ARG.dvjsInput,然后继续往下找LG_DV_ARG
function d(e) { M && (x = e.token + "@" + S(e, e.token), (1 & F.SendMethod) > 0 && c(x)) } function c(n) { var r = t.getElementById("dv_Input"); r && (r.value = n), e.LG_DV_ARG.dvjsInput = n }
其中重要只有x = e.token + “@” + S(e, e.token)
继续找到e.token的生成函数和S函数的源码
b.Token = "tk" + Math.random() + (new Date).getTime(),
function S(e, t) { var r = new n(t) , o = { flashInfo: 0, mouseDown: 1, keyDown: 2, mouseMove: 3, version: 4, loadTime: 5, browserInfo: 6, token: 7, location: 8, screenInfo: 9 } , a = [r.iary([2])]; for (var i in e) { var d = e[i]; if (void 0 !== d && void 0 !== o[i]) { var c; "number" == typeof d ? (c = d >= 0 ? 1 : 2, d = r.int(d)) : "boolean" == typeof d ? (c = 3, d = r.int(d ? 1 : 0)) : "object" == typeof d && d instanceof Array ? (c = 4, d = r.bary(d)) : (c = 0, d = r.str(d + "")), d && a.push(r.iary([o[i], c, d.length]) + d) } } return a.join("") }
e.token生成很简单,就是随机数加上时间戳;s函数的作用就是拼接e对象里面的几个属性值,我们可以用一个固定值代替s函数的执行结果。
traceid
继续全局查找traceid只有下面js函数可疑,先看看
e.traceID = { headID: e.traceID && e.traceID.headID || "", flowID: e.traceID && e.traceID.flowID || "", cases: e.traceID && e.traceID.cases || "", initTraceID: function(e) { var t = this; e && e.length > 0 ? (t.headID = e.slice(0, 6), t.flowID = e.slice(6, 8)) : t.destory() }, createTraceID: function() { var e = this; return e.headID + e.flowID + e.cases }, startFlow: function(e) { var t = this , n = t.getFlowID(e); 0 === t.flowID.length || t.flowID === n ? (t.createHeadID(), t.flowID = n) : t.finishFlow(n) }, finishFlow: function() { var e = this; e.destory() }, getRandom: function() { return parseInt(90 * Math.random() + 10, 10) }, createHeadID: function() { var e = this , t = (new Date).getTime() + e.getRandom().toString() , n = Number(t).toString(16) , i = n.length , s = n.slice(i - 6, i).toUpperCase(); e.headID = s }, getTraceID: function(e) { var t = this , n = e && e.traceid || ""; t.initTraceID(n) }, getFlowID: function(e) { var t = { login: "01", reg: "02" }; return t[e] }, setData: function(e) { var t = this; return e.data ? e.data.traceid = t.createTraceID() : e.url = e.url + (e.url.indexOf("?") > -1 ? "&" : "?") + "traceid=" + t.createTraceID(), e }, destory: function() { var e = this; e.headID = "", e.flowID = "" } };
createTraceID:return e.headID + e.flowID + e.cases其中e.case是固定的01,e.headID+e.flowID需要按下面js执行
e.traceID.initTraceID() undefined e.traceID.createHeadID() undefined e.traceID.createTraceID() "C23F67"
但是注意e对象定义的时候应该给他赋值,不然返回是空,完整如下
var e = {a: 1, b: 1, c: 1} e.traceID = { headID: e.traceID && e.traceID.headID || "", flowID: e.traceID && e.traceID.flowID || "", cases: e.traceID && e.traceID.cases || "", initTraceID: function(e) { var t = this; e && e.length > 0 ? (t.headID = e.slice(0, 6), t.flowID = e.slice(6, 8)) : t.destory() }, 省略········ getFlowID: function(e) { var t = { login: "01", reg: "02" }; return t[e] }, setData: function(e) { var t = this; return e.data ? e.data.traceid = t.createTraceID() : e.url = e.url + (e.url.indexOf("?") > -1 ? "&" : "?") + "traceid=" + t.createTraceID(), e }, destory: function() { var e = this; e.headID = "", e.flowID = "" } }; {headID: "", flowID: "", cases: "", initTraceID: ƒ, createTraceID: ƒ, …} e {a: 1, b: 1, c: 1, traceID: {…}} e.traceID.initTraceID ƒ (e) { var t = this; e && e.length > 0 ? (t.headID = e.slice(0, 6), t.flowID = e.slice(6, 8)) : t.destory() } e.traceID.initTraceID() undefined e.traceID.createHeadID() undefined e.traceID.createTraceID()+"01" "C23F6701"
至于密码的RSA算法的js分析就不理了,到此百度post的参数分析就完结了。文章是边分析边写,可能有些地方有点混乱,在后面如果有时间的话会在完整是重塑一遍,并用Python完整实现登陆。
ID:Python之战
|作|者|公(zhong)号:python之战
专注Python,专注于网络爬虫、RPA的学习-践行-总结
喜欢研究技术瓶颈并分享,欢迎围观,共同学习。
独学而无友,则孤陋而寡闻!
相关文章推荐
- 58同城post登陆参数分析,典型的eval加密js案例
- 深入分析request_irq的dev_id参数作用
- tomcat的acess_log打印post请求参数,分析日志
- Android:分析onXXX事件监听器中的两个参数position和id
- Android 分析监听器上的参数position和id(一)
- AngularJS $http post 传递参数数据的方法
- JS使用JSON作为参数实例分析
- JS获取url参数,JS发送json格式的POST请求方法
- (转)深入分析request_irq的dev_id参数作用
- Js从头学起(基本数据类型和引用类型的参数传递详细分析)
- Nodejs express 获取url参数,post参数的三种方式
- JS隐藏参数post传值实例
- 深入分析request_irq的dev_id参数作用 转
- node.js 下依赖Express 实现post 4种方式提交参数
- 对于携带请求参数的HttpGet与的HttpPost两种请求方式,代码段分析
- Android 分析监听器上的参数position和id(一)
- 前端js再新窗口打开页面,以post传递参数方式
- js通过正表达式获取链接参数id
- 深入分析request_irq的dev_id参数作用
- 在Js页面通过POST传递参数跳转到新页面详解