大家好,我是阿爬!这里是讲述阿爬和阿三爬虫故事的爬友圈
登陆逆向系列文章目录预览:
第二期: 某房产平台登陆逆向分析之接口流程分析
第三期:某房产平台登陆逆向分析之w加密参数跟踪
上一期我们做了加密参数的函数入口定位,这一期我们主要滑块验证阶段的3次w参数生成做跟踪和还原
— Part 1 —
get.php接口w参数
根据函数入口图可以看到w是由i+r得到的,需要分别去跟踪这两个结果是如何生成的,整个过程采用补环境和扣代码的形式
1.r值跟踪
只调用了一个$_CCHF()函数,跟进内部函数可以看到调用了一个函数(图)
实际上是创建一个X对象,调用了encrypt方法,然后传入了一个16位的字符串,最后返回了一个256位的字符串,跟进encrypt函数在最后的地方可以看到最终结果(图)
中间会对传入的字符串做一些逻辑处理,缺啥补啥就可以搞定,整体r的生成逻辑不复杂。
2.o值跟踪
跟踪o是因为生成i时需要传入它,根据入口函数图得出整体逻辑是创建一个对象,调用其encrypt1方法(下图)传入两个参数
第一个参数是调用ge的stringify方法(下图),此方法传入了一个对象生成,这个对象需要构造;
第二个参数传入的是一个16位的字符串,和生成r时传入的16位的字符串相同;
--stringify方法参数构造
根据图和多次尝试得出此对象有些值是可以固定写死,红色圈出的是重点。
i是指纹,其具体生成的函数在$_BGHe
此函数代码较多,需要单步跟踪,看一下值具体有哪些,其中需要补一些环境,多点耐心就可以搞定
至于stringify、encrypt1方法跟进直接扣代码就是,没有特别需要注意的,最终o值是一个大数组。
3.i值跟踪
i结果生成的核心函数是$_HCh(图)
此函数需要处理this指向的对象,可以采用补环境的思想,看i的哪些函数被调用,补相应函数即可
至此w参数就跟踪完毕,在实际js代码中可还原相应变量名,方便跟踪调试
— Part 2 —
ajax.php接口第一次w参数
通过跟堆栈一步一步定位到图所示位置,此时的w会被赋值到i的$_CEEK属性中
整个过程需要重点关注3点:
1.指纹对象
此处的指纹对象需要和get.php生成w时的指纹保持一致, 此处的n已经是对指纹对象的值进行了拼接的结果,使用""magic data""拼接
2.a数组
简单改变后
这个过程采用补环境和扣代码结合的方式,将需要的函数和对象补齐,在此就不继续跟了
3.格式化检测点
解决方法就是不要对自执行函数o进行格式化
— Part 3 —
ajax.php接口第二次w参数
根据入口函数图可以看出w的生成方式和get.php的生成方式类似,这里需要跟踪h和u值的生成逻辑
1.u值跟踪
跟进u生成的实际函数
其逻辑是创建一个U对象调用其encrypt方法,传入一个16位的字符串,最后生成一个256位的字符串
2.l值跟踪
l值的逻辑其实和get.php生成w中的o值逻辑是一样的,不一样的是需要特殊处理gt的stringify函数的参数o对象
--o对象跟踪,需要关注2个重点
A.轨迹字符串生成
从图知道e即为轨迹生成的字符串,其生成的函数在$_BBEI函数
此函数传入了三个参数第一个是处理过的轨迹字符串是由$_FDL函数对轨迹数组进行处理得到
第二个和第三个是第二次get.php接口返回的c值和s值
B.格式化检测
解决方案:此次检测在window[$_CAIAj(771)]这个函数中调用了StJC函数,StJC函数再对格式化做检测,在扣代码时不要对Rbfk和StJC这个函数格式化即可;
o对象中还有H函数和$_CCCP函数直接跳转到定义处直接复制即可,在调试时看哪些值是可以固定的就改一下即可
o对象只要补完那么l值就基本没啥难度了
3.h值跟踪
h生成逻辑的核心函数在$_FCc
逻辑和get.php生成w中的i值相似,直接扣代码,同样是缺啥补啥即可
至此整个w生成逻辑跟踪完毕
— Part 4 —
最终的话
总结:
1.在指纹对象生成逻辑处,需要多次请求看结果做对比
2.每个生成w接口至少走3遍以上流程,以防有点地方漏值漏扣代码
3.在调试时需要耐心、耐心、耐心
特别声明:本文章只作为学术研究,作为其他不法用途;如有侵权请联系作者删除。