本文主要是介绍京西js逆向,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
一、准备工作
js调试:发条js调试工具
Python调用js代码,首先安装node环境,然后安装PyExecJS-> pip install pyexecjs
二、开始逆向
进入登录页面:https://passport.jd.com/uc/login?ltype=logout
发现是使用ajax来提交账号密码,查看ajax携带的数据:
一番查找,发现nloginpwd是密码加密后的密文,需要对pwd加密方法进行查找。
定位到165行,使用的是rsa加密。
接着向下执行,进入到上图的函数。JSEncrypt就是加密算法的实现,进入到这个类中,复制所有的代码到JS调试工具中调试。
在调试过程中,发现缺少pubKey,查看代码,发现pubKey在页面中存在,如下图中:
在这个过程中,同时也发现ajax登录请求中需要携带的数据都在这个页面中。
三、代码
说明:只实现了密码加密的逻辑,其他简单的不继续进行(🐶保命)
js代码:
//以上省略rsa加密实现……
function getPwd(pwd, pubKey) {var encrypt = new JSEncrypt();encrypt.setPublicKey(pubKey);return encrypt.encrypt(pwd);
}
python:
import execjsheaders = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.55 Safari/537.36','Referer': 'https://passport.jd.com/uc/login?ltype=logout'
}
node = execjs.get()
with open('jd.js', 'r', encoding='utf-8') as f:ctx = node.compile(f.read())pwd = ctx.eval(f'getPwd("123456")')
print(pwd)
这篇关于京西js逆向的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!