instagram登录加密

16 篇文章 9 订阅
5 篇文章 0 订阅

前段时间玩了一下ins,整体感觉我接触过的国外的网站例如youtube、Ins、Facebook比国内的加密相对比较少,很多数据都是在HTML中的。但是做起来真的很烦人,因为我是个很讨厌从H5中扣数据的人。

一、ins的登录参数分析

请求接口:4oCLaHR0cHM6Ly9pLmluc3RhZ3JhbS5jb20vYXBpL3YxL3dlYi9hY2NvdW50cy9sb2dpbi9hamF4L+KAiw==

data参数:很明显如下图所示enc_password加密了。我用大拇脚趾猜测enc_password是密码的加密。

二、找到加密点

这个网上有教程,我就不啰嗦了,一句话总结就是加密参数中 “PWD_INSTAGRAM_BROWSER”是一直固定的,那就搜索PWD_INSTAGRAM_BROWSER就能找到了。如果这点还不具备,这位读者你需要多加练习才行啊。

最后这里就找到了。这里应该就是入口,这个代码是我两周前逆向完弄完的,我刚刚又找了一遍,应该就是这里没错了。

三、观察加密、解密

 

 

这里图三就是加密的入口算是

这就是加密代理的流程,如果读者觉得我这个看起来苦涩难懂也没事,你可以搜索一下别人的,他们的写的比我细致。

注意1:

这个地方是个异步,要有耐心,多留意多观察,然后就能找到接下来 k 的值是在哪里加密的

K值的加密在这里:

 进去后是这样的:

 写的也很清楚,这是个什么加密,然后看了下加密代码,感觉就是个单纯的AES-GCM 加密。然

截止这里,找到加密点的部分已经完成了,接下来就是调用了

四、实现加密

实现加密其实就是跟着人家的流程走,人家有的你就加上,加上没用你就删了。最后整个跟下来,你会惊喜的发现你的Js代码逻辑和人家的一模一样的情况下你的会报错,就算不报错加密结果明显就不对。

所以……

注意二:w = window.crypto || window.msCrypto;w.subtle.generateKey;这个地方最容易报错;我们用node的话应该这样替换:

const crypto = require('crypto').webcrypto;

window = global
window.crypto = crypto

然鹅,有些读者和我一样,看了网上别人家的博客以为这样就OK了,大错特错,接下来还有一个坑等着。那就是你的nodejs调用不了require('crypto').webcrypto或者调用了发现是个undefined,不要沮丧,这只仅仅是因为你的node版本太低了,至少得要个15以上的版本,像我一样我就是14的版本最后无奈上官网查看官方文档才解决的。

注意三:当以上问题统统解决了之后,你会发现,我一行一行跟着扣下来的代码为什么执行完加密打印的结果是错误的,很简单,因为你的代码不是异步的。关于JS的异步你们可以网上看看资料。如果你的JS代码不是异步的,那么你跑出来的结果只有#PWD_INSTAGRAM_BROWSER:10:1666597197:后面毛都没有。所以Js代码要异步。

整个弄完后,我网上说python调用js速度还是太慢,不如放服务器用node开个后端接口跑,这样最快,于是乎不死心的我写了个node后端,把代码放服务器上了,也不知道心里原因还是咋滴,感觉确实比python本地调用的快。

至此,整个ins的登录加密就算弄完了!!!

最后给读者说一下,如果你是玩玩他的登录加密那就OK,如果你指望这篇文章看完能登录ins,那就洗洗睡吧,因为……这样根本登录不上去,他会返回  {"zhanghao":"ok","mima":"OK","验证":"c错误"}。这是最后最大的坑,我也是自己掉进去后后面才发现的。不是你的加密错了,也不是你的代码有BUG,而是一共有三个请求,这只仅仅是其中一个,所以登录不上去。

好了,就这,我的笔记做完了。

 

 

 

经常看到有人要找AES-GCM-128  这个算法加解密 网上相关的文档也较少其中在telegram登录首页就在使用该算法 应该让不少哥们头疼 其实这个加密常见于浏览器内置接口window.crypto.subtle 该接口不仅支持该类型的加密 且支持非常多的算法加密如RSA DES  等等  这里就演示AES-GCM-128 这个类型 crypto-AES-GCM-128调用例子 function ___crypto__test(keyData, iv, data) {     const format = "raw",         // keyData = new Uint8Array([23, 113, 57, 6, 35, -69, -60, 98, 84, -17, -125, -49, 18, 6, -92, 32]),         algorithm = "AES-GCM",         extractable = true,         usages = ["encrypt", "decrypt"];     // iv = new Uint8Array([47, 46, 123, 78, 36, 14, 109, 50, 121, 64, 11, 38]);     window.crypto.subtle.importKey(         format,         keyData,         algorithm,         extractable, usages     ).then(key =gt; {         window.crypto.subtle.encrypt({                 name: algorithm,                 iv: iv             },             key,             data         ).then(result =gt; {             console.log(Array.from(new Uint8Array((result))))         })     }) } console.log(___crypto__test(             new Uint8Array([23, 113, 57, 6, 35, -69, -60, 98, 84, -17, -125, -49, 18, 6, -92, 32]),                 new Uint8Array([47, 46, 123, 78, 36, 14, 109, 50, 121, 64, 11, 38]),             new Uint8Array([50, 49, 48]) )) crypto主要相关接口介绍 crypto.subtle.importKey const result = crypto.subtle.importKey(     format,     keyData,     algorithm,     extractable,     usages ); format  是一个字符串,描述要导入的密钥的数据格式。可以是以下之一:----------raw:原始格式。----------pkcs8:PKCS#8格式。----------spki:SubjectPublicKeyInfo格式。----------jwk:JSON Web密钥格式。 - keyData 是ArrayBuffer,TypedArray,a DataView或JSONWebKey包含给定格式的键的对象。 - algorithm  是一个字典对象,用于定义要导入的密钥的类型并提供额外的算法特定参数。对于RSASSA-PKCS1-v1_5,  RSA-PSS或  RSA-OAEP:传递RsaHashedImportParams对象。对于ECDSA或ECDH:传递  EcKeyImportParams对象。对于HMAC:传递一个HmacImportParams对象。对于AES-CTR,AES-CBC,AES-GCM或AES-KW:传递标识算法的字符串或形式为的对象{ "name": ALGORITHM },其中ALGORITHM 是算法的名称。对于PBKDF2  :传递字符串PBKDF2。 - extractable 是Boolean表明它是否将有可能使用到导出密钥SubtleCrypto.exportKey()或SubtleCrypto.wrapKey()。 - ke
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值