新手必学:点点数据K值逆向分析(保姆级教程)
目标网址:aHR0cHM6Ly9hcHAuZGlhbmRpYW4uY29tLw==
目标接口:v2/user/favorite
一.确定逆向参数
查看接口各个位置参数,发现载荷数据中的k是做了加密处理的,测试请求发现能请求的通,但是有时效性,时效性过了就返回 {"code":9,"msg":"sign error"},所以我们要解决的是找到这个k值生成的逻辑,把他还原出来。

二.定位加密参数
由于这个包发的是xhr的请求,毫无疑问,还是用我们最喜欢的xhr来进行定位,肌肉记忆了已经。
xhr断住在send这个地方后向上滑,我们会看见在这个地方已经生成了,然后进行向前跟栈。

我们发现异步之后就三个栈,k值全都生成了,所以毫无疑问,肯定是异步里面生成的,直接跳到异步最上面的栈里。在这里强调一下,由于这个网站有时效性检测,我们调试时间过长,页面会直接死掉,跳到下一个断点可能会断不住。我们要做的就是把网站的cookie和缓存全部清掉,刷新页面重新发一次包,这样就能解决以上说的这些问题。
这里我们走到promise异步回调,第一个m.shift()是成功的回调,第二个是失败的回调,而第一个回调函数里的数组,往往数组索引 1、3、5 是失败回调函数,2、4、6是成功回调函数。

然后我们就进入到请求拦截器里面,这里要注意的是资源地址url,一定要搞清楚跟的是哪个url。

当我们看e的时候,是没有k值的,执行完t(e) || e后params里面就生成了k值

我们进入到t函数里,一般来讲,我们是要找return的位置,在这里我们只看见了return e.url.endsWith(t),显然这个不是,这个是一行用来判断字符串结尾的代码。因为 e 是引用类型,所有修改都会直接作用在原对象上,onRequest 底层有 return t(e) || e 的容错逻辑,会自动返回原始的 e;举个例子:
// 定义引用类型的对象 bb(核心:对象是引用类型)
const bb = { "title": "test" };
// 定义函数 aa,修改 bb 的属性并返回 bb
function aa() {
// 直接修改 bb 对象的 title 属性
bb.title = "222";
// 显式返回 bb 对象
return bb;
}
在这里return也是可以不要的,const是块级作用域,不能修改值,但是可以修改属性,它们内存指向还是一样。

进入I函数我们就不能发现,这个k值就是在这里生成的,又Object(y.a)函数传递了四个参数,经过测试这个n值可以写死,其他就没什么,缺什么扣什么就行了。

三.享受成果
这个案例总体没什么难度,在这里我用python还原了一下。展示成品

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐


所有评论(0)