网站建设项目招标文件gzip wordpress
2026/5/21 15:01:53 网站建设 项目流程
网站建设项目招标文件,gzip wordpress,提倡在局部,wordpress媒体缩略图大家在写脚本的时候#xff0c;经常会遇到突然冒出个加密参数#xff0c;然后就卡壳了。 有的人瞬间就不知所措就放弃了#xff0c;有的人愿意多花费半小时#xff0c;就成功逆向出来了。 前两天群友找我写个APP的脚本#xff0c;一开始都还挺顺利#xff0c;后面遇到了个…大家在写脚本的时候经常会遇到突然冒出个加密参数然后就卡壳了。有的人瞬间就不知所措就放弃了有的人愿意多花费半小时就成功逆向出来了。前两天群友找我写个APP的脚本一开始都还挺顺利后面遇到了个签名参数 sign 今天花了点时间给他折腾出来了讲一下思路很多简单加密都可以参考。这是个POST请求格式大致如下url https://****/api/sendIntegral body { phone: phone, integral: integral, token: token, sign: 982e876fc19b5d497376aa04a64cbe51cd4bd52ee0ab11919bf89b94c0a523aa }从上面可以看出 sign 是一串长度64个字符的字符串首先猜它是SHA256加密。为啥这样猜仅凭那丁点经验再凭借一点经验sign 是几个参数用 拼接再用SHA256加密得到的。我做了类似以下的尝试#随便排序SHA256(phone135***integral123token789)#按参数名的字母顺序排序SHA256(integral123phone135***token789)最终都得不到想要的结果所以可能的原因有2个一是加密算法不对二是加密参数不对或顺序不对。多次尝试后我感觉是加密算法不对应该是HmacSHA256 这个和 SHA256 不是一个东西最直观的区别是差个密钥其他区别自行查阅对比维度SHA256HmacSHA256密钥需求无需密钥仅依赖输入数据必须提供密钥密钥是计算的核心要素主要用途数据完整性校验如文件校验、密码存储哈希消息认证验证数据完整性 发送者身份安全性仅能确保数据未被篡改无法验证来源既能确保数据未被篡改又能验证来源合法性输出唯一性相同输入必产生相同输出相同输入 相同密钥才产生相同输出假设我的判断是对的我现在就需要个密钥才能计算sign值要这个密钥抓包是不可能抓得到的所以只能去从源码中去捞相关信息APP逆向我不会。凑巧它有小程序所以转战反编译小程序。关于反编译小程序查看这篇文章 微信小程序解包解包完成后只有以下内容大致翻一翻可以确认功能都在 app-service.js 里。为啥因为它体积最大打开这个js文件直接搜索我们要的那个POST请求的关键词sendIntegral找到以下相关代码块zhuanjifen: function () {var t this;this.$u.test.number(this.jisuanResult2) ? this.jisuanResult2 0 ? this.$u.toast(转赠数量必须大于0) : e.showModal({ title: 确认要向 this.info1.phone 转赠 this.jisuanResult2 个积分吗, success: function (n) {if (n.confirm) { e.showLoading({ title: 加载中..., mask: !0 });var o {}; o.token e.getStorageSync(token), o.phone t.info1.phone, o.integral t.jisuanResult2, o.descs1 t.dimensionInfo.entName 消费 t.moneyjisuan 元抵扣 t.dimensionInfo.bili % t.info1.phone, o.descs2 t.dimensionInfo.entName 消费 t.moneyjisuan 元抵扣 t.dimensionInfo.bili % t.userinfo.phone, o.money t.moneyjisuan, o.dimensionNo t.dimensionInfo.dimensionNo, o.bili t.dimensionInfo.bili;var i {}; i.token e.getStorageSync(token), i.integral o.integral;var a (0, d.generateSign)(i, yd9349); o.sign a, t.$u.api.sendIntegral(o).then((function (n) { e.hideLoading(),200 n.code ? (t.getUserInfo(), e.showModal({ title: n.msg, showCancel: !1 })) : e.showModal({ title: n.msg, showCancel: !1 }) })) } } }) : this.$u.toast(转赠数量格式有误请输入本次消费金额)注意上面代码块中的第20-24行。第24行定义了我们所需要的signo.sign。它来自于变量a 看起来是个奇葩的语法但我们明显看到了个字符串yd9349它就是加密的密钥所以这个加密算法是HmacSHA256。对于不懂js的我也实在看不懂但没事有AI AI告诉我的答案1. 语法解析(0, d.generateSign)(o, yd9349)外层括号 (0, d.generateSign)这是一个逗号表达式comma operator逗号表达式会按顺序执行多个操作并返回最后一个操作的结果。这里 0 是一个无意义的占位值真正有效的是d.generateSign因此整个表达式的结果等价于 d.generateSign即获取到 d 对象中的 generateSign 函数。函数调用 (o, yd9349)通过逗号表达式获取到函数后直接以普通函数的形式调用传入参数 o 和 yd9349。 2. 为什么要这样写核心目的统一 this 指向。****后面我也不会不看了哈哈 3. 等价写法这种写法等价于先将函数赋值给一个临时变量再调用var tempFunc d.generateSign; // 剥离函数与原对象的关联var s tempFunc(o, yd9349); // 以普通函数形式调用this 指向全局/undefined从上面的答案我们知道了真正执行的函数是d.generateSign参数为(i, yd9349)整理一下就是d.generateSign(i, yd9349)。 参数i 很明显就是由token和integral组成的21-23行。那现在就搜索generateSign找到其函数定义generateSign: function (e, t) {var a Object.keys(e).sort().map((function (t) {return .concat(t, ).concat(e[t]) })).join();return console.log(sortedParams, a), s.HmacSHA256(a, t).toString()}以上代码块第一行的参数e 即对应参数i参数t 即对应密钥“yd9349”。代码段的功能是1. 排序键名[integral, token]按字母顺序。2. 拼接参数integral100tokenabc123。3.生成签名通过 HmacSHA256 算法用密钥yd9349对integral100tokenabc123加密得到最终签名字符串。至此sign 的加密算法就逆向完了跑下脚本测试成功~写在最后这是收了茶水费的脚本APP和脚本就不方便分享了主要提供一个思路我觉得可以适用于很多简单的加密场景。这次比较简单不需要用到调试直接框框一顿搜就可以了。有时候你觉得自己不会就不研究了以后你再遇到依然不会。多研究多了解一点都是在积攒经验。这也只是我众多逆向尝试中的一次成功经验很多也是失败的。我没学过逆向也没时间沉下心学全靠每次多折腾那么半小时的行就行不行再说吧~- End -更多精彩文章点击下方名片关注【偶尔敲代码】

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询