赞
踩
这是我的gitee仓库:https://gitee.com/qin-laoda/python-exercises
有兴趣的小可爱们可以点进去看看,
________________________________
鉴于有一些小可爱对于js逆向的理解还有一些不解,下面我会再进一步的介绍js逆向,
1.线性散列的MD5算法
2.对称加密DES/AES算法
3.非对称加密算法RSA
4.base64伪加密
5.https证书钥加密
MD5是一种被广泛使用的线性散列算法,可以产生一个128位(16字节)的散列值(hash value),用户确保信息传输完整的一致性。且MD5加密之后产生的是一个固定长度(32位或16位)的数据
解密:
增加破解成本的方法
我们在注册账号时密码一般都是MD5加密
DES全称为Data Encryption Standard ,即数据加密标准,是一种使用秘钥加密的算法,该加密算法是一种对称加密方式,其加密运算、解密运算需要使用的是同样的秘钥(一组字符串)即可。
注意:
现在用的AES这个标准来替代原先的DES
AES和DES的区别:
加密后秘文长度的不同
应用场景的不同
DES和AES切换只需要修改CrytoJS.AES<=>CryptoJS.DES
使用DES/AES进行数据交换时要求双方都拥有相同的私钥
破解方法:
DES算法的入口参数有三个:
Key、Data、Mode、padding
RSA加密算法是一种非对称加密算法。在公开秘钥加密和电子商业中RSA被广泛使用
非对称加密算法需要两个秘钥:
注意:
使用流程和场景介绍:
公钥私钥生成方式:公私钥可以可以在线生成:http://web.chacuo.net/netrsakeypair
Base64是一种用64个字符来表示任意二进制数据的方法。base64是一种编码方式而不是加密算法,知识看上去像是加密而已
使用A-Z,a-z,0-9,+,/ 这64个字符实现对数据加密
https是基于http和SSL/TLS实现的一个协议,它可以保证在网络上传输的数据都是加密的,从而保证数据安全
如何实现https
3.请求和响应流程如下:
客户端使用对称秘钥对请求进行加密,并发送给服务器
服务端接收到密文后,使用对称秘钥对密文进行解密,然后处理请求,最后再使用对称秘钥把返回的内容再次加密,返回给看客户端
客户端接收密文之后,使用对称秘钥进行解密,并获取最终的响应内容
这样,数据局传输传输都是密文,解决了明文传输数据的问题,但是这样会有bug。
浏览器如何获取对称秘钥
每个客户端的对称秘钥相同,浏览器能拿到对称秘钥,那黑客也能拿到,所以数据加密就没有意义了
上图就是理论上通过RSA的原理来发送密钥,缺点就是无法知道客户端接收的公钥是不是服务器的
下面我们来一个简单的案例
操作:
输入密码和账号 并打开开发者工具
找到对应接口
可以看出上图加密的是32位可以大概判断是MD5加密
然后找到对应的js文件进行打断点,运行
js代码:
-
- function p(e, t) {
- var n = (65535 & e) + (65535 & t);
- return (e >> 16) + (t >> 16) + (n >> 16) << 16 | 65535 & n
- }
- function a(e, t, n, i, o, s) {
- return p((t = p(p(t, e), p(i, s))) << o | t >>> 32 - o, n)
- }
- function l(e, t, n, i, o, s, r) {
- return a(t & n | ~t & i, e, t, o, s, r)
- }
- function g(e, t, n, i, o, s, r) {
- return a(t & i | n & ~i, e, t, o, s, r)
- }
- function m(e, t, n, i, o, s, r) {
- return a(t ^ n ^ i, e, t, o, s, r)
- }
- function h(e, t, n, i, o, s, r) {
- return a(n ^ (t | ~i), e, t, o, s, r)
- }
- function r(e, t) {
- e[t >> 5] |= 128 << t % 32,
- e[14 + (t + 64 >>> 9 << 4)] = t;
- for (var n, i, o, d, s = 1732584193, r = -271733879, a = -1732584194, c = 271733878, u = 0; u < e.length; u += 16)
- s = l(n = s, i = r, o = a, d = c, e[u], 7, -680876936),
- c = l(c, s, r, a, e[u + 1], 12, -389564586),
- a = l(a, c, s, r, e[u + 2], 17, 606105819),
- r = l(r, a, c, s, e[u + 3], 22, -1044525330),
- s = l(s, r, a, c, e[u + 4], 7, -176418897),
- c = l(c, s, r, a, e[u + 5], 12, 1200080426),
- a = l(a, c, s, r, e[u + 6], 17, -1473231341),
- r = l(r, a, c, s, e[u + 7], 22, -45705983),
- s = l(s, r, a, c, e[u + 8], 7, 1770035416),
- c = l(c, s, r, a, e[u + 9], 12, -1958414417),
- a = l(a, c, s, r, e[u + 10], 17, -42063),
- r = l(r, a, c, s, e[u + 11], 22, -1990404162),
- s = l(s, r, a, c, e[u + 12], 7, 1804603682),
- c = l(c, s, r, a, e[u + 13], 12, -40341101),
- a = l(a, c, s, r, e[u + 14], 17, -1502002290),
- s = g(s, r = l(r, a, c, s, e[u + 15], 22, 1236535329), a, c, e[u + 1], 5, -165796510),
- c = g(c, s, r, a, e[u + 6], 9, -1069501632),
- a = g(a, c, s, r, e[u + 11], 14, 643717713),
- r = g(r, a, c, s, e[u], 20, -373897302),
- s = g(s, r, a, c, e[u + 5], 5, -701558691),
- c = g(c, s, r, a, e[u + 10], 9, 38016083),
- a = g(a, c, s, r, e[u + 15], 14, -660478335),
- r = g(r, a, c, s, e[u + 4], 20, -405537848),
- s = g(s, r, a, c, e[u + 9], 5, 568446438),
- c = g(c, s, r, a, e[u + 14], 9, -1019803690),
- a = g(a, c, s, r, e[u + 3], 14, -187363961),
- r = g(r, a, c, s, e[u + 8], 20, 1163531501),
- s = g(s, r, a, c, e[u + 13], 5, -1444681467),
- c = g(c, s, r, a, e[u + 2], 9, -51403784),
- a = g(a, c, s, r, e[u + 7], 14, 1735328473),
- s = m(s, r = g(r, a, c, s, e[u + 12], 20, -1926607734), a, c, e[u + 5], 4, -378558),
- c = m(c, s, r, a, e[u + 8], 11, -2022574463),
- a = m(a, c, s, r, e[u + 11], 16, 1839030562),
- r = m(r, a, c, s, e[u + 14], 23, -35309556),
- s = m(s, r, a, c, e[u + 1], 4, -1530992060),
- c = m(c, s, r, a, e[u + 4], 11, 1272893353),
- a = m(a, c, s, r, e[u + 7], 16, -155497632),
- r = m(r, a, c, s, e[u + 10], 23, -1094730640),
- s = m(s, r, a, c, e[u + 13], 4, 681279174),
- c = m(c, s, r, a, e[u], 11, -358537222),
- a = m(a, c, s, r, e[u + 3], 16, -722521979),
- r = m(r, a, c, s, e[u + 6], 23, 76029189),
- s = m(s, r, a, c, e[u + 9], 4, -640364487),
- c = m(c, s, r, a, e[u + 12], 11, -421815835),
- a = m(a, c, s, r, e[u + 15], 16, 530742520),
- s = h(s, r = m(r, a, c, s, e[u + 2], 23, -995338651), a, c, e[u], 6, -198630844),
- c = h(c, s, r, a, e[u + 7], 10, 1126891415),
- a = h(a, c, s, r, e[u + 14], 15, -1416354905),
- r = h(r, a, c, s, e[u + 5], 21, -57434055),
- s = h(s, r, a, c, e[u + 12], 6, 1700485571),
- c = h(c, s, r, a, e[u + 3], 10, -1894986606),
- a = h(a, c, s, r, e[u + 10], 15, -1051523),
- r = h(r, a, c, s, e[u + 1], 21, -2054922799),
- s = h(s, r, a, c, e[u + 8], 6, 1873313359),
- c = h(c, s, r, a, e[u + 15], 10, -30611744),
- a = h(a, c, s, r, e[u + 6], 15, -1560198380),
- r = h(r, a, c, s, e[u + 13], 21, 1309151649),
- s = h(s, r, a, c, e[u + 4], 6, -145523070),
- c = h(c, s, r, a, e[u + 11], 10, -1120210379),
- a = h(a, c, s, r, e[u + 2], 15, 718787259),
- r = h(r, a, c, s, e[u + 9], 21, -343485551),
- s = p(s, n),
- r = p(r, i),
- a = p(a, o),
- c = p(c, d);
- return [s, r, a, c]
- }
- function c(e) {
- for (var t = "", n = 0; n < 32 * e.length; n += 8)
- t += String.fromCharCode(e[n >> 5] >>> n % 32 & 255);
- return t
- }
- function u(e) {
- var t, n = [];
- for (n[(e.length >> 2) - 1] = void 0,
- t = 0; t < n.length; t += 1)
- n[t] = 0;
- for (t = 0; t < 8 * e.length; t += 8)
- n[t >> 5] |= (255 & e.charCodeAt(t / 8)) << t % 32;
- return n
- }
- function i(e) {
- for (var t, n = "0123456789abcdef", i = "", o = 0; o < e.length; o += 1)
- t = e.charCodeAt(o),
- i += n.charAt(t >>> 4 & 15) + n.charAt(15 & t);
- return i
- }
- function d(e) {
- return unescape(encodeURIComponent(e))
- }
- function o(e) {
- return c(r(u(e = d(e)), 8 * e.length))
- }
- function s(e, t) {
- var n, e = d(e), t = d(t), i = u(e), o = [], s = [];
- for (o[15] = s[15] = void 0,
- 16 < i.length && (i = r(i, 8 * e.length)),
- n = 0; n < 16; n += 1)
- o[n] = 909522486 ^ i[n],
- s[n] = 1549556828 ^ i[n];
- return e = r(o.concat(u(t)), 512 + 8 * t.length),
- c(r(s.concat(e), 640))
- }
- function demo(e, t, n) {
- return t ? n ? s(t, e) : i(s(t, e)) : n ? o(e) : i(o(e))
- }
-
- console.log(demo('s454fd5)
结果:
python代码运行js文件进行发送
代码如下:
- import requests
- import execjs
- import time
-
-
- def get_js(js_path, js_name, func_args=None):
- with open(js_path, "r", encoding="utf-8")as f:
- js = f.read()
- # 编译js文件
- ctx = execjs.compile(js, cwd=r"C:\Users\32288\WebstormProjects\untitled\node_modules\crypto-js")
- # 执行js中的函数
- result = ctx.call(js_name, func_args)
- print(result)
- return result
-
-
- a = get_js("./01.js", "demo", ("123456",))
-
-
- def main():
- """主要的业务逻辑"""
- # url
- url = "https://mp.weixin.qq.com/cgi-bin/bizlogin?action=startlogin"
- data = {
- "username": 123456,
- "pwd": a,
- "mgcode": "",
- "f": "json",
- "userlang": "zh_CN",
- "redirect_url": "",
- "token": "",
- "lang": "zh_CN",
- "ajax": 1
- }
- header = {
- "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36"
- }
- # 发送请求获取响应
- response = requests.post(url, data=data,headers=header)
- print(response.json())
- # 数据的提取
- # 保存
-
-
- if __name__ == '__main__':
- main()
结果:
上面就是一些简单MD5的案例,后面会陆续上传其他案例,
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。