还是老样子,先提交一个请求登录的数据包,然后查看响应体:
一般来说都是document类型的文件,单击进去
查看载荷发现loginid字段就是我们页面对应提交的账户名,然后下面的password因该就是相对应的密码了
使用了不知名的加密手段,现在尝试进行逆向破解
复制password字段到前端的js代码里面查找变量名字,然后就是靠感觉了,最终在源代码里面top/a.alipayobjects.com/security-sdk/2.1.2/index.js下找到了相对应的加密函数:
如果在不确定的情况下,到怀疑的程序后面打上断点,进行提交数据的调试,即可判断是否找对了地方
我们可以看见上图的e.alipayEncrypt()这个函数,其实在js逆向中,Enctypt这个函数挺关键的,一般来说加密方法里面都会有这个单词,我们尝试直接到控制台输出这个方法,发现就是我们密码加密过后的数据,但是这里不一样
这是因为RSA是结合了时间戳进行加密的,然后
鼠标放到alipayEncrypt方法上,然后会出现一个小框,点击里面的超链接即可跳转到alipayEncrypt方法定义的地方,当然
还有一种就是
直接到控制台输出,然后点击回显的值也能跳转过去,
发现这个方法被包在了一个很长的方法之中,最方便的方法就是把代码全部dump下来,放到编译器里面
然后进行操作,发现这个方法体长达两千七八多行,到浏览器新开一个窗口,只需要用到控制台:
把方法体贴上去然后回车就会返回上图红色框住的,先定义一个变量然后值为实例化的 security_crypto_200_lib_rsa类
然后调用test对象的alipayEncrypt方法,发现里面需要传入三个值,回去原网页查看,传入的值分别是什么
发现这个2为第一个参数,是固定的,然后i为类似偏移量的东西,也是默认的
可以看见,e对象调用alipayEncypt的前面,还调用了一个setPubliKey(this.options.PK),这个PublicKey是RSA加密中类似于公钥的东西,少了的话是加密不了的:
上图为缺少共钥的加密结果,我们需要找到公钥,直接在控制台进行调用:
然后添加到我们新窗口的控制台中:
然后就可以进行愉快的传入参数了,直接破解