aHR0cHM6Ly9mZW5iaS5jb20vcGFnZS9ob21ljavascript
参数加密的逻辑分析
先抓包看看此次分析的参数【图1-1】java

这个参数的值看着像Base64
,咱们不急着下结论,先搜索参数名看看。python
有读者朋友纠结于搜索password = or password:
这样须要搜索两遍是否是浪费时间了,不如直接搜索password
来的方便快捷。web
咸鱼之因此这样搜索是出于本身的习惯,定位加密位置的方法有不少你们有兴趣能够多尝试不要局限于搜索参数,例如:Js Hook,XHR 断点等等,怎么舒服怎么来就好。微信
通过搜索参数名password:
在一个文件中定位到 3 处疑似加密的位置。【图1-2】app

这里有两种方法判断加密位置:编辑器
给全部搜索到的结果打上断点,再次刷新看看进入到哪一个断点当中函数
阅读上下文,分析大概的代码逻辑测试
咱们用第一种试试,打上断点从新发起请求,能够看到成功断上了。【图1-3】网站
这里的this.password
是测试的密码,咱们须要分析的就是这个this.encrypt
的逻辑是什么样的。

咱们进入到this.encrypt
这个函数中,发现有熟悉的 RSA 加密标志this.publicKey
【图1-4】

在文件中再搜索一次publicKey
,可以看到文件中已经声明了这个变量【图1-5】

继续进入到函数内部查看逻辑,发现进入的就是加密逻辑的文件了。【图1-6】

这一整个流程分析下来,能够发现前面的传参部分,在Python
调用中咱们彻底能够跳过,只要给【图1-6】中的Js加密逻辑传入publicKey
与明文密码
就能够实现这个网站的密码加密逻辑了,既然这么简单,咱们就动手试试。
参数加密的代码实现
接上面的分析,咱们直接复制了【图1-6】截图所示的所有代码。
接着在编辑器中加上一些咱们本身的逻辑相似这样【图2-1】。

注:前939行都是复制的 Js 文件代码
试着运行一下,看看报错。
运行的报错提示,window is undefine
【图2-2】,遇到这种状况咱们能够试试在代码上加上window
的声明。

var window = {}
再次运行看看,这里再次提示{} is not a function
,【图2-3】到这里新手朋友有点慌了,不知道怎么处理。

比较方便的处理方式是直接在(function(av) {
前加上!
,就是这么简单。
具体用法,这里套用一下百度:
使用括号包裹定义函数体,解析器将会以函数表达式的方式去调用定义函数。也就是说,任何能将函数变成一个函数表达式的做法,均可以使解析器正确的调用定义函数。而 ! 就是其中一个,而 + - || 都有这样的功能。
继续调试,此次提示变成了navigator is not defined
【图2-4】

有了上次的经验,咱们在代码里加入声明navigator
。
var navigator = {}
再次运行就获得加密后的结果咯~【图2-5】

总结
此次的加密是比较简单的 RSA 加密,使用文件中包含的公钥对密码的值进行加密,且Js代码没有进过混淆,适合新手练手增长手感。

本文分享自微信公众号 - 咸鱼学Python(xianyuxuepython)。
若有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一块儿分享。