分析过程
1.第一个api拿到了一个类似base64的字符串
2.第二个api也是在请求中有一个enbody,但是将结果应该是回传日志
到这里我们目前还不知道第一个请求返回的data有啥作用,接着往下找
第三个fp请求,我们发现这个si和第一个api返回的data一致,ct应该是js加密的出来的,然后返回了两个字段,fp和st
第四个check请求,哎为什么不是web请求啊,因为那个没啥用,我们直接略过,这个时候我们发现,check请求返回了img b1:滑块背景,b2:缺口图,分析i一下参数
si--->第一个返回的data
version,client固定参数,我们只需要找到tk,ct两个生成的位置
最后一个check请求:验证的请求,你会发现参数和上面的check基本一致,可以猜测一下应该走的是一套流程
好我们接下来开始逐一去找它们的生成位置。
逆向过程
1.enbody
看一下第一个api堆栈,发现貌似就两个js,猜测是app.js点进去搜索发现做了混淆,我们把他拿出来,先去解混消,结完混淆回来搜索enbody,应该有三个,全部断点刷新,看看走哪个,跟一下就出来了,这个没难度。一个简单的sha
可以简化成这样,一个标准的sha-128加密,直接标准库去搞,si生成就搞定了
result = encrypt(JSON.stringify(param), 'rhiasnkdhandrisk', 'r-s-h-n_r_isnkdk').replace(/\+/g, "-").replace(/\//g, "_").replace(/=+$/, "");
第二个api加密和第一个位置一样,就是将第一个的api的请求加密一边遍。
fp请求逆向
根据堆栈差不多可以锁定是这个文件生成:captcha_mobile_2024_11_04.0dugxe.min.js
我们跟进去搜索一下 .ct,还是三个全部打上断点,这个时候刷新再去跟,会发现意外惊喜,check的参数生成位置也出来了,先说fp,就是这个xt函数,seesionid 就是si
其他的基本上可以固定,拿到v.ct我们就基本结束了,下面的可以不要,函数拿出来缺什么补什么就行
check逆向
1.第一个check,还是刚刚的js, 搜索.tk基本就出来了,就是这个yt函数
长得和上面的xt函数很像,第一个check我们可以看到,传进来的t为空字符串
这个和上面一样,sessionid就是si,至于那个touchlist直接从浏览器上复制写死就行
这个w就是我们要拿到的东西,也就是check函数的参数
第二个check,检验接口,还是yt函数
我们发现t中的list就是生成的轨迹,其他的都可以写死,函数拿出来缺什么补什么,补到可以成功拿到结果就可以,最后还是拿到这个w就大功告成
结语
其实整个逆向的过程很简单,唯一的麻烦事就是轨迹,可以自建本地库,也可以对接打码平台
最后看一下成果