分析
查看登陆包,username和password有加密
定位到加密函数入口,这里搜索name和pwd出现文件过多,我们搜索请求包的其他参数,比如uid
成功定位到发包的位置
这里u和l就是我们的用户名和密码加密过后的值,Object(m["c"])就是我们的加密函数,
我们跟入m["c"]查看,这个加密方式有点像AES,t就是我们的key,我们再跟入D方法查看
代码写的是AES,这里我们可以试一下在线AES加密和网站的加密是否一致
对比pwd字段123456,发现加密后的值是一样的
如何扣取
这是一个典型的webpack打包的代码,在加密函数所处的js文件头部有webpackJsonp的字样,而且js文件也是app和chunkxxxx这种形式
查看这里的m就是导出的模块
我们在扣取webpack的时候要扣我们需要的函数模块和加载器
往上查找找到m定义的地方,记得不能超出作用域范围,如你找到了其他函数的m,和当前的m没有关系
我们下一个断点,刷新页面,让他击中断点
这里的n("ed08"),n就是加载器,他加载了ed08模块,给我们返回了一堆模块,我们跟入进去,发现这个就是我们需要的加载器
全部扣
我们把a函数所在的js全部保存下来,这里是加载器代码,并把a函数导出到全局,后面就可以用window.abc去加载我们的模块
导入模块
接下来我们导入模块
全局搜索ed08,找到这个function,这里我们全扣,就把这个js保存下来
格式化这个js文件,把这个json对象扣取出来
去除webpack开头的代码,整个json格式的模块如下
回到我们的加载器,这里准备放入我们的模块,他的加载器格式是一个数组,但是我们知道,这里放数组或者json对象都可以的,那我们把数组替换成我们的json对象
下面我们就可以用window.abcd代替n去加载模块,我们发现报错了,跟进去看一下
加载96cf模块报错了,我们看一下我们的json对象有没有这个函数,发现没有。
我们在目标网站全局搜索这个模块在哪个js文件,然后把整个js都保存下来,把他加入我们的加载器里面去,和我们第一次加载模块的处理方式一样
格式化js,扣取模块
追加到加载器加载模块里面,记得用逗号隔开
再次运行发现还在报错
跟进去发现这次是"5c96"模块,我们继续导入
找到在这个模块,像上面一样导入即可,这里省略步骤
这里我们运行,发现没有报错,并且成功返回了所需的加密模块
我们按照他的调用方式来调用这个加密函数,看看我们扣下来的代码是否能加密成功
最后运行成功
这里的Object就是执行代码的函数和eval一个样
总结
全部扣取的方式可以少一些手动补依赖的步骤,比较快速,当然也可以一个一个的扣依赖,都是一样的。