这篇文章主要讲解了“javascript应用实例分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“javascript应用实例分析”吧!
递归方式+混淆+简单扁平化
首先市面上有混淆工具可以达到这个效果,我自己也基于ast写了一个混淆工具,扯远了,我们来看下他这个都是数组方式读取字符串,在源码搜索的时候
我们发现了他初始化的位置,
因为他是动态解析的这个数组,我们只需要拿到他数组的成员放进去就行了,
其实我看到这里是很疑惑的,这个字符串竟然没有加密码,赤裸裸啊。
然后我们把字符串数组手动赋值之后我们拷贝这一段js到我写的混淆还原工具来看看
没压力,瞬间还原,工具自动计算作用域替换的。然后我们粘贴到notepad看看
这么看的话基本上他的所有东西都出来了,万事俱备,就差调试, 我们把这还原出来的js 替换上去,怎么替换呢,就是把昨天分析的ret = eval (伪代码把这个直接拷贝上去就行了,这样也方便调试。刷新之后debugger我们忘了处理,直接跳过算了,然后我们看到了这个
然后本着测试的精神,我又刷新了七八遍,发现一个问题
这个页面我是和js一起保存的并没有从服务器拉取最新的然是依旧可以正常使用,因为他有两处,我们尝试下这个
这段如果固定了js直接报错,不固定正常加密,这就头大了,因为这是一段加密后的字符串我们不管他是什么反正一会都要解密我们先不管。
到了现在我们可以固定的调试他的第一层解密出来的js,因为大家都知道他的url是hook过的,也就是业务和反爬是分开的,所以我们不需要刷新页面来让他走到断点,我们可以这样
我们在控制台模拟他的其中一个接口然后回车
已经成功请求了,我们看他提交部分
到这里说明是任意的url,因为他是hook了ajax的api而他又是可以任意url不限制的,我们可以使用xhr断点
点击这个加号我们设置好他请求包含指定字符串的url就会断下来
$.get("/tmrpToken.token")
然后控制台回车
断在了真正提交url的地方,我们看到他是this.send
我们看到他的this就是XMLHttpRequest 对象,看到他的url已经完全计算好了
顺着堆栈看,我们先看send,点进去我们把断点下到这里,因为他的变量之类的是根据作用域算的,复杂的话从头来算比较好,上层变量有可能会重叠
,下好断点我们在重新提交一次
第二次提交我们可以看到非常干净,我们按f10单步走
走到这一行我们发现url出现了
非常清楚他在231这个对象,我们往上看
他在这个函数执行完就有了我们进去这个函数下断点看看
我们f10单步发现他直接最后了,再进去这个函数继续_$7e
传入三个参数
继续单步
又一个_$p5,继续
还是三个参数一样,然后有个Function,我们抠出来看下
new一个函数然后传进去三个参数,还是这三个参数
生成一个参数一调用参数二方法,传入参数三我们看下这三个参数
我们可以直接这样
打印出位置我们双击进去
断点进去之后我们看
这个函数没有什么蹊跷,继续走下去
this._$oM = arguments[1] = _$ok(arguments[1])[0];
隐藏的很深啊
我们跟进去这个函数
然后我们单步发现他走到这里就有结果了我们看下它穿的参数
姑且认为参数2有用,我们看下参数2那里出来的
参数2我们看下他的参数
var _$s2 = _$HW(_$59(_$qt("/tmrpToken.token")));
我们看看
_$qt
编码剩下的不管他是什么 函数,到时候直接扣就行了,我们只分析
到现在我们看到了_$HW,_$59,_$6p这三个是加密用的,至于内部逻辑,先不管,先测试下能不能加密
把他单独拿出来,然后写一个加密函数
function url_encry(_$di){ var _$s2 = hm._$HW(hm._$59(encodeURIComponent("/tmrpToken.token"))); return hm._$6p(769, 0, _$s2, _$di);}
感谢各位的阅读,以上就是“javascript应用实例分析”的内容了,经过本文的学习后,相信大家对javascript应用实例分析这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。