当前位置: 首页 > news >正文

逆向案例二十八——红某点集登录接口逆向序

网址:aHR0cHM6Ly93d3cuaHJkanl1bi5jb20vIy9sb2dpbj9yZWRpcmVjdD0lMkZyZWFsVGltZUxpdmluZw==

登录接口,发现两个参数加密,分别是pwd和sig,t很明显是时间戳。

观察pwd,发现很像md5加密,我输入的密码是123456,在在线加密网站加密,发现果然如此。

但是这次采用扣代码来解决,不用标准库。

 

参数没有特点,搜索是很难搜的,采用跟栈方法。

 还是跟之前一样,点击第一个,在send处打断点,点击登录,前三个是发包,一般不在里面吗加密。

现在就是判断是不是在异步里面加密的,如何判断呢, 进入异步s.requests处,在常见位置打上断点。在控制台打印e,进入第一个函数在return处打上断点,看加密了吗?若是加密了,则并不是在异步中加密的。

 

发现进入异步的第一个函数接受的参数已经是经过加密的数据,因此跳过异步。 

 

进入下一个栈,G栈,在u处打上断点,释放其他断点,点击登录

看l = l = Object(g["a"])(H(S(e)))就是sig的加密位置,Object(g["a"])代码的意思就是调用g中的a方法。相当于g["a"](H(S(e)),但是这里存在变量污染,传入的参数s不应该含有加密后的sig,所以在前面打上断点,可以更好确定传入的参数是什么形式的。

 

在这里打上断定,var t = n.split("/") ,再点击跳过下一个函数执行,一步步执行到sig的加密位置。

这时候的传入的参数为e

 

t由s赋值,s由函数 s = (new Date).getTime();赋值

那么现在还是要先破解pwd是怎么加密的。

先找到pwd的加密位置。由于传入function G(n,e)中的e已经有加密后的pwd了,所以继续往前跟栈。

pwd由pwd: Object(E["a"])(t.loginForm.password)赋值,相当于E["a"](t.loginForm.password),其中t.loginForm.password是密码'123456'

 

进入E['a']发现是它,复制到pycharm中,传入的n就是密码,运行会发现缺少c,就在前面找c,然后复制

 

 

c在哪里,就在这个函数附近。然后运行发现没有o,接着复制一步一步来,最后直到成功。

 

完整代码:

var a=0;
function i(n) {return c(o(s(n)))
};
function c(n) {for (var e, t = a ? "0123456789ABCDEF" : "0123456789abcdef", i = "", o = 0; o < n.length; o++)e = n.charCodeAt(o),i += t.charAt(e >>> 4 & 15) + t.charAt(15 & e);return i};
function o(n) {return r(d(l(n), 8 * n.length))};
function s(n) {var e, t, a = "", i = -1;while (++i < n.length)e = n.charCodeAt(i),t = i + 1 < n.length ? n.charCodeAt(i + 1) : 0,55296 <= e && e <= 56319 && 56320 <= t && t <= 57343 && (e = 65536 + ((1023 & e) << 10) + (1023 & t),i++),e <= 127 ? a += String.fromCharCode(e) : e <= 2047 ? a += String.fromCharCode(192 | e >>> 6 & 31, 128 | 63 & e) : e <= 65535 ? a += String.fromCharCode(224 | e >>> 12 & 15, 128 | e >>> 6 & 63, 128 | 63 & e) : e <= 2097151 && (a += String.fromCharCode(240 | e >>> 18 & 7, 128 | e >>> 12 & 63, 128 | e >>> 6 & 63, 128 | 63 & e));return a};
function r(n) {for (var e = "", t = 0; t < 32 * n.length; t += 8)e += String.fromCharCode(n[t >> 5] >>> t % 32 & 255);return e};
function d(n, e) {n[e >> 5] |= 128 << e % 32,n[14 + (e + 64 >>> 9 << 4)] = e;for (var t = 1732584193, a = -271733879, i = -1732584194, o = 271733878, c = 0; c < n.length; c += 16) {var s = t, l = a, r = i, d = o;t = h(t, a, i, o, n[c + 0], 7, -680876936),o = h(o, t, a, i, n[c + 1], 12, -389564586),i = h(i, o, t, a, n[c + 2], 17, 606105819),a = h(a, i, o, t, n[c + 3], 22, -1044525330),t = h(t, a, i, o, n[c + 4], 7, -176418897),o = h(o, t, a, i, n[c + 5], 12, 1200080426),i = h(i, o, t, a, n[c + 6], 17, -1473231341),a = h(a, i, o, t, n[c + 7], 22, -45705983),t = h(t, a, i, o, n[c + 8], 7, 1770035416),o = h(o, t, a, i, n[c + 9], 12, -1958414417),i = h(i, o, t, a, n[c + 10], 17, -42063),a = h(a, i, o, t, n[c + 11], 22, -1990404162),t = h(t, a, i, o, n[c + 12], 7, 1804603682),o = h(o, t, a, i, n[c + 13], 12, -40341101),i = h(i, o, t, a, n[c + 14], 17, -1502002290),a = h(a, i, o, t, n[c + 15], 22, 1236535329),t = m(t, a, i, o, n[c + 1], 5, -165796510),o = m(o, t, a, i, n[c + 6], 9, -1069501632),i = m(i, o, t, a, n[c + 11], 14, 643717713),a = m(a, i, o, t, n[c + 0], 20, -373897302),t = m(t, a, i, o, n[c + 5], 5, -701558691),o = m(o, t, a, i, n[c + 10], 9, 38016083),i = m(i, o, t, a, n[c + 15], 14, -660478335),a = m(a, i, o, t, n[c + 4], 20, -405537848),t = m(t, a, i, o, n[c + 9], 5, 568446438),o = m(o, t, a, i, n[c + 14], 9, -1019803690),i = m(i, o, t, a, n[c + 3], 14, -187363961),a = m(a, i, o, t, n[c + 8], 20, 1163531501),t = m(t, a, i, o, n[c + 13], 5, -1444681467),o = m(o, t, a, i, n[c + 2], 9, -51403784),i = m(i, o, t, a, n[c + 7], 14, 1735328473),a = m(a, i, o, t, n[c + 12], 20, -1926607734),t = A(t, a, i, o, n[c + 5], 4, -378558),o = A(o, t, a, i, n[c + 8], 11, -2022574463),i = A(i, o, t, a, n[c + 11], 16, 1839030562),a = A(a, i, o, t, n[c + 14], 23, -35309556),t = A(t, a, i, o, n[c + 1], 4, -1530992060),o = A(o, t, a, i, n[c + 4], 11, 1272893353),i = A(i, o, t, a, n[c + 7], 16, -155497632),a = A(a, i, o, t, n[c + 10], 23, -1094730640),t = A(t, a, i, o, n[c + 13], 4, 681279174),o = A(o, t, a, i, n[c + 0], 11, -358537222),i = A(i, o, t, a, n[c + 3], 16, -722521979),a = A(a, i, o, t, n[c + 6], 23, 76029189),t = A(t, a, i, o, n[c + 9], 4, -640364487),o = A(o, t, a, i, n[c + 12], 11, -421815835),i = A(i, o, t, a, n[c + 15], 16, 530742520),a = A(a, i, o, t, n[c + 2], 23, -995338651),t = p(t, a, i, o, n[c + 0], 6, -198630844),o = p(o, t, a, i, n[c + 7], 10, 1126891415),i = p(i, o, t, a, n[c + 14], 15, -1416354905),a = p(a, i, o, t, n[c + 5], 21, -57434055),t = p(t, a, i, o, n[c + 12], 6, 1700485571),o = p(o, t, a, i, n[c + 3], 10, -1894986606),i = p(i, o, t, a, n[c + 10], 15, -1051523),a = p(a, i, o, t, n[c + 1], 21, -2054922799),t = p(t, a, i, o, n[c + 8], 6, 1873313359),o = p(o, t, a, i, n[c + 15], 10, -30611744),i = p(i, o, t, a, n[c + 6], 15, -1560198380),a = p(a, i, o, t, n[c + 13], 21, 1309151649),t = p(t, a, i, o, n[c + 4], 6, -145523070),o = p(o, t, a, i, n[c + 11], 10, -1120210379),i = p(i, o, t, a, n[c + 2], 15, 718787259),a = p(a, i, o, t, n[c + 9], 21, -343485551),t = f(t, s),a = f(a, l),i = f(i, r),o = f(o, d)}return Array(t, a, i, o)};
function l(n) {for (var e = Array(n.length >> 2), t = 0; t < e.length; t++)e[t] = 0;for (t = 0; t < 8 * n.length; t += 8)e[t >> 5] |= (255 & n.charCodeAt(t / 8)) << t % 32;return e};
function h(n, e, t, a, i, o, c) {return u(e & t | ~e & a, n, e, i, o, c)};
function f(n, e) {var t = (65535 & n) + (65535 & e), a = (n >> 16) + (e >> 16) + (t >> 16);return a << 16 | 65535 & t};
function g(n, e) {return n << e | n >>> 32 - e};
function m(n, e, t, a, i, o, c) {return u(e & a | t & ~a, n, e, i, o, c)};
function A(n, e, t, a, i, o, c) {return u(e ^ t ^ a, n, e, i, o, c)};
function p(n, e, t, a, i, o, c) {return u(t ^ (e | ~a), n, e, i, o, c)};function u(n, e, t, a, i, o) {return f(g(f(f(e, n), f(a, o)), i), t)}console.log(i('123456'))

运行结果

 

看复制的代码的位置,其实就是'87ff'中的绝大部分代码块,之所以不用webpack是因为'87ff'没有调用其他的模块,所以直接扣就可以。

 

现在处理sig怎么加密的,先生成e,跟上面的步骤一样来。

然后开始写 

 g["a"](H(S(e)),回到G栈,找到S函数,H函数,g['a']函数。并复制

它们分别为

 

 

g.a其实就是i函数。最后结果。

 

最终代码:

var a = 0;function p(n, e, t, a, i, o, c) {return u(t ^ (e | ~a), n, e, i, o, c)
};function A(n, e, t, a, i, o, c) {return u(e ^ t ^ a, n, e, i, o, c)
};function m(n, e, t, a, i, o, c) {return u(e & a | t & ~a, n, e, i, o, c)
};function g(n, e) {return n << e | n >>> 32 - e
};function f(n, e) {var t = (65535 & n) + (65535 & e), a = (n >> 16) + (e >> 16) + (t >> 16);return a << 16 | 65535 & t
};function u(n, e, t, a, i, o) {return f(g(f(f(e, n), f(a, o)), i), t)
};function h(n, e, t, a, i, o, c) {return u(e & t | ~e & a, n, e, i, o, c)
};function l(n) {for (var e = Array(n.length >> 2), t = 0; t < e.length; t++)e[t] = 0;for (t = 0; t < 8 * n.length; t += 8)e[t >> 5] |= (255 & n.charCodeAt(t / 8)) << t % 32;return e
};function d(n, e) {n[e >> 5] |= 128 << e % 32,n[14 + (e + 64 >>> 9 << 4)] = e;for (var t = 1732584193, a = -271733879, i = -1732584194, o = 271733878, c = 0; c < n.length; c += 16) {var s = t, l = a, r = i, d = o;t = h(t, a, i, o, n[c + 0], 7, -680876936),o = h(o, t, a, i, n[c + 1], 12, -389564586),i = h(i, o, t, a, n[c + 2], 17, 606105819),a = h(a, i, o, t, n[c + 3], 22, -1044525330),t = h(t, a, i, o, n[c + 4], 7, -176418897),o = h(o, t, a, i, n[c + 5], 12, 1200080426),i = h(i, o, t, a, n[c + 6], 17, -1473231341),a = h(a, i, o, t, n[c + 7], 22, -45705983),t = h(t, a, i, o, n[c + 8], 7, 1770035416),o = h(o, t, a, i, n[c + 9], 12, -1958414417),i = h(i, o, t, a, n[c + 10], 17, -42063),a = h(a, i, o, t, n[c + 11], 22, -1990404162),t = h(t, a, i, o, n[c + 12], 7, 1804603682),o = h(o, t, a, i, n[c + 13], 12, -40341101),i = h(i, o, t, a, n[c + 14], 17, -1502002290),a = h(a, i, o, t, n[c + 15], 22, 1236535329),t = m(t, a, i, o, n[c + 1], 5, -165796510),o = m(o, t, a, i, n[c + 6], 9, -1069501632),i = m(i, o, t, a, n[c + 11], 14, 643717713),a = m(a, i, o, t, n[c + 0], 20, -373897302),t = m(t, a, i, o, n[c + 5], 5, -701558691),o = m(o, t, a, i, n[c + 10], 9, 38016083),i = m(i, o, t, a, n[c + 15], 14, -660478335),a = m(a, i, o, t, n[c + 4], 20, -405537848),t = m(t, a, i, o, n[c + 9], 5, 568446438),o = m(o, t, a, i, n[c + 14], 9, -1019803690),i = m(i, o, t, a, n[c + 3], 14, -187363961),a = m(a, i, o, t, n[c + 8], 20, 1163531501),t = m(t, a, i, o, n[c + 13], 5, -1444681467),o = m(o, t, a, i, n[c + 2], 9, -51403784),i = m(i, o, t, a, n[c + 7], 14, 1735328473),a = m(a, i, o, t, n[c + 12], 20, -1926607734),t = A(t, a, i, o, n[c + 5], 4, -378558),o = A(o, t, a, i, n[c + 8], 11, -2022574463),i = A(i, o, t, a, n[c + 11], 16, 1839030562),a = A(a, i, o, t, n[c + 14], 23, -35309556),t = A(t, a, i, o, n[c + 1], 4, -1530992060),o = A(o, t, a, i, n[c + 4], 11, 1272893353),i = A(i, o, t, a, n[c + 7], 16, -155497632),a = A(a, i, o, t, n[c + 10], 23, -1094730640),t = A(t, a, i, o, n[c + 13], 4, 681279174),o = A(o, t, a, i, n[c + 0], 11, -358537222),i = A(i, o, t, a, n[c + 3], 16, -722521979),a = A(a, i, o, t, n[c + 6], 23, 76029189),t = A(t, a, i, o, n[c + 9], 4, -640364487),o = A(o, t, a, i, n[c + 12], 11, -421815835),i = A(i, o, t, a, n[c + 15], 16, 530742520),a = A(a, i, o, t, n[c + 2], 23, -995338651),t = p(t, a, i, o, n[c + 0], 6, -198630844),o = p(o, t, a, i, n[c + 7], 10, 1126891415),i = p(i, o, t, a, n[c + 14], 15, -1416354905),a = p(a, i, o, t, n[c + 5], 21, -57434055),t = p(t, a, i, o, n[c + 12], 6, 1700485571),o = p(o, t, a, i, n[c + 3], 10, -1894986606),i = p(i, o, t, a, n[c + 10], 15, -1051523),a = p(a, i, o, t, n[c + 1], 21, -2054922799),t = p(t, a, i, o, n[c + 8], 6, 1873313359),o = p(o, t, a, i, n[c + 15], 10, -30611744),i = p(i, o, t, a, n[c + 6], 15, -1560198380),a = p(a, i, o, t, n[c + 13], 21, 1309151649),t = p(t, a, i, o, n[c + 4], 6, -145523070),o = p(o, t, a, i, n[c + 11], 10, -1120210379),i = p(i, o, t, a, n[c + 2], 15, 718787259),a = p(a, i, o, t, n[c + 9], 21, -343485551),t = f(t, s),a = f(a, l),i = f(i, r),o = f(o, d)}return Array(t, a, i, o)
};function r(n) {for (var e = "", t = 0; t < 32 * n.length; t += 8)e += String.fromCharCode(n[t >> 5] >>> t % 32 & 255);return e
};function c(n) {for (var e, t = a ? "0123456789ABCDEF" : "0123456789abcdef", i = "", o = 0; o < n.length; o++)e = n.charCodeAt(o),i += t.charAt(e >>> 4 & 15) + t.charAt(15 & e);return i
};function o(n) {return r(d(l(n), 8 * n.length))
};function i(n) {return c(o(s(n)))
};function s(n) {var e, t, a = "", i = -1;while (++i < n.length)e = n.charCodeAt(i),t = i + 1 < n.length ? n.charCodeAt(i + 1) : 0,55296 <= e && e <= 56319 && 56320 <= t && t <= 57343 && (e = 65536 + ((1023 & e) << 10) + (1023 & t),i++),e <= 127 ? a += String.fromCharCode(e) : e <= 2047 ? a += String.fromCharCode(192 | e >>> 6 & 31, 128 | 63 & e) : e <= 65535 ? a += String.fromCharCode(224 | e >>> 12 & 15, 128 | e >>> 6 & 63, 128 | 63 & e) : e <= 2097151 && (a += String.fromCharCode(240 | e >>> 18 & 7, 128 | e >>> 12 & 63, 128 | e >>> 6 & 63, 128 | 63 & e));return a
};function H(n) {var e = [], t = "";for (var a in n)e.push(n[a]);for (var i = 0; i < e.length; i++)t += e[i] + "";return t += "JzyqgcoojMiQNuQoTlbR5EBT8TsqzJ",t
};function S(n) {for (var e = Object.keys(n).sort(), t = {}, a = 0; a < e.length; a++)t[e[a]] = n[e[a]];return t
};password = '123456'
phoneNum = "18720180853"
function get_info(phoneNum,password){pwd = i(password)e = {"phoneNum": phoneNum,"pwd": pwd,"t": (new Date).getTime(),"tenant": 1,}// console.log(i(password))sig = i(H(S(e)))return [pwd,sig,e.t]
}
console.log(get_info(phoneNum,password))

用python调用访问代码: 

import requests
import execjs
f = open('红人点集.js','r',encoding='utf-8').read()
json_code = execjs.compile(f)
data = json_code.call('get_info','18720180853','123456')
print(data)
headers = {'Accept': 'application/json, text/plain, */*','Accept-Language': 'zh-CN,zh;q=0.9','Cache-Control': 'no-cache','Connection': 'keep-alive','Content-Type': 'application/json','Origin': 'https://www.hrdjyun.com','Pragma': 'no-cache','Sec-Fetch-Dest': 'empty','Sec-Fetch-Mode': 'cors','Sec-Fetch-Site': 'same-site','User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36','sec-ch-ua': '"Not_A Brand";v="8", "Chromium";v="120", "Google Chrome";v="120"','sec-ch-ua-mobile': '?0','sec-ch-ua-platform': '"Windows"',
}json_data = {'phoneNum': '18720180853','pwd': data[0],'t': data[2],'tenant': 1,'sig': data[1],
}response = requests.post('https://user.hrdjyun.com/wechat/phonePwdLogin', headers=headers, json=json_data)
print(response.json())

 

 

 

 

 

 

相关文章:

逆向案例二十八——红某点集登录接口逆向序

网址&#xff1a;aHR0cHM6Ly93d3cuaHJkanl1bi5jb20vIy9sb2dpbj9yZWRpcmVjdD0lMkZyZWFsVGltZUxpdmluZw 登录接口&#xff0c;发现两个参数加密&#xff0c;分别是pwd和sig,t很明显是时间戳。 观察pwd,发现很像md5加密&#xff0c;我输入的密码是123456&#xff0c;在在线加密网…...

我的创作纪念日20240418

机缘 我的技术博客起源于对编程的深深热爱和对知识的渴望。从一开始&#xff0c;我就被编程世界的无限可能所吸引&#xff0c;而这种热情也推动我开始了技术创作之旅。我创建博客的初衷有以下几点&#xff1a; 分享实战经验&#xff1a;在工作中&#xff0c;我遇到了许多技术…...

计算机视觉入门

计算机视觉是人工智能的一个分支&#xff0c;它涉及研究如何使计算机能够理解和解释图像和视频中的视觉信息。这个领域结合了计算机科学、工程学、神经科学和认知科学等多个学科的知识。以下是计算机视觉入门的一些关键点&#xff1a; 1. 基础概念 - **图像处理**&#xff1a;对…...

CTFHUB-技能树-Web前置技能-文件上传(前端验证—MIME绕过、00截断、00截断-双写后缀)

CTFHUB-技能树-Web前置技能-文件上传&#xff08;前端验证—MIME绕过、00截断、00截断-双写后缀&#xff09; 文章目录 CTFHUB-技能树-Web前置技能-文件上传&#xff08;前端验证—MIME绕过、00截断、00截断-双写后缀&#xff09;前端验证—MIME绕过有关MIMEMIME的作用 解题时有…...

Java面试题笔记(持续更新)

Java基础 java中的Math.round(-1.5)等于多少&#xff1f; Math的round方法是四舍五入,如果参数是负数,则往大的数如,Math.round(-1.5)-1&#xff0c;如果是Math.round(1.5)则结果为2 JDK和JRE的区别&#xff1f; JDK 是 Java Development ToolKit 的简称&#xff0c;也就是…...

格式化字符串漏洞学习笔记

简单介绍 格式化字符串漏洞和栈溢出有相似之处&#xff0c;但又有所不同&#xff0c;都是利用了程序员的疏忽大意来改变程序运行的正常流程。 1、格式化字符串的介绍 printf()、fprint()等print&#xff08;&#xff09;系列的函数可以按照一定的格式将数据进行输出。 实例…...

用友NC avatar接口文件上传漏洞

产品简介 用友NC是一款企业级ERP软件。作为一种信息化管理工具&#xff0c;用友NC提供了一系列业务管理模块&#xff0c;包括财务会计、采购管理销售管理、物料管理、生产计划和人力资源管理等&#xff0c;帮助企业实现数字化转型和高效管理。 漏洞介绍 用友 NC avatar接口处…...

【Go语言快速上手(二)】 分支与循环函数讲解

&#x1f493;博主CSDN主页:杭电码农-NEO&#x1f493;   ⏩专栏分类:Go语言专栏⏪   &#x1f69a;代码仓库:NEO的学习日记&#x1f69a;   &#x1f339;关注我&#x1faf5;带你学习更多Go语言知识   &#x1f51d;&#x1f51d; Go快速上手 1. 前言2. 分支与循环2.1…...

动手写sql 《牛客网80道sql》

第1章&#xff1a;SQL编写基础逻辑和常见问题 基础逻辑 SELECT语句: 选择数据表中的列。FROM语句: 指定查询将要从哪个表中检索数据。WHERE语句: 过滤条件&#xff0c;用于提取满足特定条件的记录。GROUP BY语句: 对结果进行分组。HAVING语句: 对分组后的结果进行条件过滤。O…...

Node.js、Java、Python、PHP在构建BS系统时的特点比较

在现代软件开发领域&#xff0c;构建一个稳定、高效的B/S&#xff08;浏览器/服务器&#xff09;系统对于企业的信息化发展至关重要。Node.js、Java、Python和PHP是当下流行的几种后端开发技术&#xff0c;它们各自具有独特的特点和优势。本文将对这几种技术在构建B/S系统时的特…...

快速入门深度学习9.1(用时20min)——GRU

速通《动手学深度学习》9.1 写在最前面九、现代循环神经网络9.1 门控循环单元&#xff08;GRU&#xff09;9.1.1. 门控隐状态9.1.1.1. 重置门和更新门9.1.1.2. 候选隐状态9.1.1.3. 隐状态 9.1.3 API简洁实现小结 &#x1f308;你好呀&#xff01;我是 是Yu欸 &#x1f30c; 20…...

基于51单片机的步进电机调速系统设计

基于51单片机的步进电机调速系统 &#xff08;仿真&#xff0b;程序&#xff0b;原理图&#xff0b;设计报告&#xff09; 功能介绍 具体功能&#xff1a; 1.按键可以控制电机正、反转&#xff0c;加、减速&#xff0c;停止&#xff1b; 2.一位7段数码管实时显示档位&#xf…...

postcss概述

PostCSS是一个用于转换CSS的工具&#xff0c;它使用插件来处理CSS&#xff0c;并提供了一种方式来编写可扩展的CSS代码。其主要特点如下&#xff1a; 插件驱动&#xff1a;PostCSS的核心非常轻量级&#xff0c;大部分功能都是通过插件来实现的。这意味着用户可以根据项目的需求…...

【Proteus】51单片机对直流电机的控制

直流电机&#xff1a;输出或输入为直流电能的旋转电机。能实现直流电能和机械能互相转换的电机。把它作电动机运行时是直流电动机&#xff0c;电能转换为机械能&#xff1b;作发电机运行时是直流发电机&#xff0c;机 械能转换为电能。 直流电机的控制&#xff1a; 1、方向控制…...

JET毛选学习笔记:如何利用《实践论》学习实验

一、个人背景介绍 本人本科读的是预防医学专业&#xff08;因为没考上临床&#xff09;&#xff0c;硕博连读&#xff08;报名人少&#xff0c;我报了就得了&#xff09;的时候专业是流行病与卫生统计学&#xff0c;除了学习流行病学、统计学&#xff08;忘得差不多了&#xf…...

FinalShell 远程连接 Linux(Ubuntu)系统

Linux 系列教程&#xff1a; VMware 安装配置 Ubuntu&#xff08;最新版、超详细&#xff09;FinalShell 远程连接 Linux&#xff08;Ubuntu&#xff09;系统Ubuntu 系统安装 VS Code 并配置 C 环境 ➡️➡️➡️提出一个问题&#xff1a;为什么使用 FinalShell 连接&#xff0…...

Python零基础从小白打怪升级中~~~~~~~多线程

线程安全和锁 一、全局解释器锁 首先需要明确的一点是GIL并不是Python的特性&#xff0c;它是在实现Python解析器(CPython)时所引入的一个概念。 GIL全称global interpreter lock&#xff0c;全局解释器锁。 每个线程在执行的时候都需要先获取GIL&#xff0c;保证同一时刻只…...

【机器学习300问】67、均方误差与交叉熵误差,两种损失函数的区别?

一、均方误差&#xff08;Mean Squared Error, MSE&#xff09; 假设你是一个教练&#xff0c;在指导学生射箭。每次射箭后&#xff0c;你可以测量子弹的落点距离靶心的差距&#xff08;误差&#xff09;。MSE就像是计算所以射击误差的平方后的平均值。它强调了每一次偏离靶心的…...

SAP打印输出设置

SAP打印输入有很多方式&#xff0c;适合不同的应用场景。 一.打印输出总体概览图 二.前台打印 这个是比较常见的&#xff0c;前端打印的出现减轻了管理员的工作量&#xff0c;用户可以选择自己电脑上的打印机输出&#xff0c;不需要所有打印机都在SAP平台中进行配置&#xff0…...

qt对json文件下,qdatetime时间的正确读写方式

qt 对json文件下qdatetime时间的正确读写方式 被搞了很长时间&#xff0c;最后发现是需要控制格式。 正确方式 // read QByteArray localBytes mapJson["playTime"].toString().toLocal8Bit(); char* char_time localBytes.data(); std::string str_time char_…...

边缘计算医疗风险自查APP开发方案

核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...

如何在看板中有效管理突发紧急任务

在看板中有效管理突发紧急任务需要&#xff1a;设立专门的紧急任务通道、重新调整任务优先级、保持适度的WIP&#xff08;Work-in-Progress&#xff09;弹性、优化任务处理流程、提高团队应对突发情况的敏捷性。其中&#xff0c;设立专门的紧急任务通道尤为重要&#xff0c;这能…...

Python爬虫(二):爬虫完整流程

爬虫完整流程详解&#xff08;7大核心步骤实战技巧&#xff09; 一、爬虫完整工作流程 以下是爬虫开发的完整流程&#xff0c;我将结合具体技术点和实战经验展开说明&#xff1a; 1. 目标分析与前期准备 网站技术分析&#xff1a; 使用浏览器开发者工具&#xff08;F12&…...

前端开发面试题总结-JavaScript篇(一)

文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包&#xff08;Closure&#xff09;&#xff1f;闭包有什么应用场景和潜在问题&#xff1f;2.解释 JavaScript 的作用域链&#xff08;Scope Chain&#xff09; 二、原型与继承3.原型链是什么&#xff1f;如何实现继承&a…...

根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:

根据万维钢精英日课6的内容&#xff0c;使用AI&#xff08;2025&#xff09;可以参考以下方法&#xff1a; 四个洞见 模型已经比人聪明&#xff1a;以ChatGPT o3为代表的AI非常强大&#xff0c;能运用高级理论解释道理、引用最新学术论文&#xff0c;生成对顶尖科学家都有用的…...

JVM暂停(Stop-The-World,STW)的原因分类及对应排查方案

JVM暂停(Stop-The-World,STW)的完整原因分类及对应排查方案,结合JVM运行机制和常见故障场景整理而成: 一、GC相关暂停​​ 1. ​​安全点(Safepoint)阻塞​​ ​​现象​​:JVM暂停但无GC日志,日志显示No GCs detected。​​原因​​:JVM等待所有线程进入安全点(如…...

网站指纹识别

网站指纹识别 网站的最基本组成&#xff1a;服务器&#xff08;操作系统&#xff09;、中间件&#xff08;web容器&#xff09;、脚本语言、数据厍 为什么要了解这些&#xff1f;举个例子&#xff1a;发现了一个文件读取漏洞&#xff0c;我们需要读/etc/passwd&#xff0c;如…...

基于IDIG-GAN的小样本电机轴承故障诊断

目录 🔍 核心问题 一、IDIG-GAN模型原理 1. 整体架构 2. 核心创新点 (1) ​梯度归一化(Gradient Normalization)​​ (2) ​判别器梯度间隙正则化(Discriminator Gradient Gap Regularization)​​ (3) ​自注意力机制(Self-Attention)​​ 3. 完整损失函数 二…...

2025年渗透测试面试题总结-腾讯[实习]科恩实验室-安全工程师(题目+回答)

安全领域各种资源&#xff0c;学习文档&#xff0c;以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具&#xff0c;欢迎关注。 目录 腾讯[实习]科恩实验室-安全工程师 一、网络与协议 1. TCP三次握手 2. SYN扫描原理 3. HTTPS证书机制 二…...

Spring Boot + MyBatis 集成支付宝支付流程

Spring Boot MyBatis 集成支付宝支付流程 核心流程 商户系统生成订单调用支付宝创建预支付订单用户跳转支付宝完成支付支付宝异步通知支付结果商户处理支付结果更新订单状态支付宝同步跳转回商户页面 代码实现示例&#xff08;电脑网站支付&#xff09; 1. 添加依赖 <!…...