JS逆向-产业大数据平台
标签搜索

JS逆向-产业大数据平台

sana
2024-07-17 / 0 评论 / 13 阅读 / 正在检测是否收录...
温馨提示:
本文最后更新于2024年07月18日,已超过320天没有更新,若内容或图片失效,请留言反馈。

一、产业政策大数据平台

1.前置

  • 网址:aHR0cDovL3d3dy5zcG9saWN5LmNvbS90eXBlUG9saWN5P2lkPTYmbmFtZT0lRTUlODUlQUMlRTclQTQlQkElRTUlODUlQUMlRTUlOTElOEE=
  • 目标:表单参数

2.逆向思路

  • 首先打开抓包页面就可以看到一个无限debugger,在这里我们使用hook的方式来过;

image-20231219160801811

  • hook代码如下:
// 变量 构造器
AAA = Function.prototype.constructor;
Function.prototype.constructor = function (a) {
    if (a == 'debugger'){
        return function (){};
        }
        return AAA(a);
};
  • 或者去李玺老师博客找更好的hook代码:http://cnlans.com/lx/tools/jshook
  • 将这段代码复制到控制台运行或者新建代码段执行,我推荐第二种;执行后即可过掉debuuger;
  • 我们向下翻页,可以发现一个没有见过的加密参数;

image-20231219161117634

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

image-20231219161444492

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

image-20231219161601282

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

image-20231219162223573

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

image-20231219162307801

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

image-20231219163047974

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

image-20231219163247419

  • 点击跳出一次后参数任然是明文,所以继续跳出;

image-20231219163335183

  • 此时作用域没有值了,我们再跳一次;

image-20231219163415181

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

image-20231219163459314

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

image-20231219163728015

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

image-20231219164010117

  • 将改写后的代码都拿下来;

image-20231219164052964

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

image-20231219164301416

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

image-20231219164716817

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

image-20231219165028850

  • 这样就比较好拿我们的方法,我们拿下来后进行改写;

image-20231219165206680

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

image-20231219165653559

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

image-20231219165815142

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

image-20231219170006770

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

image-20231219170345388

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

image-20240208172506662

0

评论 (0)

取消