shiyier 发表于 2023-1-30 17:46

什么?!某度营销数据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库就行。

1188 发表于 2023-1-30 22:32

js跟着最累人了,最不喜欢分析这个了,特别是混淆过的,他妈都不一定更是什么逻辑,都把这个思路理清的,都是厉害的。

芊雨千寻 发表于 2023-2-1 08:47

之前写了个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();

pwp 发表于 2023-1-30 21:13

只能用一个字形容佩服大佬佩服得五体投地:牛逼

oxding 发表于 2023-1-30 22:30

如何每天自动导出表格呢?

jasonwei 发表于 2023-1-30 22:50

可以的确实

LiLittleCat 发表于 2023-1-31 00:25

大佬太强了

o987654321 发表于 2023-1-31 07:57

js本来就很难,学不会

vwvxia 发表于 2023-1-31 08:53

大佬NB啊,原来js还可以这么玩

QingTianGG 发表于 2023-1-31 09:04

每次我看到这种混淆的js就只能皱眉头了

xiaoyu907 发表于 2023-1-31 09:41

{:1_893:}厉害厉害
页: [1] 2 3 4
查看完整版本: 什么?!某度营销数据js逆向只用5行代码?