JS 前端逆向解密
最近学习的时候,遇到一个网站,因为手动输入邀请码觉得很麻烦,就想写个小脚本去处理,在实践的过程中,发现它对后端返回的内容进行了加密。遂,开始研究,对算法进行解密
思路说明
先发包,抓包,发现了被加密的内容
JS前端进行断点调试
找到_encrypteData 参数
根据堆栈内提到的文件,去筛选decrypt文件。
分析decrypt文件,确认加密模式:AES-CBC 的加密方式【GPT辅助分析】
在decrypt JS 中,去寻找固定密钥(字节数组)【GPT辅助分析,让它去找到密钥】
根据密钥和加密算法,写对应的解密python脚本
具体实践
JS前端进行断点调试
F12,打开开发者,在控制台输入以下代码,进行断点调试
1 | (function(){ |
点击想要调试的位置,会自动断点
最右是打开/关闭断点的按钮,最左是放行/拦截,中间是跳入下一个函数、跳入上一个函数,调试按钮。
先点击想要破解数据包的那个功能键,让数据产生的过程“暂停”。在达到这个功能点之前,可以先不开启断点功能。在准备点击这个功能点的时候,再打开断点。点击打开/关闭断点的按钮,让它处于正在断点的过程。
比如我准备发的包,是在点击确认之后产生的,我整个调试界面,就是停在了,确认已经被点击下去的页面。
找到_encrypteData 参数
我们在准备点击确认的时候,开启了断点调试。然后点击确认,再放行,断点就会直接跑到加密的那个地方。
此时我们调试的意义就是,开始探究:从点击确认之后 到 产生想要破解的数据包,这个过程,函数的调用和数据的流向。
根据堆栈内提到的文件,去筛选decrypt文件
右边是整个函数调用的堆栈,既然已经找到加密后的数据,那就一定可以在这个调用的堆栈中找到解密的过程。我在这里直接开始输入关键词decrypt
进行搜索
分析decrypt文件,确认加密模式:AES-CBC 的加密方式【GPT辅助分析】
在这里我们就可以清晰的看到它的整个加解密过程了,我直接发给GPT让它给我分析加密算法了。 分析过后,发现是采用的AES-CBC的加密方式。 并且找到了固定密钥就在JS文件中
1 | e.prototype.encrypt = function(e) { |
找到固定密钥:
根据密钥和加密算法,写对应的解密python脚本
1 | import base64 |
碎碎念
真的好喜欢GPT的时代,我给他提供思路和我的需求,它来实现具体细节。它分析的过程,也可以给我思路启发,更快的上手学会一个东西。我不用去纠结那些事情的细节,代码的细节,不用去操心具体的实现,只需要专注于事情的主体框架。我真的好喜欢这样的感觉,这才是我的价值。
我的价值不是去死扣细节和缓慢的学习代码,我的价值是我的大脑和我的思维。
我以前的劣势就是,有点强迫症,在学技术细节的时候,会钻牛角,而偏离我的主体框架核心。最后导致事情无法完成,现在就不会这样了,我有想法就去和GPT探讨,根据它给我的思路,我就有了开始学习的方向,在每一个大方向上往前走,再也没有以前那种被困住手脚无法施展的限制感了。