做网站用百度百科的资料会侵权吗,广东建设信息网站首页,做书评的网站,注册公司需要花多少钱前言 最近有个兄弟通过我的视频号加我#xff0c;咨询能否将这个dubo游戏游戏开始前就将数据拿到从而进行押注#xff0c;于是通过抓包工具测试了下#xff0c;发现数据有时候是明文#xff0c;有时候确实密文#xff0c;大致看了下有这几种加密#xff1a;Md5aes、Md5咨询能否将这个dubo游戏游戏开始前就将数据拿到从而进行押注于是通过抓包工具测试了下发现数据有时候是明文有时候确实密文大致看了下有这几种加密Md5aes、Md5参数加密用md5数据返回加密用Md5aes本次记录一下分析过程。
登录
通过抓包分析数据发现数据返回采用Md5aes 请求参数用了某种加密
分析
我们通过上面的抓包知道密码肯定是用了一种加密方式但具体是啥还不清楚我们通过打断点的形式顺藤摸瓜
通过观察启动资源锁定一个index.js 点击进去观察发现有表单提交的数据 继续往下搜索md5()方法 t.prototype.get_md5 function(t) {return this.md5(t)}继续搜索md5()方法 cc._RF.push(e, “121674IswNGu77LvNvHfpBi”, “md5”) cc._RF.push 和 cc._RF.pop 是 Cocos Creator 引擎用于跟踪脚本加载顺序和依赖关系的工具函数。这些函数在加载脚本时自动生成用于维护加载堆栈。
我们通过对该方法进行数据修改再次运行观察结果
修改
再md5方法下新增代码
t.prototype.md5 function(t) {var e this;alert(我被执行了);console.log(t);console.log(e);t this.utf16_to_utf8(t);console.log(新的密码);console.log(t);for (var o this.porcess_message(t), n Uint32Array.from([this.A, this.B, this.C, this.D]), a 0, i this.split(Array.from(o), 16); a i.length; a) {for (var r i[a], s n[0], c n[1], l n[2], h n[3], u 0; u 64; u)n[(4 - u % 4) % 4] this.fghi_wrapped(u)(n[(4 - u % 4) % 4], n[(4 - u % 4 1) % 4], n[(4 - u % 4 2) % 4], n[(4 - u % 4 3) % 4], r[this.x_index(u)], this.S[u], this.T(u));n[0] s n[0],n[1] c n[1],n[2] l n[2],n[3] h n[3]}return Array.from(n).map(function(t) {return e.little_endian(t)}).join().toLowerCase()}保存后刷新重新登陆 可以看到密码的确是传递过来了
猜测
可能是md5加密 发现数据值一样请求登录只需要将密码进行md5加密即可
import requests
import hashlib
headers {Accept: */*,Accept-Language: zh,zh-CN;q0.9,Authorization: undefined,Cache-Control: no-cache,Connection: keep-alive,Pragma: no-cache,Referer: http://js88.mrlj.cn/js1/,User-Agent: Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Mobile Safari/537.36,
}text1123456
print(text1)
mdhashlib.md5(text1.encode()) # 创建md5对象
md5pwdmd.hexdigest() # md5加密
print(md5pwd)params {loginId: 241837,loginPwd: md5pwd,
}response requests.get(http://js88.mrlj.cn/qw/user/weixin/loginByPwd, paramsparams, headersheaders, verifyFalse)
print(response.json())响应 123456 e10adc3949ba59abbe56e057f20f883e {‘code’: 200, ‘msg’: ‘正常’, ‘data’: ‘md5AES:w3cqakJcff674yZSTLRgOck0lJ4SiaKjhO9Greq3hOdpirWmG9nB/tPuvl1BYA2f6tHCIlxVRhippuJn/FVcVOrGk88zoscA9tbnxmPIC2ynMt8KnPWKGQYKIJekukfktcGOg0JR29GkR6NktoboqIDaVIHMpCcain3bd9Ly/enE03bI5BuM9aKn86DXbbdSmUyNCWC0WNNi3Onn/KtJ3W6Tb8r/ujfragdTPPbpuvItSCXIB9kpQDlkSNSINsqTF8VaM8VBOQ2YKnv43ORmypGwPjeZrmj4BmIhSM2xrhlf0sJp1k1xtu4XUz4AGypWdESGOHbCGfgSFxpGs34UUxkAN2DgU/Y3Nv8hjQnt0UceSb2rfsHhWG3uCPqTnFFI0mV64QSQeyOsPEca80zjUEREXpcnPfR7lSQGdn5yoemu7rXWdsDszdHalIi774B38hY/1Cc9uHjxvvaRP0G9OUHgOPV2pwgS7nvlDekFH0EPFHTZSg5UEm09tluDZeowxShc/MYcoGljdLrfT24Vr755gGHs2PgE8UXRglOQJqAsWazyQZJqz6/hULG40kAT3/PkLzREVMIt3yyGERj2RDzcPkbJK5d12cWjUf6/c1tFfhJeBxnKzyPrFIi6JsaNUKObMwgNC1LiwEY0W3suXQLcR5FbMa6CURmVzPwIxB4LslDD0OEPqnHHowvVE9ZyhE6ts5Am1KTcvKY7rY8MrAcXO30nHbfupwH5rjrrrf2MdpKcA2PUPnITj7V6TVCmqX24wdTB5pcrZVshvv1cV8zOll54S2tOJrC2GjRKRl1clXvVhokU2Ys22NKMDB5OxUP2ajJea6d98owyPlnpH4MVzxeVnewcK8/ed35YrT8f4nn2TFqe0zsQqqsiC9noScvr/uZV/vxBHYi45LRIjaAzTUhBc8l9IlfknJQnUvnmE2kzNBW’, ‘ok’: True} 解密 function() {console.log(iv-);function t() {this.aes_key 2c4add8f849a7bea,this.aes_iv dc4b73b33e69eaff}return t.prototype.encrypt function(t) {console.log(iv2-);var e CryptoJS.enc.Utf8.parse(this.aes_key), o CryptoJS.enc.Utf8.parse(this.aes_iv), n CryptoJS.AES.encrypt(t, e, {iv: o,mode: CryptoJS.mode.CBC,padding: CryptoJS.pad.Pkcs7});return CryptoJS.format.OpenSSL.stringify(n)},t.prototype.decrypt function(t) {var e (t CryptoJS.format.OpenSSL.parse(t)).ciphertext.toString(), o CryptoJS.enc.Hex.parse(e), n CryptoJS.enc.Base64.stringify(o), a CryptoJS.enc.Utf8.parse(this.aes_key), i CryptoJS.enc.Utf8.parse(this.aes_iv);return CryptoJS.AES.decrypt(n, a, {iv: i,mode: CryptoJS.mode.CBC,padding: CryptoJS.pad.Pkcs7}).toString(CryptoJS.enc.Utf8)},n([i], t)}());这段代码是一个 JavaScript 函数它定义了一个名为 t 的构造函数并将其实例化后作为匿名函数的返回值。在构造函数 t 中有两个属性 aes_key 和 aes_iv它们存储了AES加密算法所需的密钥和初始化向量。
函数中定义了两个方法 encrypt 和 decrypt用于加密和解密操作。 在 encrypt 方法中首先将密钥和初始化向量转换为 UTF-8 格式然后使用 CryptoJS 库中的 AES 加密函数对传入的参数 t 进行加密。加密过程中指定了加密模式为 CBCCipher Block Chaining并使用 PKCS7 填充方式。最后使用 OpenSSL 格式将加密结果转换为字符串并返回。 在 decrypt 方法中首先将传入的密文解析为 OpenSSL 格式然后将其转换为十六进制格式并再次转换为 Base64 字符串。接着将密钥和初始化向量转换为 UTF-8 格式使用 CryptoJS 库中的 AES 解密函数对密文进行解密解密模式和填充方式与加密时相同。最终将解密结果转换为 UTF-8 格式的字符串并返回。 将js代码复制下来
!DOCTYPE html
html langen
headmeta charsetUTF-8meta nameviewport contentwidthdevice-width, initial-scale1.0titleEncryption/Decryption Example/titlescript srchttps://cdnjs.cloudflare.com/ajax/libs/crypto-js/4.1.1/crypto-js.min.js/script
/head
bodyscript(function() {function t() {this.aes_key 2c4add8f849a7bea;this.aes_iv dc4b73b33e69eaff;}t.prototype.encrypt function(t) {var e CryptoJS.enc.Utf8.parse(this.aes_key),o CryptoJS.enc.Utf8.parse(this.aes_iv),n CryptoJS.AES.encrypt(t, e, {iv: o,mode: CryptoJS.mode.CBC,padding: CryptoJS.pad.Pkcs7});return CryptoJS.format.OpenSSL.stringify(n);};t.prototype.decrypt function(t) {var e (t CryptoJS.format.OpenSSL.parse(t)).ciphertext.toString(),o CryptoJS.enc.Hex.parse(e),n CryptoJS.enc.Base64.stringify(o),a CryptoJS.enc.Utf8.parse(this.aes_key),i CryptoJS.enc.Utf8.parse(this.aes_iv);return CryptoJS.AES.decrypt(n, a, {iv: i,mode: CryptoJS.mode.CBC,padding: CryptoJS.pad.Pkcs7}).toString(CryptoJS.enc.Utf8);};// 示例使用var cipher new t();var plaintext {code:200,data};var encrypted_text cipher.encrypt(plaintext);console.log(Encrypted:, encrypted_text);var decrypted_text cipher.decrypt(encrypted_text);console.log(Decrypted:, decrypted_text);})();/script
/body
/html