0x00 前言
又到年关了,大家是不是都想挖点Src冲冲榜拿个年终奖呢?但是看到一堆的加密请求,那真是一个脑袋两个大。这次我来给大家分享一下我个人逆向加密算法的一些经验及过程,测试环境是目前我们自开发的一个靶机,涉及到的算法是Aes+Sm3,后续会开源分享给大家,(ps:为了不剧透这里对一些较为关键的内容进行打码。)
0x01 踩点
1、基础的登陆页面
虽然是靶机,但是正常的打点及摸排还是必须的,毕竟只有了解敌情,我们才能进行斩首行动。首先我们先看看拿到的页面,尝试寻找突破口
访问什么都会转到login界面,那就排查下js里面有什么突破吧
那真是柳暗花明又一村啊,js文件里居然存在用户名,下一步!爆破!冲锋!
2、尝试突破
既然我们现在已经有了账户名单,我们抓个包看看
虽然没有看到验证码参数,但是看到这加密参数,看到这sign,是不是感觉头脑一大,别着急,我们一步一步来,做好准备工作,才能感受到Js的快乐
3、断点设置
打断点有几种方法,我比较常用的是:
3.1 第一种 xhr请求断点
这种方法的优点在于不需要找参数,或者参数被混淆时,缺点就是有时候我懒得去翻调用关系,比如网站url是
http://www.test.com/ApiServlet?xxxxxx
那就通过ApiServlet
设置个断点
3.2 第二种 关键词断点
比如搜索Aes、Des、encrypt、decrypt等等,或者直接找到登陆接口,在传参的时候进行断点,这里我们直接找登陆接口。在数据包中有个参数是ywid=api.base.check.xxxxxx
这个参数肯定是唯一的,所以我们搜索这个特征,定位到了字符的处理。
打上断点后,我们快速步进,看下都会生成什么信息
通过对代码的分析我们得知,数据以json方式传输,其中postdata里面的数据就是我们的用户名和密码,用户名是sjry
,密码是gt3mm
,两个都是通过函数o进行处理的,到这里呢我们踩点都结束了,下面开始我们的正文环节。
0x02 用户名及密码加密分析
1、加密逻辑寻找
跟随函数o,找到了第一个加密点,我们来尝试通过控制台输出下运行的结果