Python爬虫进阶必备 | X笔网密码加密分析

aHR0cHM6Ly9mZW5iaS5jb20vcGFnZS9ob21l

参数加密的逻辑分析

先抓包看看这次分析的参数【图1-1】

这个参数的值看着像Base64 ,我们不急着下结论,先搜索参数名看看。

有读者朋友纠结于搜索password = or password:这样需要搜索两遍是不是浪费时间了,不如直接搜索password来的方便快捷。

咸鱼之所以这样搜索是出于自己的习惯,定位加密位置的方法有很多大家有兴趣可以多尝试不要局限于搜索参数,例如:Js Hook,XHR 断点等等,怎么舒服怎么来就好。

经过搜索参数名password:在一个文件中定位到 3 处疑似加密的位置。【图1-2】

图1-2

这里有两种方法判断加密位置:

  • 给所有搜索到的结果打上断点,再次刷新看看进入到哪个断点当中

  • 阅读上下文,分析大概的代码逻辑

我们用第一种试试,打上断点重新发起请求,可以看到成功断上了。【图1-3】

这里的this.password是测试的密码,我们需要分析的就是这个this.encrypt的逻辑是什么样的。

图1-3

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

图1-4

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

图1-5

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

图1-6

这一整个流程分析下来,可以发现前面的传参部分,在Python调用中我们完全可以跳过,只要给【图1-6】中的Js加密逻辑传入publicKey明文密码就可以实现这个网站的密码加密逻辑了,既然这么简单,我们就动手试试。

参数加密的代码实现

接上面的分析,我们直接复制了【图1-6】截图所示的全部代码。

接着在编辑器中加上一些我们自己的逻辑类似这样【图2-1】。

图2-1

注:前939行都是复制的 Js 文件代码

试着运行一下,看看报错。

运行的报错提示,window is undefine【图2-2】,遇到这种情况我们可以试试在代码上加上window的声明。

图2-2
var window = {}

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

图2-3

比较方便的处理方式是直接在(function(av) {前加上!,就是这么简单。

具体用法,这里套用一下百度:

使用括号包裹定义函数体,解析器将会以函数表达式的方式去调用定义函数。也就是说,任何能将函数变成一个函数表达式的作法,都可以使解析器正确的调用定义函数。而 ! 就是其中一个,而 + - || 都有这样的功能。

继续调试,这次提示变成了navigator is not defined【图2-4】

图2-4

有了上次的经验,我们在代码里加入声明navigator

var navigator = {}

再次运行就得到加密后的结果咯~【图2-5】

图2-5
总结

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值