什么?!某度营销数据js逆向只用5行代码?
## 百度营销reqid的js逆向### 前言
最近有个客户要求获取百度营销的数据,说是有加密比较复杂。我先来看看情况。
### 问题分析
打开百度营销,打开数据报告看一下数据。一眼就看到了下载按钮,我就问客户,可以直接下载啊。客户说每天点击下载太麻烦,想要自动操作的程序。OK,Fine.
![](https://s3.bmp.ovh/imgs/2023/01/30/e3ade3075ce9faf0.png)
### api分析
翻了两页发现了规律,每次请求reqid都会变化,看来这个就是加密的参数,这里就是客户说的复杂的地方。我现在看看这个参数到底是怎么个事。
![](https://s3.bmp.ovh/imgs/2023/01/30/9e13867452ba02a0.png)
### reqid参数解密
常规操作,现在搜索里面搜索reqid,看看有哪些js文件有。
好家伙,搜出来了5个结果,一眼看去什么都没有。别说加密结果了,连加密方式也看不出来。这个时候就只能一个个点击进去看看啥情况了。
![](https://s3.bmp.ovh/imgs/2023/01/30/9794b76b9d33fcbf.png)
我们点进去第一个,在文件里搜索repid,发现只有俩结果,那个“o = xxxxx”好像有点意思,下面一行就是“reqid: i”,好像就是我们要找的东西,但是i这个变量也太多了,完全找不到哪个才是我们要的,我们继续看看第二个搜索结果。
![](https://s3.bmp.ovh/imgs/2023/01/30/b1e200ab369ca183.png)
第二个结果页面搜索连repid都搜索不到,跳过,看第三个。
![](https://s3.bmp.ovh/imgs/2023/01/30/c528abfc69596b20.png)
第三个有点意思,这里有很多我们请求需要的参数,像token、optid什么的都有,这里值得注意一下。
这里有个“reqid: o ”,然而第875行还有o=xxxx,猜一下,这个应该就是加密的参数了。在这里打一个断点,翻页看一下会不会有结果。
![](https://s3.bmp.ovh/imgs/2023/01/30/c42ad7661f797904.png)
果然,这里就是repid的加密方式了
![](https://s3.bmp.ovh/imgs/2023/01/30/f327d83a8f77aab2.png)
我们把鼠标放到v.Z上面,弹出来了函数位置,我们点击进去看看。
![](https://s3.bmp.ovh/imgs/2023/01/30/8d199fc43a78bd43.png)
在这里运行一下,果然就是repid的加密了,我们把代码扣下来,居然加密只有5行。
这次加密麻烦的是如何找到repid的位置,其实解密就很简单。
![](https://s3.bmp.ovh/imgs/2023/01/30/2dd5391c5af4d725.png)
js加密代码:
```javascript
function n() {
for (var e = arguments.length > 0 && void 0 !== arguments ? arguments : 0, t = [], n = 0; n < e; n++) t.push("0123456789abcdef".charAt(Math.floor(16 * Math.random())));
return t.join("")
}
function getrepld() {
var e = (new Date).valueOf().toString();
return ["4b534c47", n(4), "4" + n(3), n(4), e.substring(0, 12)].join("-")
}
```
之后调用用python的execjs库就行。 js跟着最累人了,最不喜欢分析这个了,特别是混淆过的,他妈都不一定更是什么逻辑,都把这个思路理清的,都是厉害的。 之前写了个PHP的
<?php
function getUnixTimestamp(){
list($s1, $s2) = explode(' ', microtime());
return sprintf('%.0f',(floatval($s1) + floatval($s2)) * 100);
}
function a($n){
$t = array();
$s = array(0,1,2,3,4,5,6,7,8,9,'a','b','c','d','e','f');
for($i=0;$i<$n;$i++){
$t[] = $s;
}
return implode('',$t);
}
$reqid = '4b534c47-'.a(4).'-4'.a(3).'-'.a(4).'-'.getUnixTimestamp();
只能用一个字形容佩服大佬佩服得五体投地:牛逼 如何每天自动导出表格呢? 可以的确实 大佬太强了 js本来就很难,学不会 大佬NB啊,原来js还可以这么玩 每次我看到这种混淆的js就只能皱眉头了 {:1_893:}厉害厉害