本分析过程仅供学习交流使用,切勿用于非法行为
关注公众号可以加我微信,加入群聊等,了解更多关于网络爬虫与逆向工程的知识
python版本:python3.7
最新版nodeJs
目标站点:aHR0cHM6Ly93d3cuemhpcGluLmNvbS9jMTAxMjgwMTAwLXAxMDAxMDEv
本文只针对__zp_stoken__的加密分析
3-1.寻找加密点
一顿操作可以看到我们要找的函数入口是在这里
code = (new ABC).z(seed, parseInt(ts) + (480 + (new Date).getTimezoneOffset()) * 60 * 1e3)
经过本人的分析后面这段(480 + (new Date).getTimezoneOffset()) * 60 * 1e3的值为0没啥用,所以本次的函数入口就是
code = (new ABC).z(seed, parseInt(ts))
这也太短了吧,是不是有点瞧不起人
别着急他其实很长,我们追进去就是映入眼帘的js控制流平坦化
应对js控制流平坦化有两种方法:
第一种是将那些几万行的垃圾代码全部转为短小的代码(代码阉割)
第二种方法是直接硬刚,调试进去(不就是读代码吗有啥难的)
现在我们选择硬刚,就是干
追进去后就是密密麻麻的代码,这代码写的连他妈都不认得,一个switch写了两千多行
本文到此结束!!!!!
遵循的原则是缺啥补啥,下面我们来说一下补环境中需要注意的点
利用Js Proxy吐出一部分环境
window = new Proxy(window, {
get: function (x, y) {
console.log(y)
return x[y]
},
set(target, p, value, receiver) {
target[p] = value
}
})
hook一下常用的Math和Date函数 因为参数__zp_stoken__是动态的所以时间戳必定在里面
全局搜索typeof 全局搜索try catch 正则搜索.*[.*](.*)
通过以上几步的操作能将90%的环境搞定,但是生成出来的__zp_stoken__依旧不能百分百有效,这证明还是有缺漏,如果想要知道具体原因,关注公众号可以获取这部分
Js代码里面有webdriver和PhantomJS的检测
有对screen的检测
有对nodejs的检测(这个很骚) 除此之外还有__filename,Buffer等等 在浏览器里面这个是undefined,而在nodejs里面这是个特定的模块
最后看一下结果百分百成功
如果觉得本文有用可以赞赏作者,如果你对操作有疑问,或者需要我编写的源码进行辅助分析,请关注公众号在页面加我微信
欢迎关注"python网络爬虫大数据与逆向工程"公众号,一起学习更多关于网络爬虫和逆向工程方面的知识



