JSVMP
我又是很长时间没更博客了 今天讲jsvmp,这个玩意算是现在保护js代码最大的工具之一吧 vmp大家应该都知道 就是虚拟机 其实一样是混淆控制流 但是如果你想去跟这个玩意呢 那么可能你跟个一两天都不一定能搞出来 跟栈还需要很强大的经验的和耐心,废话不多说 开始
一、抓包
1.打开网址 直接百度搜索猿人学就好 翻到18题
2.打开发f12调试工具 第1页是没有v这个参数 点击第二页就有v这个参数 这个参数就是我们今天的目标了
二、进入代码段
1.下XHR断点
1.xhr断点不会下的 去看我前面的文章
2.然后下一页 让他断下来
3.我是在这个匿名函数这里去跟栈的
在这重新把断点下在那个匿名函数上面 问我为什么要在这里断 这里你可以去看看前面的栈 其实很容易发现 这个不懂在私信我 现在断在这个匿名函数这里之后 我们就去跟栈 跟栈就进入我们今天要逆向的逆向函数了
一直往下面跟 你就发现这个 函数了 后面问我们再来分析和解决
2.分析和解决
1.分析
他这个函数呢 你也可以跟看一下他的一些逻辑 他这个逻辑还是比较底层的
最后你跟了半天你会发现 你在浪费时间 不过对新手还是有很大的帮助的
我的调试过程 :
反正几乎我所有想要调试的代码,都会指向这里,什么encrypt等函数,都会进入到这里来,一步一步的走有灰常繁琐,并且当看到希望时,又是给你指向到这里,而且被加密的参数在你进入这个函数前就已经生成,但是还是得调试调试。反正我比较喜欢在逆向的过程的当中看到缝子我就钻进去了 搞定一种方法之后我才会去搞第二种方法 今天也是给你们讲钻缝子这种方法 还有一种不讲 公开讲不划算
2.解决
利用hook去解决他 不会hook的 看我前面的文章
注意这个参数
细心的话会发现那个特殊的函数传进来的第一个参数""的组成有些眼熟,[1][0]是一个CryptoJS对象,虽然找不到在哪里生成的,但是大概可以确定这是一个AES加密了,并且填充方式为pkcs7。都知道是那个加密了 看过我以前文章的人都解决了吧 hook思路不就来了嘛
var hauye= _[1][0]['CryptoJS']['AES'].encrypt;
_[1][0]['CryptoJS']['AES'].encrypt = function(a, b, c, d, e) {
debugger;
var xxx = huaye(a, b, c,d,e);
debugger;
console.log(huaye.toString())
return xxx;
};
这个代码需要解释的 私信我 我私下解释 因为大多数人都看得懂
这个玩意很容易就hook进来了 我们就要拿key 和 iv 值嘛 还原就好了
_[1][0]['CryptoJS'].enc.Utf8.stringify(a)
"2|254m256,253m257,252m258,252d258,252u258"
2就是页面嘛 其他的参数应该可以写死 这个玩意就是key
_[1][0]['CryptoJS'].enc.Utf8.stringify(b)
"6205309c6205309c"
这个玩意就是iv
总结
没啥太大的难度的 思路决定难度的 关注我公众号 我公众号可以对你们想看的文章投稿哦 感谢大家观看 双击三连哦