一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第27天,点击查看活动详情。
前言
插个眼,水一篇,今天搞了一天的达闼机器人比赛,搞了半天问人家老师,结果发现人家平台还有问题,能做的题目只有一个,人都嘛了,忙活到现在,终于是先把数据采集到了训练出了第一个模型。效果怎么样,明天还得测试一波。老博文,凑合看吧。还有原来Java 技术栈的玩意一直没有整理好,现在该搞搞了,等小爷打完小比赛,一边写WhiteHole V0.7 一边写这个,暑假如果不用和老师去考察(有一个计算机视觉项目)我就应该是去看看找找实习(其实也可以让老师直接给我推,但是我想自己试试)到时候就可以体验一下真实的企业开发环境了,到时候又可以水N波啦~
HTTPS
这里先简单的说明一下https协议,简单地说一下什么是对称加密与非对称.
对称加密
所谓的对称加密其实就是公钥,所谓的钥其实就是加密方法,加密手段。对称加密,简单理解对称两个字其实就是你知道我也知道,我们客户端和服务端共用一套加密方法。
非对称加密
在公钥的基础上随机再由客户端生成一个加密手段,换一句话说就是加密的加密,但是第一个加密方法加密第二个加密方法,但是第二个方法不是一开始约定好的,是后面随机生成的:
这样一来由于不知道服务器公钥,黑客无法直接对拦截后的数据解密,因为不知道公钥就意味着无法获取私钥从而解密.除非去攻击服务器获得公钥.
然而这样依然存在问题.
证书
此时虽然无法获得服务器的公钥,那么黑客依然可以伪造服务器公钥来获取你的私钥从而的到你的解密数据.(比如通过DNS劫持,当然哪有这样垃圾的肉鸡)
所有为了保证安全,https网站都会有一个证书,这个证书不仅含有密钥同时是由第三方机构认证的,可信度高.因此此时我们客户端访问的就是证书.
那么这样也就可以解释为什么在对https抓包是需要配置软件证书.
js调试
这里直接举一个实例获取stream的密码加密方式
打开F12进入调试
使用调试工具
现在我们大致发现了是哪个函数加密的,但是还是不知道这个函数具体和别的函数是否有关联,所以这个时候我们依然需要进行调试.这里我们先构造一个方法
function getpassword(password){
var mod="";
var exp="";
var pubKey = RSA.getPublicKey(mod,exp);//这里对函数做了简化
var encryptedPassword = RSA.encrypt(password, pubKey);
return encryptedPassword;
}
现在进行调试,我们继续通过查找再来找出RSA函数,这里直接全局搜素那么就不在演示了
拿到结果
python运行js
这里的话需要使用到execjs这个库 具体代码如下
node = execjs.get()
ctx = node.compile(jscode) 这里传入的是字符串
funname = "getpassword('{}')".format('123456')
pwd = ctx.eval(funname)
print(pwd)
此时就可以得到结果.