声明:
该文章为学习使用,所涉及的任何内容严禁用于商业用途和非法用途,违者后果自负,由此产生的一切后果均与作者无关。
本文章未经许可禁止转载,禁止任何修改后二次传播,擅自使用本文讲解的技术而导致的任何意外,作者均不负责,若有侵权,请联系作者立即删除!
前言
本文是对于某里的x82y,也可以说是淘系的231滑块的逆向分析,
直接调肯定是很难调的,里边有近乎无数个三元的嵌套,
需要先将所有三元转if,然后if转switch,转完后D函数里边一眼看去就都是三层的switch了
之后再将三层转一层,字符串混淆解密,递归字符串解密,虚假节点去除,有能力的也可以再把最后一层还原为顺序语句。
细节方面由于流程很长,并且网上已有不少关于这方面的文章
这里只讲下虚假节点去除的思路
具体文章后期会更新至星球内,欢迎各位一起来交流探讨技术实现细节
虚假节点
最初是打算在每个case里边加个输出语句,但出来这个想法后立马就被制止了
- 一 是因为会输出非常多的内容
- 二 是因为这样做并不能够找到虚假节点
随后调整思路,打算全局维护一个map
map里边的key,为case值,value则均为空,
只有当被访问过后,value才会被置1,
多次过滑块之后,看哪个键的值不是1,
便可确定它是虚假节点,至于怎么安插,这就仁者见仁智者见智了,我这里是用的ast
const keysOfInterest = Array.from(nodeMap)
.filter(([key, value]) => value !== "1")
.map(([key, value]) => key);
console.log(keysOfInterest)
最终格式化代码三次测试
未格式化的代码三次测试
大概得到两千多个虚假的节点
替换去除之后的文件,还能正常跑通,说明没有什么问题
随后就可以开始正常分析了
结果
星球入口:
action = 'please base64'
url = 'aHR0cHM6Ly90LnpzeHEuY29tL0dFSXpl'
此外
let thing = '资料'
let action = '私聊'
let isFree = false
let v = 'QCJ04027856'