猿人学第二题记录
加密分析
**首先还是抓包来查看明文的数据返回
找到返回数据的请求,查看它的请求头,发现是get请求(验证发现不能直接请求,去看它的cookie
通过多次对比调试,发现就是m是主要的cookie,前一个带的是一个10位的时间戳,m是一个加密+“|时间戳”
cookie的话可以直接使用hook,定位到这个cookie生成的地方,再进行跟栈
这里hook工具用的是fiddler中的编程猫插件
跟栈到生成的位置,可以发现这句话特别长
先输出看看各个函数的值,看m是在哪儿生成的,稍微整理了一下,相当于是函数中传了一个函数的参数,找到了最里面传入的值:
通过对其中的内容逐渐的输出,可以看到找到了这个m的值:
那么m的值就是下面这个代码 + “|” + 时间戳
扣代码
首先将加密的那段地方扣下来,发现传入的第二个参数就是13位时间戳,可以直接先写死
先将目前能看见的缺少的函数扣下来,运行之后再缺啥补啥
记得加上 window = global
再将其他的继续扣下来
再补了这个之后出现了内存占满的情况,所以应该是在某个地方进入了死循环,可以在浏览器中运行代码(防止因为nodejs中环境问题导致),打断点调试看看
运行到这里的时候,发现一直在这个for循环中,所以看看是如何进入到这个循环的
找了一下关系之后,发现有一个判断,发现可能是上面这个三元表达式在捣鬼
于是直接将前面这个判断的值改为true试试,发现能继续执行后面的语句了,出现了新的未定义函数
混淆中有时候会对混淆的顺序进行打乱,于是将这个自执行函数添加到代码中,发现又内存溢出了,现在又进行debug调试
直接在这个函数前面打上断点调试,发现进了“setCookie”之后又出不去了,于是查看是因为什么导致的
发现是在这里导致的,取决于_0xa791b4的值,原本是false,现在我将他改为true试试
发现不再进入循环了
在添加这个函数之后,发现这个函数出现了报错,将这个函数后的括号删掉,有括号就是一个自执行函数,其中有的内容确实还未定义。
再继续补了好多之后,出现了:
将它补充在最上面
window.navigator = {}
后面又继续补代码,可以这样缩起来再复制,不然容易漏掉
终于当我补完了代码之后,使用console.log进行输出的时候,出现了这个错误:
于是在console哪里打上断点调试一下
进入之后是这个,重写了console并塞了个死循环
于是我学习了一下别人的写法
所以我使用了下面这种输出格式:
log = console.log //写在最前面,这样虚拟机里
log(a)
然后将时间戳和"|"补上
然后在python中调用,获得数据: