[ldvmp-js分析] 天天学习 但是也需要活动身体哦
一、为什么要使用AST
最近在学习 AST 做点案例 嘻嘻 主要是补环境没过Akamai 不能并发 每次过段时间就是-1 老火
最后还是通过了AST还原 做成了纯算 才过去 哎
二、纯算法vs补环境
纯算过的话调用起来速度快 但是需要调js耗时太久了 对一些严重的混淆脑壳疼 最重要就是可以无视环境检测
补环境过的话 要过检测就相当于写一个浏览器了 而且需要通杀的 那么你就要考虑了(环境代码4——8w 案例代码 7k-2w) 可想而知代码会多么的膨胀
但是过一些小中的案例 用补环境那真就是上帝视角
三、本次的主题
这次记录下一个案例 主要是学习噢噢噢噢噢噢噢噢
零点大佬vmp 喵喵vmp 检测版 我在这里只给方案 不提供还原代码 自己分析才有提升哦 网站
四、方向
这里面找算法不怎么难 但是你想要了解里面的原理还是很困难的
直接找算法原文 有个技巧 在所有的new的地方法下断点 会发现surprise 嘻嘻嘻
五、直接冲锋
使用AST工具
第一步 还原形参、函数名、变量名 还原后好分析 from:
to:
第二步 还原三元运算符、字符串乱码还原 其实还可以还原更多的我就没处理了 还原是为了后面的转化 from:
to:
第三步 还原所有if流程 用AST做成switch 这一步是最难的 (其实来说简单也简单 看你怎么写了)需要注意点因为里面有 --f f-- ++f f++ f
这个也需要把他记录 例如进入是5 到了关键点后变成了6 那么就是用到了
还原后是这样子的 我是之间按顺序从0到1119记录了
第四步 调试案例源码找出流程 浏览器使用firefox 是因为发现chrome和edge格式化是真的一塌糊涂
注意点:在浏览器调试时格式化是不会被检查的
chrome浏览器
edge浏览器
firefox浏览器
这里最好把源码保存到下来调试 保存方法右键网页后 选择点击查看网页源代码
1来不要给作者的服务器增加负担
2来自己可以观察
3最重要点 保存的后 不要格式哦不要动主js里面内容 应该会有检测
过下debugger 这里没做什么检测开启开发者选项 直接设置成false 有两处 这个debugger就只是经过了下
直接在while(1)下一行 下断点就可以了记录关键的变量名里面的存参 设置一个条件断点或者日志断点都可以 保存记录流程 挺多的流程
第五步 用的第三步的记录 对应流程取出来就可以了 我在这里面也写了注释 开始 => 终点 然后到这里就AST还原成功啦
第六步 可以看到作者已经告诉了是sha1算法 sha1算法 不就是填充 初始化缓冲区 80轮....
首先需要了解vmp逻辑 基本都是在 push pop unshift
都是在这上面做了处理
那么我们可以先定位下 unshift
可以看到有160次 这可能是因为vmp混淆后的缘故
然后可以看到 我们需要知道sha1 80轮运算 都会使用初始化缓冲区,并对它们进行更新 那么这个图里面的FuncD1_22这个就是关键点了 FuncD1_22_["unshift"];
搜索 FuncD1_22_ = 可以发现了一处 首先是声明了FuncD1_51_空数组
然后把里面都赋值了然后后面FuncD1_22_又做了一层处理 这可能是因为vmp混淆后的缘故
看我的图来 第一个 FuncD1_51_[0] = (FuncD1_0_ = 61) + 1732584132;
这个FuncD1_0_的意思就是 case 729: FuncD1_0_=729
1732584193 = 61 + 1732584132
这就是初始化缓冲区第一个数 这是10进制的 换成16进制就是0x67452301
最后成了 [1732584193, -271733879, -1732584194, 271733878, -1009589776]
初始化缓冲区
初始化缓冲区前 一般都是 512 位(即 64 字节)的消息块进行处理 而每个块又被分为 16 个 32 位字。getUint32
恰好可以用于将消息块中的字节转换为 32 位整数 我寻找后发现了
// 解码方法 mybuffer 这个赋值换成源代码上面的变量就可以了
mybuffer = ءࢭ;
myview = new DataView(mybuffer);
asciiString = '';
for (let i = 0; i < mybuffer.byteLength; i++) {
let byteValue = myview.getUint8(i);
if (byteValue !== 0) {
asciiString += String.fromCharCode(byteValue);
}else{
asciiString += 0
}
}
console.log(asciiString);
最终得出了这些 专业版按照检测版一样还原也可以的实现
surprise 是原文 后面都是盐(不是在菜上面加的盐)
检测版 surprise@Mozilla5+FCPO1zDQ
专业版 surprise@Mozilla5*D;Y\'lHO
检测版
专业版