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获取登录结果

测试完成!

打开网易新闻 查看更多图片