免责声明:本文章中所有内容仅供学习交流,抓包内容、敏感网址、数据接口均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请联系我立即删除!
网址:aHR0cHM6Ly9sb2dpbi53c2dqcC5jb20uY24v
逆向目标:登录接口参数clientinfo,userName,password生成规则
先看下这几个参数长啥样:

userName和password长度都是128位,盲猜是AES。
全局搜索一下clientinfo,找到了clientinfo生成的地方:

点进去这个方法:

可以看到先是调用一个doGetInfo获取info信息,然后调用base64encode方法对info进行编码,直接抠出这2个方法即可。
抠出来之后,执行下doGetInfo函数,结果如下,其实就是把环境的一些参数信息用特殊符号拼接,为了不被检测出来,最好对比浏览器的实际结果,把相应的参数的值补上。

接着看下userName和password,全局搜索下password:

发现 userName和password采用的一种加密,就以password为例吧。
encryptedString加密方法接受2个参数,第一个是key,第二个是加密的明文。key的生成,往上面看几行,就会找到var key = new RSAKeyPair();
这行代码,然后去抠出RSAKeyPair这个对象,缺啥补啥,一直抠就完事了,比较简单。
这里有一个注意的就是,下面一行代码如果漏掉了,就会陷入死循环,导致加密结果出不来:

我们在抠主要逻辑的时候,一定要看下它前后的逻辑,一些看似无关的逻辑能保留的尽量保留,比如我们要的encryptedString方法,是在postLogin方法中调用的,postLogin前边部分是一些从html表单中取值的逻辑,后边部分是发包的逻辑,除去这2部分,中间一条setMaxDigits(129);
这个逻辑不知道是干啥用的,就尽量保留。
抠完JS并补好环境后,整个执行的结果如下:

补环境的代码如下:
1 | var window = {}; |
代码获取?若需要代码,扫描加微信即可。
