免责声明:本文章中所有内容仅供学习交流,抓包内容、敏感网址、数据接口均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请联系我立即删除!

逆向目标

逆向过程

四个参数中,ak是固定的,as和tk是接口返回的,所以只需要找出fs的生成方法即可。

从调用栈中进入相关代码进行调试:

image-20230517201639331

然后文件中搜索fs = ,发现fs是经过encrypt方法加密生成,如下图:

image-20230517202259000

encrypt方法简单的封装了一下aes加密算法,接受一个参数i,是一个JSON字符串,进入这个方法,代码如下:

image-20230517202959430

其中的key是t,而t则是由as和固定的字符串appsapi0拼接而成,i则是传入进来的JSON字符串。所以只需要解决这个JSON字符串是如何生成的,也就知道fs是如何生成的了。

全局搜索rzData,找到一处定义的地方,如下图:

image-20230517210914653

可以看到simu是检测到webdriver,这里默认为0就行。

看下关键的ac_c,ac_c是由i.percentage赋值。

image-20230517221341686

跟进去看下:

image-20230517222303016

其中o是旋转的角度,a是固定值212。

rzData中还有一个backstr,来自于其它请求。

image-20230517223901174

至于其它的字段,比如cl,mv等不影响旋转验证码的验证。自此,整个fs的逆向过程就完成了。

旋转角度的识别

关于旋转验证码的识别,网上找的模型,地址如下:https://github.com/chencchen/RotateCaptchaBreak

测试

测试结果如下:

image-20230518151105093

op为1表示验证通过,为0则表示验证失败。

若需要完整代码,扫描加微信。

image-20230517010053227