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

某易九批x-sign逆向wasm分析

仅供学习使用,如有侵权,联系删除文章!!!

仅供学习使用,如有侵权,联系删除文章!!!

url = aHR0cHM6Ly93d3cueWlqaXVwaS5jb20vIy9pbmRleC9saXN0P3NlYXJjaEtleT0lRTglOEMlODUlRTUlOEYlQjAmZmlyc3RDYXRlZ29yeUlkPSZzb25DYXRlZ29yeUlkPSZicmFuZElkPSZpbWduYW1lPQ==

来到这个网站,这个网站也是更新了一波,之前是没上wasm的,首先是一个debugger,直接hook过掉。

Function.prototype.__constructor_back = Function.prototype.constructor ; Function.prototype.constructor = function() { if(arguments && typeof arguments[0]==='string'){ //alert("new function: "+ arguments[0]); if( "debugger" === arguments[0]){ // arguments[0]="consoLe.Log(\"anti debugger\");"; //arguments[0]=";"; return } } return Function.prototype.__constructor_back.apply(this,arguments); };

找到需要的数据包,如果直接去请求,会出现419的响应状态码观察到请求头中有有一些需要分析的参数这里直接搜索定位到参数生成位置首先是"x-sign-timestamp"和"x-sign-nonce"参数,这里是主要的生成逻辑

for (var c = [], i = "0123456789abcdefghijklmnopqrstuvwxyz", u = 0; u < 36; u++) c[u] = i[r(416)](Math["floor"](16 * Math[r(378)]()), 1); c[14] = "4", c[19] = i[r(416)](3 & c[19] | 8, 1), c[8] = c[13] = c[18] = c[23] = "_"; var s = c[r(410)]("") , d = (new Date)[r(386)]() / 1e3 , l = parseFloat(localStorage["getItem"]("local_init_time") || d) , f = parseFloat(localStorage["getItem"]("server_init_time") || d) , p = f + (d - l); p = (p + "")[r(389)](".")[0],

s就是"x-sign-nonce",p就是"x-sign-timestamp","x-sign"是由e["a_h"](y, g)生成的,y就是"x-sign-timestamp",g = e[r(411)](v, t["url"], p, s, m)

这个里面m是对请求参数做了一个sha1加密, e[r(411)]方法里面就是一个wasm

function h(e, n, t, a, i) { var o, u; try { var _ = l(e, r.__wbindgen_malloc, r.__wbindgen_realloc) , s = c , f = l(n, r.__wbindgen_malloc, r.__wbindgen_realloc) , d = c , b = l(t, r.__wbindgen_malloc, r.__wbindgen_realloc) , w = c , y = l(a, r.__wbindgen_malloc, r.__wbindgen_realloc) , v = c , h = p(i) ? 0 : l(i, r.__wbindgen_malloc, r.__wbindgen_realloc) , m = c , x = r.b_r(_, s, f, d, b, w, y, v, h, m); return o = x[0], u = x[1], g(x[0], x[1]) } finally { r.__wbindgen_free(o, u, 1) } }

将wasm文件下载下来做导出调用就可以了,这样就得到了g,然后通过e["a_h"]加密就得到了需要的x-sign,e["a_h"]就是这个y函数。

function y(e, n) { var t, a; try { var i = l(e, r.__wbindgen_malloc, r.__wbindgen_realloc) , o = c , u = l(n, r.__wbindgen_malloc, r.__wbindgen_realloc) , _ = c , s = r.a_h(i, o, u, _); return t = s[0], a = s[1], g(s[0], s[1]) } finally { r.__wbindgen_free(t, a, 1) } }

最后看一下实现的效果如果加密参数有问题的话,请求一般是报403,报419一般都是时间戳的问题。

http://www.jsqmd.com/news/421953/

相关文章:

  • 智能体平台“三驾马车”:RAG、Workflow与Agent从入门到精通,收藏这一篇就够了!
  • 数学中的长度单位认识与应用:厘米与米
  • YOLO26改进44:全网首发--添加C3k2_MogaBlock:以更优的复杂度-性能平衡实现信息丰富的上下文挖掘
  • 2026年2月自动化厂家实战报告:主流服务商技术集成度及项目交付效能对比
  • 区间的线段并珂朵莉树
  • 2026年自动化厂家推荐榜单:覆盖高端制造与新兴能源,90%客户复购率的十强权威认证
  • 白酒度数竟不是按口感定的?原来我们都被忽悠了
  • 2026年2月PLC厂家实战报告:主流品牌产品性能及行业适配度对比
  • Dify搭建ChatFlow制作知识库
  • 2025板材工厂哪个好 - 品牌推荐(官方)
  • 系统梳理DDD(领域驱动设计)在复杂业务中的落地难点
  • 市面上有实力的2026板材品牌哪家专业 - 品牌推荐(官方)
  • 《变形记》就让我成为野兽,回归原始
  • 基于能量的模型(EBM):用能量函数替代概率分布的建模框架
  • STM32信号发生器:Matlab波形生成与DMA传输至DAC引脚输出
  • 勒让德公式
  • 数据同步怎么做 - 智慧园区
  • 基于flask和python框架的高校团支部团务管理系统-vue pycharm django
  • SSH 免密登录快速教程
  • 基于flask和python框架的高校教材征订管理系统的设计与实现-vue pycharm django
  • 基于flask和python框架的服装销售商城平台-vue pycharm django
  • 使用Quick3D粒子的雨效果
  • 基于flask和python框架的求职招聘网站-vue pycharm django
  • 2D渲染-介绍Qt Canvas Painter
  • 基于flask和python框架的热门车型汽车推荐网站-vue pycharm django
  • 2026年2月拱形拼装钢波纹管供货厂家,涵洞工程资质案例解析 - 品牌鉴赏师
  • 保姆级AI编程提示词教学!前端开发专属,粘贴即用高效提效
  • 2026银狐(SilverFox)病毒防护服务公司推荐排行 品质臻选榜 智能预警/全周期运维/跨国适配 - 极欧测评
  • Qt Quick认证测试已发布
  • RAG、Agent、MCP、Skill一句话讲清_AI_底层