PX3 参数生成之 wasm 函数中的参数D 的生成
打断点之后看到函数的调用栈,使用main.js 中的函数 I0I0I0
,调用captcha.js中的函数
o(a(362)) ==> PX1135
Ic反混淆之后的代码如下
1 |
|
往上面追栈发现I0I0I0
的参数就是t 中对应的行 参数之间用|
分割
往下走发现创建了worker 线程
查看解混淆后的代码逻辑
首先
y
值一个根据K 和$i = 1 === e ? 1 : e / 2
算出来的一个array形如:
1
2
3
4
5
6
7
8
9
10
11
12
13[
{ start: 0, end: 190650 },
{ start: 190651, end: 381301 },
{ start: 381302, end: 571952 },
{ start: 571953, end: 762603 },
{ start: 762604, end: 953254 },
{ start: 953255, end: 1143905 },
{ start: 1143906, end: 1334556 },
{ start: 1334557, end: 1525207 },
{ start: 1525208, end: 1715858 },
{ start: 1715859, end: 1906509 },
{ start: 1906510, end: 2097152 }
]遍历传值到匿名函数中去
ai, 和1中的D组成一个参数 以[D[“start”], D[“end”], C, Q, s, G, E, I, n] 的形式传入function (n, D)
function (n, D) 返回
"(" + n["toString"]() + ").apply(null, " + JSON["stringify"](D) + ")";
也就是
"(" + ai["toString"]() + ").apply(null, " + JSON["stringify"]([D["start"], D["end"], C, Q, s, G, E, I, n]) + ")";
5. 替换字符串["replace"](poi["name"], poi["toString"]())["replace"](sha256["name"], sha256["toString"]()
因为ai 函数有调用poi 函数
1 |
|
此处将poi 的函数名替换为函数定义,也就是把相关代码放到一起
然后将这个函数作为第一个参数,
匿名函数作为第二个参数
这个参数作为错误处理函数 传入Ni
Ni 的作用就是 创建一个worker
这里可以看到函数的定义和传值
函数的返回值通过postMessage 将数据通过nw
函数的返回值赋值给Vi
1 |
|
worker 中的代码稍微更改一下,再根据 DW 中的传值,就可以把这个函数的生成逻辑补全。