一、在switch中插桩,先看大概日志信息有什么变化!
“case”,a[F+1],“stack”,Y
看见array一直递增!
数组变化
【视频35分】
我们就知道大概要插桩什么了,比如chartCodeAt,String.FromChartCode,parseInt等等操作。中间查看了数组里面数字被调换了很多。所以我们后期插桩就务必看到这些相关日志!
二、开始插桩!
我们先按照一开始说的,操作符先进行插桩!如下就是插桩位置!
整理断点!
最后打桩出结果看看case65
导出日志!js中的BLOB对象!
总结,插桩修改———置空再释放断点打印日志
第一步是插桩点如下!如下是将日志push进去!
分析日志
就是从结果上面看到是有一个码表,后面args:63,分析63怎么来的
这个7从哪里来,charAt(60)来,然后60又从上面来
然后看一下上面的数组怎么来的
542看看怎么来
发现这个数组就是,不断从字符串乱码中,不断chartAt的出来得,而这个乱码字符串是3位一组。分3组不断提取出来!
这里又突然说,这里做了其他算法得操作, 再base64得出结果得
前面算法都是重复的,不断运算符号,然后又不断索引取值!
现在就研究这个乱码字符串怎么生成得?尤其这个小3怎么生成的?
定位:找码表第一次出现的位置
上一张图暂时没用。。。因为课上找不到。直接浏览器日志找,找到“小3”是与0400b315有关。所以就找这个。
图中是这个0400b315,取6~8位得到15
发现是fromcharcode(179)得到的“小3”
然后就是跟0400b315有关, 这个是十六进制,取两位得到十进制! b3----21 15-----179
测试如下,发现这个就是十六进制!,上面就是0400b315,这个每次取两位,04十六进制就是4,b3和15如下!
接下来找这个怎么来的,有个小a开头的。
看到上面有个数组
找第一次乱码的地方:
取数组得 第12位 得到 145
141 ‘^’ 145 ‘=’ 28 再跟一开始 141 进行异或
向上找到数组取147
[].forEach((v, k)=>{if (v === 147) {console.log(v,k)}}) ------ 173
然后前面找不到173,还得继续网上找
看到了141,数组取141得到121。然后数组又取了147
然后取余12,从数组下标索引取12,得到数组的145.
然后145和141异或得到28
这里就找到两个数组的取值是147和121,但是没找着是为什么,所以笔记打问号
从上面找141。是从538索引得到。但是还要往上找。。。
路飞的这里就结束了,前面就是讲这个分析逻辑!其实视频没讲全!但是现总结如下:
总结是都做了什么操作运算?
1、看见码表以及左移2右移6,左移4右移4,就知道是base64算法
2、一开始给数组索引,追怎么的出来这个数组值?
3、就是乱码字符串不断定位索引取值得出数据。
4、长度和索引又异或或者|、&一系列操作取值。
5、0040b315是十六进制,然后转十进制取值