赞
踩
遇到各种密码加密,参数加密时,当加密较为复杂时,不好使用python重写加密方法。
这时候我们可以找到对应js代码,并直接调用js中的方法。
流程如下:
这是一个网站发送短信验证码的页面,其参数被加密过:
定位到获取验证码的按钮
搜索找到该方法:
发现该方法中并未进行加密,推测在ajaxDirect中,还是找到该方法:
可以发现该方法为传入url后对参数进行拆分,然后单独加密:
定位到加密方法:(这里我们可以添加几个断点确定加密函数)
发现加密为AES加密,但是这都不重要,我们并不需要重写整个加密方法。
我们只需要了解一个大概,调用该方法传入了一个参数data,即为需要加密的字符串,如果需要加密则会返回加密过的字符串,否则返回原字符串。
我们分析得该加密是调用了AES中的encrypt方法,那我们也找到该js:
6000多行的js,看起来很复杂,但是我们不理他,直接在我们本地建立一个js文件并复制进去,并将我们需要调用的加密方法也复制进去:
这样一个我们自己的js就建立好了。
这时候我们可以去浏览器中测试一下是否可行:
新建一个浏览器标签进入开发者模式,在console中将我们的js复制进去,回车。
需要加密的字符串为 'post' ,输入encrypt('post'),回车:
我们发现,已经加密成功,说明我们的js是可以运行的。(这里如果发现不能运行,则需要回头查看是否有调用其他js的方法,也需要都复制到我们的js中。)
好的,现在回到我们的js文件中,在最后一行加上
console.log(encrypt('post'));
进入命令行中js文件目录下输入:(test为js文件名称。)
node test.js
便可以运行js文件了,这时我们发现有错误报出:
意思是我们的加密方法中没有找到cryptoJS,但我们在浏览器中明明是可以运行的,所以推测是由于上面定义了cryptoJS,但是作用域并不包括我们的加密函数。
所以我们可以进行一些小改造:
我们首先在第一行定义一个window作为全局定义:
随后在所有用到cryptoJS的地方,将cryptoJS改为window.cryptoJS
而我们的加密函数中也要做相应的修改:
这时候我们再次运行试试:
我们发现已经加密成功了。
随后我们在使用中只用调用该js中的方法即可:
(最后加上replace是由于原加密中有一段是替换符号。)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。