逆向案例二十八——红某点集登录接口逆向序
网址: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())
相关文章:
逆向案例二十八——红某点集登录接口逆向序
网址:aHR0cHM6Ly93d3cuaHJkanl1bi5jb20vIy9sb2dpbj9yZWRpcmVjdD0lMkZyZWFsVGltZUxpdmluZw 登录接口,发现两个参数加密,分别是pwd和sig,t很明显是时间戳。 观察pwd,发现很像md5加密,我输入的密码是123456,在在线加密网…...
我的创作纪念日20240418
机缘 我的技术博客起源于对编程的深深热爱和对知识的渴望。从一开始,我就被编程世界的无限可能所吸引,而这种热情也推动我开始了技术创作之旅。我创建博客的初衷有以下几点: 分享实战经验:在工作中,我遇到了许多技术…...
计算机视觉入门
计算机视觉是人工智能的一个分支,它涉及研究如何使计算机能够理解和解释图像和视频中的视觉信息。这个领域结合了计算机科学、工程学、神经科学和认知科学等多个学科的知识。以下是计算机视觉入门的一些关键点: 1. 基础概念 - **图像处理**:对…...
CTFHUB-技能树-Web前置技能-文件上传(前端验证—MIME绕过、00截断、00截断-双写后缀)
CTFHUB-技能树-Web前置技能-文件上传(前端验证—MIME绕过、00截断、00截断-双写后缀) 文章目录 CTFHUB-技能树-Web前置技能-文件上传(前端验证—MIME绕过、00截断、00截断-双写后缀)前端验证—MIME绕过有关MIMEMIME的作用 解题时有…...
Java面试题笔记(持续更新)
Java基础 java中的Math.round(-1.5)等于多少? Math的round方法是四舍五入,如果参数是负数,则往大的数如,Math.round(-1.5)-1,如果是Math.round(1.5)则结果为2 JDK和JRE的区别? JDK 是 Java Development ToolKit 的简称,也就是…...
格式化字符串漏洞学习笔记
简单介绍 格式化字符串漏洞和栈溢出有相似之处,但又有所不同,都是利用了程序员的疏忽大意来改变程序运行的正常流程。 1、格式化字符串的介绍 printf()、fprint()等print()系列的函数可以按照一定的格式将数据进行输出。 实例…...
用友NC avatar接口文件上传漏洞
产品简介 用友NC是一款企业级ERP软件。作为一种信息化管理工具,用友NC提供了一系列业务管理模块,包括财务会计、采购管理销售管理、物料管理、生产计划和人力资源管理等,帮助企业实现数字化转型和高效管理。 漏洞介绍 用友 NC avatar接口处…...
【Go语言快速上手(二)】 分支与循环函数讲解
💓博主CSDN主页:杭电码农-NEO💓 ⏩专栏分类:Go语言专栏⏪ 🚚代码仓库:NEO的学习日记🚚 🌹关注我🫵带你学习更多Go语言知识 🔝🔝 Go快速上手 1. 前言2. 分支与循环2.1…...
动手写sql 《牛客网80道sql》
第1章:SQL编写基础逻辑和常见问题 基础逻辑 SELECT语句: 选择数据表中的列。FROM语句: 指定查询将要从哪个表中检索数据。WHERE语句: 过滤条件,用于提取满足特定条件的记录。GROUP BY语句: 对结果进行分组。HAVING语句: 对分组后的结果进行条件过滤。O…...
Node.js、Java、Python、PHP在构建BS系统时的特点比较
在现代软件开发领域,构建一个稳定、高效的B/S(浏览器/服务器)系统对于企业的信息化发展至关重要。Node.js、Java、Python和PHP是当下流行的几种后端开发技术,它们各自具有独特的特点和优势。本文将对这几种技术在构建B/S系统时的特…...
快速入门深度学习9.1(用时20min)——GRU
速通《动手学深度学习》9.1 写在最前面九、现代循环神经网络9.1 门控循环单元(GRU)9.1.1. 门控隐状态9.1.1.1. 重置门和更新门9.1.1.2. 候选隐状态9.1.1.3. 隐状态 9.1.3 API简洁实现小结 🌈你好呀!我是 是Yu欸 🌌 20…...
基于51单片机的步进电机调速系统设计
基于51单片机的步进电机调速系统 (仿真+程序+原理图+设计报告) 功能介绍 具体功能: 1.按键可以控制电机正、反转,加、减速,停止; 2.一位7段数码管实时显示档位…...
postcss概述
PostCSS是一个用于转换CSS的工具,它使用插件来处理CSS,并提供了一种方式来编写可扩展的CSS代码。其主要特点如下: 插件驱动:PostCSS的核心非常轻量级,大部分功能都是通过插件来实现的。这意味着用户可以根据项目的需求…...
【Proteus】51单片机对直流电机的控制
直流电机:输出或输入为直流电能的旋转电机。能实现直流电能和机械能互相转换的电机。把它作电动机运行时是直流电动机,电能转换为机械能;作发电机运行时是直流发电机,机 械能转换为电能。 直流电机的控制: 1、方向控制…...
JET毛选学习笔记:如何利用《实践论》学习实验
一、个人背景介绍 本人本科读的是预防医学专业(因为没考上临床),硕博连读(报名人少,我报了就得了)的时候专业是流行病与卫生统计学,除了学习流行病学、统计学(忘得差不多了…...
FinalShell 远程连接 Linux(Ubuntu)系统
Linux 系列教程: VMware 安装配置 Ubuntu(最新版、超详细)FinalShell 远程连接 Linux(Ubuntu)系统Ubuntu 系统安装 VS Code 并配置 C 环境 ➡️➡️➡️提出一个问题:为什么使用 FinalShell 连接࿰…...
Python零基础从小白打怪升级中~~~~~~~多线程
线程安全和锁 一、全局解释器锁 首先需要明确的一点是GIL并不是Python的特性,它是在实现Python解析器(CPython)时所引入的一个概念。 GIL全称global interpreter lock,全局解释器锁。 每个线程在执行的时候都需要先获取GIL,保证同一时刻只…...
【机器学习300问】67、均方误差与交叉熵误差,两种损失函数的区别?
一、均方误差(Mean Squared Error, MSE) 假设你是一个教练,在指导学生射箭。每次射箭后,你可以测量子弹的落点距离靶心的差距(误差)。MSE就像是计算所以射击误差的平方后的平均值。它强调了每一次偏离靶心的…...
SAP打印输出设置
SAP打印输入有很多方式,适合不同的应用场景。 一.打印输出总体概览图 二.前台打印 这个是比较常见的,前端打印的出现减轻了管理员的工作量,用户可以选择自己电脑上的打印机输出,不需要所有打印机都在SAP平台中进行配置࿰…...
qt对json文件下,qdatetime时间的正确读写方式
qt 对json文件下qdatetime时间的正确读写方式 被搞了很长时间,最后发现是需要控制格式。 正确方式 // read QByteArray localBytes mapJson["playTime"].toString().toLocal8Bit(); char* char_time localBytes.data(); std::string str_time char_…...
【系统分析师】计算机网络
文章目录 1、TCP/IP协议族1.1 DHCP协议1.2 DNS协议1.3网络故障诊断 2、网路规划与设计2.1逻辑网络设计2.2物理网络设计2.3 分层设计 3、网络接入3.1 接入方式3.2 IPv6地址 4、综合布线技术5、物联网5.1物联网概念与分层5.2 物联网关键技术 6、云计算7、网络存储技术(…...
DDoS攻击愈演愈烈,谈如何做好DDoS防御
DDoS攻击是目前最常见的网络攻击方式之一,各种规模的企业包括组织机构都在受其影响。对于未受保护的企业来讲,每次DDoS攻击的平均成本为20万美元。可见,我们显然需要开展更多的DDoS防御工作。除考虑如何规避已发生的攻击外,更重要…...
48.基于SpringBoot + Vue实现的前后端分离-雪具销售系统(项目 + 论文PPT)
项目介绍 本站是一个B/S模式系统,采用SpringBoot Vue框架,MYSQL数据库设计开发,充分保证系统的稳定性。系统具有界面清晰、操作简单,功能齐全的特点,使得基于SpringBoot Vue技术的雪具销售系统设计与实现管理工作系统…...
P8715 [蓝桥杯 2020 省 AB2] 子串分值 (双边检测)
# [蓝桥杯 2020 省 AB2] 子串分值 ## 题目描述 对于一个字符串 $S$, 我们定义 $S$ 的分值 $f(S)$ 为 $S$ 中恰好出现一次的字符个数。例如 $f\left({ }^{\prime \prime} \mathrm{aba}{ }^{\prime \prime}\right)1$,$f\left({ }^{\prime \prime} \mathrm{abc}{ }^{…...
(十四)C++自制植物大战僵尸游戏windows平台视频播放实现
植物大战僵尸游戏开发教程专栏地址http://t.csdnimg.cn/8UFMs VLC库 在Cocos2d-x游戏开发框架中,没有实现windows平台视频播放的功能,需要自定义实现。在本项目中使用vlc库实现windows平台的视频播放功能。 vlc官网:网址 下载完成后&#x…...
深入理解GCC/G++在CentOS上的应用
文章目录 深入理解GCC/G在CentOS上的应用编译C和C源文件C语言编译C语言编译 编译过程的详解预处理编译汇编链接 链接动态库和静态库静态库和动态库安装静态库 结论 深入理解GCC/G在CentOS上的应用 在前文的基础上,我们已经了解了CentOS的基本特性和如何在其上安装及…...
C语言【复合类型(自定义类型)】
一、结构体 结构体(struct)可以理解为用户自定义的特殊的复合的“数据类型”; 1. 结构体变量的定义和初始化 定义结构体变量的方式: 先声明结构体类型再定义变量名 在声明类型的同时定义变量 // 结构体类型的定义 struct stu {char name[50];int age;…...
【python】初识爬虫
Python爬虫介绍 目录 一、概述二、Python爬虫的基本构成爬虫引擎解析器数据存储三、Python爬虫的主要技术请求与响应URL管理页面解析数据存储四、Python爬虫的应用场景数据采集搜索引擎竞品分析价格监控五、Python爬虫的开发流程六、常用的库...
提高小红书底层逻辑认知+短视频思路打爆笔记+纯带货笔记起号(8节课)
课程内容: 小红书如何0押金开通店铺 .mp4 店铺基础搭建.mp4 小红营的流量从哪里来? 如何用养号发现优质的对标笔记?养号的真正意义是什么?.mp4 什么叫垂类标签? 账号如何打上正确的标签 .mp4 前期笔记是否挂车?不同类型的笔记审核标准是什么?.mp4 如何用…...
力扣:219. 存在重复元素 II
力扣:219. 存在重复元素 II 给你一个整数数组 nums 和一个整数 k ,判断数组中是否存在两个 不同的索引 i 和 j ,满足 nums[i] nums[j] 且 abs(i - j) < k 。如果存在,返回 true ;否则,返回 false 。 …...
程序安装 - 笔记
1 程序IOServer,依赖自己开发libs7.so.如何安装程序 要安装依赖于自己开发的 libs7.so 的程序 IOServer,你需要执行以下步骤: 编译 IOServer 程序:确保 IOServer 程序的源代码处于可用状态,并且已经编译成可执行文件。这可能需要执行诸如 make 或者其他编译命令,具体取决…...
文心一言 vs. GPT-4: 全面比较
1. 训练数据和预训练 文心一言 训练数据:文心一言是由中国研究人员开发的中文语言模型。它主要在大量古典中文文学作品上进行训练,包括诗歌、散文和历史文本。这些文学作品涵盖了丰富的中文语言和文化,使得文心一言在传统文化方面具有独特优…...
图书管理系统概述
自友图书馆管理系统解决方案适用于中小学、大中专院校以及企事业单位中小型图书馆的自动化管理需求,其功能覆盖了图书馆自动化集成管理业务流程所包括的所有环节。《图书馆管理系统》首先应该按照我国图书馆行业通用CNMARC格式及《中图法第四版》行业标准开发而成,支…...
中国老铁路增开对国际旅客列车开行
4月13日,中老铁路国际旅客列车开行一周年之际,中老两国铁路部门在中国西双版纳至老挝琅勃拉邦两大著名旅游城市间增开1对国际旅客列车,旅客乘火车可实现两地间当日往返。标题:古道新程——中国老铁路增开国际旅客列车 在这个日新月…...
搭建个人智能家居 4 -WS2812B-RGB灯
搭建个人智能家居 4 - WS2812B-RGB灯 前言说明ESPHomeHomeAssistant 前言 上一篇文章我们已经完成了第一个外设的添加(一个LED灯),今天接着来“壮大”这个系统,添加第二个外设“RGB灯”。 环境搭建可以回顾前面的文章。前文回顾&…...
C++类与对象(中)②
目录 1.赋值运算符重载 1.1运算符重载 1.2赋值运算符重载 1.2.1赋值运算符重载格式 1.2.2赋值运算符只能重载成成员函数不能重载成全局函数 1.2.3同拷贝函数一样,如果类是形如日期类这样变量全是内置类型的,赋值运算符就必须自己实现,…...
Qt——xml文件生成DBus接口
1. 如何根据xml文件生成Dbus接口 要使用 XML 文件生成 D-Bus 接口,你可以按照以下步骤操作: 步骤 1: 准备 XML 文件 确保你的 XML 文件遵循 D-Bus 的接口描述规范。这通常包括定义接口、方法、信号和属性。一个基本的例子如下: <!DOCTYPE…...
初识SpringMVC(SpringMVC学习笔记一)
1 、还是熟悉的配方,先创建一个父Maven项目(忘记怎么创建项目了就去前面翻笔记),导入通用的配置依赖 <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instan…...
FreeRTOS任务管理
1. 任务状态理论讲解 定时器职中断周期此处的1000Hz表示的是没次间隔1毫秒就记一次数(在FreeConfig.h)文件中进行配置 #define configTICK_RATE_HZ ( ( TickType_t ) 1000 ) 判断是否需要任务切换在FreeRTOS里面每次间隔1毫秒切换一次(程序…...
Qwen1.5大语言模型微调实践
在人工智能领域,大语言模型(Large Language Model,LLM)的兴起和广泛应用,为自然语言处理(NLP)带来了前所未有的变革。Qwen1.5大语言模型作为其中的佼佼者,不仅拥有强大的语言生成和理…...
购物车实现
目录 1.购物车常见的实现方式 2.购物车数据结构介绍 3.实例分析 1.controller层 2.service层 1.购物车常见的实现方式 方式一:存储到数据库 性能存在瓶颈方式二:前端本地存储 localstorage在浏览器中存储 key/value 对,没有过期时间。s…...
HTML5漫画风格个人介绍源码
源码介绍 HTML5漫画风格个人介绍源码,源码由HTMLCSSJS组成,记事本打开源码文件可以进行内容文字之类的修改,双击html文件可以本地运行效果,也可以上传到服务器里面,重定向这个界面 效果截图 源码下载 HTML5漫画风格…...
工业数学模型——高炉煤气发生量预测(三)
1、工业场景 冶金过程中生产的各种煤气,例如高炉煤气、焦炉煤气、转炉煤气等。作为重要的副产品和二次能源,保证它们的梯级利用和减少放散是煤气能源平衡调控的一项紧迫任务,准确的预测煤气的发生量是实现煤气系统在线最优调控的前提。 2、…...
pnpm - Failed to resolve loader: cache-loader. You may need to install it.
起因 工作原因需要研究 vue-grid-layout 的源码,于是下载到本地。因为我习惯使用 pnpm,所以直接用 pnpm i 安装依赖,npm run serve 启动失败。折腾了一番没成功。 看到源码里有 yarn.lock,于是重新用 yarn install 安装依赖&…...
CSS transition和animation的用法和区别
Transition和Animation在CSS中都是用于实现元素状态变化的效果,但它们在用法和特性上存在明显的区别。 Transition transition是过度属性,主要强调的是元素状态的过渡效果。 它通常用于在元素的状态发生变化时,平滑地过渡到一个新的状态。…...
书籍推荐(附上每本书的看点)
1、《FPGA深度解析》,这本书的FIFO部分我觉得讲得很好; 2、《verilog数字系统设计教程》,夏宇闻老师的蓝皮书,这本书里包含很多考试知识点; 3、《SOC设计方法和实现》郭炜老师写的,我觉得他的低功耗设计讲得很好; 《高级FPGA设计结…...
LLM理解v1
答疑 什么是知识库? LLM(Large Language Models,大型语言模型)如GPT系列,通常是基于海量的文本数据进行训练的。它们通过分析和理解这些数据来生成回答、撰写文章、解决问题等。当我们提到LLM的“本地知识库”时&…...
ubuntu 22.04 -- cmake安装
安装方式一:源码安装 1、下载安装包 官网下载:下载链接:Download CMake 也可以使用命令行下载 wget https://github.com/Kitware/CMake/releases/download/v3.26.5/cmake-3.26.5.tar.gz2、解压并安装 # 1、解压 tar -zxvf cmake-3.26.5.…...
字符串算法题(第二十四天)
344. 反转字符串 题目 编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。 不要给另外的数组分配额外的空间,你必须**原地修改输入数组**、使用 O(1) 的额外空间解决这一问题。 示例 1: 输入࿱…...
【Linux】应用层协议序列化和反序列化
欢迎来到Cefler的博客😁 🕌博客主页:折纸花满衣 🏠个人专栏:题目解析 🌎推荐文章:C【智能指针】 前言 在正式代码开始前,会有一些前提知识引入 目录 👉🏻序列…...
.NET使用Microsoft.IdentityModel.Tokens对SAML2.0登录断言校验
如题。使用SAML单点登录对IDP返回的Response断言使用微软提供的Microsoft.IdentityModel.Tokens对断言(Assertion)进行校验。 首先需要安装Muget包,Microsoft.IdentityModel.Tokens和Microsoft.IdentityModel.Tokens.Saml。 简易示例代码如…...
【oracle】图片转为字节、base64编码等形式批量插入oracle数据库并查询
1.熟悉、梳理、总结下Oracle相关知识体系 2.欢迎批评指正,跪谢一键三连! 资源下载: oci.dll、oraocci11.dll、oraociei11.dll3个资源文件资源下载: Instant Client Setup.exe资源下载: oci.dll、oraocci11.dll、oraoc…...
Spring之配置类源码深度解析
Spring之配置类源码深度解析 前言 Spring是一个非常流行的Java开发框架,它提供了很多便捷的功能和工具,使得Java开发变得更加高效和简单。其中,配置类是Spring框架中非常重要的一个概念,它可以用来定义Bean的创建和依赖关系&…...
pandas style添加表格边框,或是只添加下边框等自定义边框样式设置
添加表格边框 可以使用如下程序添加表格: import dataframe_image as dfi import pandas as pd import numpy as npdf pd.DataFrame(np.random.random(size(10, 5))) df_style df.style.set_properties(**{text-align: center,border-color: black,border-width…...
2024OD机试卷-找座位 (java\python\c++)
题目:找座位 题目描述 在一个大型体育场内举办了一场大型活动,由于疫情防控的需要,要求每位观众的必须间隔至少一个空位才允许落座。 现在给出一排观众座位 分布图 ,座位中存在已落座的观众,请计算出,在不移动现有观众座位的情况下,最多还能坐下多少名观众。 输入描述…...
Java—字节码文件解读
原文 public class ClassIntrucation {public static void main(String[] args) {int i 10;int j i;j;j;} } 查看字节码文件命令 javap -c 字节码文件例如: javap -c ClassIntrucation 结果 public class ClassIntrucation {public ClassIntrucation();Code:…...