JS逆向|硬怼某游戏网站的登录加密参数

声明:本文只作学习研究,禁止用于非法用途,否则后果自负,如有侵权,请告知删除,谢谢!

先打开谷歌浏览器,并按下F12,打开开发者工具,然后地址栏输入网址并回车:

随便输入用户名和密码并按下登录按钮,抓包分析一波,我这里输入的用户名:13800000000,密码:123456.接口在这里:

有个password的加密参数,全局搜索"password:":

相信聪明的你会毫不犹豫的双击第二个文件,跟进来后,打上断点,并再次按下 登录 按钮,停在断点位置:

这里有个 cryptStr 函数,直接在控制台输入看结果:

可以肯定的是,就是这个加密函数,跟进去看看:

很简单的一段代码,返回值cryptStr是由 cryptStrInput.val() 这个函数取值而来,这个函数又在上面赋值,即 temp.find(".cryptStr").val(val);

单步来到这个 temp.find(".cryptStr").val(val),然后跟进去 后面的val函数(需要先跟进find函数退出来再跟进val函数):

这里有两个if语句,分别在下一行打上断点:

然后按下F8,让程序跑起来,进入了第一个if语句,然后单步调试,出来后回到了这里:

然后继续单步走,会来到第二个if语句的断点位置:

继续单步(也可以不单步,跟堆栈),单步出来后会来到这里:

这下加密位置就找到了。其实这里的主要技巧是在两个if语句下面下断,至于为什么要下断,可能是直觉吧,不放过任何一个蛛丝马迹。

这里有一个 取 cookie值的操作,字段名:randomYes,值在控制台打印:

其值是 "43746745383",那这个cookie是什么时候set的呢,我们去第一个请求找找:

虽然有这个字段,但是值不同,我们再找最后一个 请求登录的接口,发现在这里:

继续往下单步,发现它会去取 web 字段的值:

继续单步,跟进下面的 encrypt 函数,根据调用关系,它会先进来这个 sdc函数:

看其特征及其返回的字符串长度,猜测是某著名的摘要算法;退出此函数后,跟进 encrypt 函数:

嗯,喜闻乐见的AES加密。最后 randomId + randomYes 的值就是 password加密后的值。至此,分析完毕!