一、什么是JS逆向?
我们经常在浏览网页的时候并且想要通过网页进行复制粘贴某文本的时候会蹦出来一个弹窗显示让你进行账号登录,你可能有时会有疑问,当我们对网页源进行抓包的时候,会发现我们输入的密码是一串由字母或数字等符号组成的,其实这就是一个密码经过加密呈现的一段加密文字,而我们所做的解密工作,通过解密步骤得到密码的过程,称为JS逆向。
二、密钥加密种类
密码加密的方式肯定不止一种,如果所有网站只有一种的话,那么对于想要窃取加密文件具体内容的行为,就是轻而易举了,那么有哪些加密方式呢?一般情况下分为:
- MD5加密方式,这个加密方式所加密的方式最为复杂
- AES DES对称加密方式
- RSA非对称加密方式
- 证书非对称加密方式,目前阶段比较安全的加密方式
这里是引用:https://blog.csdn.net/weixin_42749765/article/details/84654328
三、逆向解密实战
说了这么多,让我们实战操作一波,需要一提的是,在非对称加密中,有两个关键词,一个叫做公钥(Publickey),一个叫做私钥,公钥(客户端和服务端都有的加密方式)在爬取网页进行加密的方式的过程中显得尤为重要,一般会通过一个setpublic函数进行加密
在逆向解密过程中,我们会用到js发条工具和实现代码的平台,平台我选的是Pycharm,在这里提供一下JS发条调试工具的下载网址(一般都可能携带N多个安装其他应用的包)
这里是下载网址:https://www.zdfans.com/html/28007.html
3.1.1 实战演练:微信登录方式解密
下面是实现代码
import execjs
# 进行逆向解密的一个数据库,下载库的代码为pip install PyExecJs
node = execjs.get()
# 进行逆向的一个对象
task = node.compile(open('./wechat.js',encoding='utf-8').read())
# JS发条工具调试过后的js文件,我们命名为wechat,打开它进行资源编译
password = input('输入您的密码:')
funcName = 'getPwd("{}")'.format(password)
get_password = task.eval(funcName)
print(get_password)
具体的实现步骤
1.我们搜索微信网页版,进入之后,点击登录,按下F12,切记要勾选上方的保留日志,点击之后,随便输入账号密码,但不要输入正确
2.登录失败后,我们通常需要找到有login的包,我们可以看到,pwd一栏,已经变成了一串字符串,这并不是我们输入的那一串密码,可知,这已经被加密了,这个时候,我们就知道了是通过函数加密,然后返回给pwd呈现给我们的,于是我们Crtl +F全局搜索,并输入pwd
3.我们输入后,敲回车,就会有好多搜索结果,找到文件后缀带有js的,且password包含在内的,为什么一定找js后缀的呢,你很聪明,看标题就是知道了
4.进入我们找到的文件之后,搜索password = 或者password:,这能大大提高我们寻找的效率,我们找到后,发现任何疑似密钥加密的,都可以打上断点,之后在点击登录,看看断点停在哪里
5.断点停在了一个地方,一看是我们的密码,再进行点击登录,然后单步执行下一个函数,将下一个出现的函数复制
6.用上我们的js调试工具,格式化,加载代码,计算表达式,其中最后的function函数被改装成function getpwd()
7.将调试好的代码,放入wechat.js文件中,即可调用,实现代码在开头