网址:
aHR0cHM6Ly93d3cuZG95by5jbi9wYXNzcG9ydC9sb2dpbj9uZXh0PWh0dHBzOi8vd3d3LmRveW8uY24vZGFuamkvbGlzdA==
分析登陆页面的加密。
返回了两个包,下面明显是登陆包,上面这个也是有用的,一般这种返回两个包的情况。前一个包返回的值一般是登陆包的加密密钥,或者重要的参数。进入第一个包:
发现返回了一个nonce的字符串的值。进入登陆包:
发现有两个加密参数,password和next,再登陆一次:
发现next是固定的值,因此只有password这一个加密参数。跟栈分析:
直接点击匿名登录栈,因为这里有login的字样:
一下子就看到了疑似加密的位置,打上断点,分析:
发现就是密码加密的函数,其实就是标准的sha1加密,对密码加密后,再加上nonce和ts
nonce是不是很眼熟,这不就是第一个包返回的字符串吗(因为我这是第二次登录,所以不同),ts一看就知道是时间戳。
因此很明了,我们逆向的步骤是,首先访问第一个包,获得nonce参数值,接着对密码进行sha1加密,加密后加上nonce和时间戳,再进行一次sha1加密。
那么问题来了,如何访问第一个包,观察第一个包的paramaters:
发现需要传入账号,random看起像一个随机数,事实上它是由math.random()函数生成的,具体怎么来的,可以自己去跟栈分析一下。那么结果就很明确了。
附上标准sha1加密的python代码:
import hashlib
strings = '123456'
sha1encrypt = hashlib.sha1(strings.encode('utf-8')).hexdigest()
print('原来是:',strings,'sha1加密后:',sha1encrypt)
# 结果为 原来是: 123456 sha1加密后: 7c4a8d09ca3762af61e59520943dc26494f8941b