javascript应用实例分析

这篇文章主要讲解了“javascript应用实例分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“javascript应用实例分析”吧!

创新互联公司专注于企业营销型网站、网站重做改版、铁力网站定制设计、自适应品牌网站建设、html5商城建设、集团公司官网建设、成都外贸网站建设、高端网站制作、响应式网页设计等建站业务,价格优惠性价比高,为铁力等各大城市提供网站开发制作服务。

javascript应用实例分析

递归方式+混淆+简单扁平化

首先市面上有混淆工具可以达到这个效果,我自己也基于ast写了一个混淆工具,扯远了,我们来看下他这个都是数组方式读取字符串,在源码搜索的时候

我们发现了他初始化的位置,

javascript应用实例分析

因为他是动态解析的这个数组,我们只需要拿到他数组的成员放进去就行了,

javascript应用实例分析

其实我看到这里是很疑惑的,这个字符串竟然没有加密码,赤裸裸啊。

然后我们把字符串数组手动赋值之后我们拷贝这一段js到我写的混淆还原工具来看看

javascript应用实例分析

没压力,瞬间还原,工具自动计算作用域替换的。然后我们粘贴到notepad看看

javascript应用实例分析

这么看的话基本上他的所有东西都出来了,万事俱备,就差调试, 我们把这还原出来的js 替换上去,怎么替换呢,就是把昨天分析的ret = eval (伪代码把这个直接拷贝上去就行了,这样也方便调试。刷新之后debugger我们忘了处理,直接跳过算了,然后我们看到了这个

javascript应用实例分析

然后本着测试的精神,我又刷新了七八遍,发现一个问题

javascript应用实例分析

这个页面我是和js一起保存的并没有从服务器拉取最新的然是依旧可以正常使用,因为他有两处,我们尝试下这个

javascript应用实例分析

这段如果固定了js直接报错,不固定正常加密,这就头大了,因为这是一段加密后的字符串我们不管他是什么反正一会都要解密我们先不管。

到了现在我们可以固定的调试他的第一层解密出来的js,因为大家都知道他的url是hook过的,也就是业务和反爬是分开的,所以我们不需要刷新页面来让他走到断点,我们可以这样

javascript应用实例分析

我们在控制台模拟他的其中一个接口然后回车

javascript应用实例分析

已经成功请求了,我们看他提交部分

javascript应用实例分析

到这里说明是任意的url,因为他是hook了ajax的api而他又是可以任意url不限制的,我们可以使用xhr断点

javascript应用实例分析

点击这个加号我们设置好他请求包含指定字符串的url就会断下来

$.get("/tmrpToken.token")

然后控制台回车

javascript应用实例分析

断在了真正提交url的地方,我们看到他是this.send 

javascript应用实例分析

我们看到他的this就是XMLHttpRequest 对象,看到他的url已经完全计算好了

javascript应用实例分析

顺着堆栈看,我们先看send,点进去我们把断点下到这里,因为他的变量之类的是根据作用域算的,复杂的话从头来算比较好,上层变量有可能会重叠

,下好断点我们在重新提交一次

javascript应用实例分析

第二次提交我们可以看到非常干净,我们按f10单步走

javascript应用实例分析

走到这一行我们发现url出现了

javascript应用实例分析

非常清楚他在231这个对象,我们往上看

javascript应用实例分析

他在这个函数执行完就有了我们进去这个函数下断点看看

javascript应用实例分析

我们f10单步发现他直接最后了,再进去这个函数继续_$7e

javascript应用实例分析

传入三个参数

javascript应用实例分析

继续单步

javascript应用实例分析

又一个_$p5,继续

javascript应用实例分析

还是三个参数一样,然后有个Function,我们抠出来看下

javascript应用实例分析

new一个函数然后传进去三个参数,还是这三个参数

javascript应用实例分析

生成一个参数一调用参数二方法,传入参数三我们看下这三个参数

javascript应用实例分析

我们可以直接这样

javascript应用实例分析

打印出位置我们双击进去

javascript应用实例分析

断点进去之后我们看

javascript应用实例分析

这个函数没有什么蹊跷,继续走下去

javascript应用实例分析

this._$oM = arguments[1] = _$ok(arguments[1])[0];

隐藏的很深啊

javascript应用实例分析

我们跟进去这个函数

javascript应用实例分析

然后我们单步发现他走到这里就有结果了我们看下它穿的参数

javascript应用实例分析

姑且认为参数2有用,我们看下参数2那里出来的

javascript应用实例分析

参数2我们看下他的参数

javascript应用实例分析

var _$s2 = _$HW(_$59(_$qt("/tmrpToken.token")));

我们看看

_$qt

javascript应用实例分析

编码剩下的不管他是什么 函数,到时候直接扣就行了,我们只分析

到现在我们看到了_$HW,_$59,_$6p这三个是加密用的,至于内部逻辑,先不管,先测试下能不能加密

javascript应用实例分析

把他单独拿出来,然后写一个加密函数

function url_encry(_$di){  var _$s2 = hm._$HW(hm._$59(encodeURIComponent("/tmrpToken.token")));  return hm._$6p(769, 0, _$s2, _$di);}

javascript应用实例分析

感谢各位的阅读,以上就是“javascript应用实例分析”的内容了,经过本文的学习后,相信大家对javascript应用实例分析这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是创新互联,小编将为大家推送更多相关知识点的文章,欢迎关注!


新闻标题:javascript应用实例分析
文章分享:http://myzitong.com/article/jehddc.html