一、产业政策大数据平台
1.前置
- 网址:aHR0cDovL3d3dy5zcG9saWN5LmNvbS90eXBlUG9saWN5P2lkPTYmbmFtZT0lRTUlODUlQUMlRTclQTQlQkElRTUlODUlQUMlRTUlOTElOEE=
- 目标:表单参数
2.逆向思路
- 首先打开抓包页面就可以看到一个无限debugger,在这里我们使用hook的方式来过;

// 变量 构造器
AAA = Function.prototype.constructor;
Function.prototype.constructor = function (a) {
if (a == 'debugger'){
return function (){};
}
return AAA(a);
};

- 有一点像乱码,那么我们就要去找到它的生成位置;在以往来说,这种表单参数没有关键词的时候,且是异步加载时,我们可以去找他的拦截器关键词,但在这里没有办法直接搜索,因为它是经过混淆的,但这个思想在其他地方适用;
- 在这里我们就可以去下xhr断点,之后进行分页,此时断住;

- 点击异步栈的第一栈,也就是箭头的指向;进入之后打上断点,并将xhr断点放掉;

- 此时观察s,它里面会有拦截器,进入内部看,可以看出是经过混淆的;

- 我们需要的是请求拦截器,所以我们就需要看当前是否是我们需要的位置;

- 很明显这就是请求拦截器,也可以去其他几个方法看看,因为它有时候不止一个拦截器,我们就不去看了,把外面的断点放掉,然后进入这个断点;

- 可以看到此时我们的参数还是明文,那我们就需要点击跳出函数来看它在哪里变成的密文;



- 再跳一次就可以发现我们的参数生成了,那我们就需要去前面找加密方法;

- 那么有没有可能是明文消失的前一栈呢,很有可能,我们找拦截器的原因就是生成参数的位置大多都会在那里,既然明文消失的最后一次出现是在拦截器,那我们理应去那里找,再次触发请求;

- 来到上一个位置就可以发现参数就是在这里加的密,那我们依次在控制台还原里面的混淆;


- 这即是我们的加密方法,那么此时我们需要做的是就是找到这三个方法是吧,首先去找这个encode方法,点击进去;

- 进入一个虚拟文件,那么我们的方法就是这个policy,将它拿下来,注意此时不要拿return,只拿方法;
- 我们观察这个方法,传进去两个参数,将断点打进去,可以看到m是我们的参数,w不知道,那我们可以看到它说如果w不存在,就创建,那我们直接不传,让它生成就好了;
- 但这里会报错创建方法不存在,那我们也需要进去看看;

- 进入之后可以看到一个很熟悉的东西,webpack,那在这里我们的思路其实就是将它导出再调用;我们就需要去找到他所在的大方法里,也就是顶格的方法;
- 在这里我的方法是将整段复制到pad++里,然后比较方便找,语言选择js,然后折叠所有层次;再搜索我们的方法;


- 此时运行一下会报错commonjsGlobal,我们在控制台输出它,发现他就是一个window对象,那我们直接全改成window,然后再定义一个window对象;
- 此时我们先注释掉其他的代码,只留下这个webpack看看能否运行,发现是没有报错的,那我们就可以导出函数了,在顶部顶一个zt变量,用来接受加载器;

- 此时我们就可以试着打印一下zt,看看有没有接收到方法;

- 可以看到成功的拿到了方法,所以create函数就可以改写为zt..Writer.create()了,此时直接打印一下看能否出值;

- 可以看到出值了,那么后面两个方法应该就在上面的webpack里,当然这里还会有一个报错,会说参数类型错误,经过调试其实就是参数中的 "policyType": '6',这个6必须是字符串形式;
- 和网页上进行对比看看是否是正确的;

- 可以看到结果是一致的,那么参数逆向也就完成了;
- 使用python进行请求,可以成功拿到数据;

评论 (0)