search_id,session_id用在搜索接口,生产不对或者不传必定验证。
geo是经度纬度加密成字符串。
三个字段的加密算法都在java层,还是比较简单的,这里就贴一下jadx目标路径及关键代码即可。
先是search_id,session_id,这两个字段的生产算法是一致的,JADX位置看下图。
接着是geo,这个字段一开始以为是百度地图SDK自带的,后面在找了一下,也是java层计算得出,这个字段我并没有验证,看到算出来跟抓包的差不多一致应该没有问题,大家自行验证吧。
最后是算法还原,非常的简单。
search_id,session_id
private String getSearchId() {
byte[] bArr = new byte[16];
long currentTimeMillis = System.currentTimeMillis() & Long.MAX_VALUE;
long random = ((long) (Math.random() * ((double) Long.MAX_VALUE))) & Long.MAX_VALUE;
for (int i2 = 0; i2 <= 7; i2++) {
int i3 = 56 - (i2 << 3);
bArr[i2] = (byte) ((int) (currentTimeMillis >>> i3));
bArr[i2 + 8] = (byte) ((int) (random >>> i3));
}
return new BigInteger(bArr).toString(36);
}
geo
private String geo() {
Locale locale = Locale.getDefault();
String format = String.format(locale, "{\"latitude\":%f,\"longitude\":%f}", Arrays.copyOf(new Object[]{116.331398f, 39.897445f}, 2));
Charset charset = Charsets.UTF_8;
byte[] bytes = format.getBytes(charset);
return Base64Utils.encodeToString(bytes);
}
另外需要小红书7.7版本shield算法的朋友可以加我QQ:1002285057。
|