接上js逆向心路历程(一)
现在我们会了js的必经之路 (全局搜索 定位 断点 测试 得到结果)
但其实别人设计网站的也会知道我们要这样 逆他们的加密,那么他们就会在这些步骤中加大我们的时间成本,测试成本。
设计网站,跟我们爬虫其实就是 盾与矛 双方都有成本预算,只要他们的加密成本足够大,他们就不会再加强了,甚至可能会减弱,因为生意的本质是赚钱。(当然了他们成本加大了,我们的时间成本也会变大)
比较难的网站:某宝,某点评,某团等,还有一些 .gov 的网站在我们按f12 的时候他就会断点卡住,不让我们看f12的信息,对于这些网站我仍需努力学习。
那么进入今天的主题
第一个网站
老套路,填入账号密码 按 f12 登录抓包
然后我们去搜这个uPwd 发现啥东西也不是
当我们点击进去的时候发现搜索这个Pwd有135个那么多,这肯定不是我们想要的
方法一:那就使用上篇文章的技巧,搜索 js 加密的灵魂 encrypt
我们发现无论 uPwd 还是 encrypt都是指向 这个loginNew.js 文件,我们可以肯定我们要的逻辑在这个js里
方法二:当然了这里还有一种方法可以确定是这个js文件
回到一开始抓包的位置,我们将鼠标移到 validate这个包的 Initor 的位置,这个其实叫关联包,然后我们需要的包 通常的名字都是 带login字样 或者这种 (anonymous(英文:匿名))的东西里
然后我们找到这里,确定这里的原因(因为有pwd,有aesEncrypt(val) )那就可以尝试刷新了发现可以断下
而我们只需要知道这个$(this).aesEncrypt(val) 的全部参数就可以得到我们的结果了
然后修改下
这就是我们 js逆向 的初始模样了
同样的步骤,找到aesEncrypt里面的所有参数 然后就可以了
e就是我们的pwd ,然后找到其他就好了
点进去然后我们看到整个js的头部和尾部
头是申明一个变量,尾是 赋值一个变量然后最后是 以 })();
这种模式结尾的,其实就是整个 js 的调用
我们将整个复制下来然后运行就得出结果了
最后一步就是判断了
第二个网站
https://dynamic2.scrape.center/page/1
我们要获取里面的电影条目 但他是 ajax 加载的内容 所以还是抓包
同样的 全局搜索
找到了断点位置并断点刷新
我们只需要找
很明显后面那个东西就是网站的api带入进去的
然后找前面的object
到了这里,我们其实就发现已经不需要运行 js 的文件了,因为这段代码逻辑很简单,我们单纯在python中模拟也可以
我们来分析一下
return的是c 那么c需要的是 n 这个函数
而我们发现 n这个函数他包含了很多加密技术
然后 t 是时间截
r是一个数组,数组里面的东西就是 (for…)这个东西生成的
import hashlib,base64,time
def gettoken():
ts = time.time()
e = 1
r = ["/api/movie",str(ts)]
o = hashlib.sha1(",".join(r).encode('utf-8')).hexdigest()
c = base64.b64encode((",".join([o,str(ts)]).encode('utf-8'))).decode('utf-8')
print(c)
gettoken()
# MWRmYzE2MmRjNTQzMjA5YTdkNDM1ZWIyNzQzMWEwMmQ3MzcwZWIxYSwxNTk3MTMzOTEwLjE0NDM1OTQ=
因为加了时间截所以无法测试是否相同,但可以请求到ajax的数据
同样是这样的 逻辑,我们看看更难一点的 js 文档
https://dynamic6.scrape.cuiqingcai.com/
这个网站就将所有函数编程了16进制的加密变得难以观看,但我们仍然能查找相同复制
断点在同样的位置,也是能断的
然后步骤也跟上面的一样了