01准备
Instagram要打开,需要点科技含量,自行解决
02抓包
打开开发者模式,点击登录,找到登录接口api/v1/web/accounts/login/ajax/。点击接口的内容,看到请求参数中有enc_password加密内容,请求头有x-csrftoken需要我们处理。
全局搜索x-csrftoken的值,我们发现有页面返回set-cookie的值,这也就是说,我们可以通过两次请求,先得到x-csrftoken的值,然后再处理登录的参数
03enc_password 逆向
全局搜索enc_password,没有找到任何内容。接着看请求加密的内容,再次搜索PWD_INSTAGRAM_BROWSER,然后我们找到了对应的js方法。
打上断点,进入方法,看堆栈信息,我们大概看出g是固定值,b是时间戳,c可能是固定值,a是加密的内容。我们需要往上去找a的生成方法
根据堆栈信息,我们找到了encrypt的方法,鼠标悬浮到参数上,我们发现是密码和时间戳,还有两个固定值是appid和appkey(但是也不一定是固定值)。
点击到encrypt方法里面,它是个异步方法,麻烦一点就F11到底,直到进入到加密的方法
进入到方法后,看到又是3个异步方法。但是也基本上看出是什么加密方法了。
04扣JS
我们知到上面调用这个加密方法传递了四个参数,id,key,密码和时间戳。我们把整个encrypt方法扣下来,来改掉它复杂的内容,因为它基本上告诉你了引用的第三方插件名称以及版本号。比如webcrypto.subtle,trwwtutil.decodeUTF8等。安装一下插件,替换掉所有插件调用的地方。
然后输出密码加密的内容
调用一下方法,看一下返回值和页面上的返回值是否相似。
基本相似,就开始接口调用一下。
05登录逆向
由于它有很多异步的方法,python直接调用是无效的,是拿不到加密之后的结果的。
启动一个nodejs的webapi的服务
用python去调用这个接口。
或者干催用node的fetch 方法,直接调用登录接口。
06获取登录结果
测试完成!