学校放了个破保密专题课视频,还不能拉进度条,也不能控制台直接调倍速,我猜是把操作写在事件的回调函数里了。想覆盖一下js代码。
源代码结构如下:
用chrome一个插件把源代码下载下来:
好,接下来用shuji还原一下。但是没有js.map文件。没关系,去js里搜搜看:
喜,去下载一下:
仔细看看,这不是个文件名,主体被base64加密了。去解密一下:
{"version":3,"sources":["webpack:///./src/store/modules/settings.js?0781"],"names":["showSettings","defaultSettings","tagsView","fixedHeader","sidebarLogo","state","theme","variables","siteData","mutations","CHANGE_SETTING","_ref","key","value","hasOwnProperty","SET_SITE_DATA","actions","changeSetting","_ref2","data","commit","getSite","_ref3","Promise","resolve","reject","fetchDetail","then","response","catch","error","namespaced"],"mappings":"AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAuD;AACf;AACa;AAErD,IAAQA,YAAY,GAAyCC,gDAAe,CAApED,YAAY;EAAEE,QAAQ,GAA+BD,gDAAe,CAAtDC,QAAQ;EAAEC,WAAW,GAAkBF,gDAAe,CAA5CE,WAAW;EAAEC,WAAW,GAAKH,gDAAe,CAA/BG,WAAW;AAExD,IAAMC,KAAK,GAAG;EACZC,KAAK,EAAEC,qEAAS,CAACD,KAAK;EACtBN,YAAY,EAAEA,YAAY;EAC1BE,QAAQ,EAAEA,QAAQ;EAClBC,WAAW,EAAEA,WAAW;EACxBC,WAAW,EAAEA,WAAW;EACxBI,QAAQ,EAAE,CAAC;AACb,CAAC;AAED,IAAMC,SAAS,GAAG;EAChBC,cAAc,EAAE,SAAAA,eAACL,KAAK,EAAAM,IAAA,EAAqB;IAAA,IAAjBC,GAAG,GAAAD,IAAA,CAAHC,GAAG;MAAEC,KAAK,GAAAF,IAAA,CAALE,KAAK;IAClC,IAAIR,KAAK,CAACS,cAAc,CAACF,GAAG,CAAC,EAAE;MAC7BP,KAAK,CAACO,GAAG,CAAC,GAAGC,KAAK;IACpB;EACF,CAAC;EACDE,aAAa,EAAE,SAAAA,cAACV,KAAK,EAAEG,QAAQ,EAAK;IAClCH,KAAK,CAACG,QAAQ,GAAGA,QAAQ;EAC3B;AAEF,CAAC;AAED,IAAMQ,OAAO,GAAG;EACdC,aAAa,WAAAA,cAAAC,KAAA,EAAaC,IAAI,EAAE;IAAA,IAAhBC,MAAM,GAAAF,KAAA,CAANE,MAAM;IACpBA,MAAM,CAAC,gBAAgB,EAAED,IAAI,CAAC;EAChC,CAAC;EACD;EACAE,OAAO,WAAAA,QAAAC,KAAA,EAAa;IAAA,IAAVF,MAAM,GAAAE,KAAA,CAANF,MAAM;IACd,OAAO,IAAIG,OAAO,CAAC,UAACC,OAAO,EAAEC,MAAM,EAAK;MACtCC,kFAAW,CAAC,CAAC,CAAC,CAAC,CAACC,IAAI,CAAC,UAAAC,QAAQ,EAAI;QAC/B,IAAQT,IAAI,GAAKS,QAAQ,CAAjBT,IAAI;QACZC,MAAM,CAAC,eAAe,EAAED,IAAI,CAAC;QAC7BK,OAAO,CAACL,IAAI,CAAC;MACf,CAAC,CAAC,CAACU,KAAK,CAAC,UAAAC,KAAK,EAAI;QAChBL,MAAM,CAACK,KAAK,CAAC;MACf,CAAC,CAAC;IACJ,CAAC,CAAC;EACJ;AACF,CAAC;AAEc;EACbC,UAAU,EAAE,IAAI;EAChB1B,KAAK,EAALA,KAAK;EACLI,SAAS,EAATA,SAAS;EACTO,OAAO,EAAPA;AACF,CAAC","file":"0781.js","sourcesContent":["import variables from '@/styles/element-variables.scss'\nimport defaultSettings from '@/settings'\nimport { fetchDetail } from '@/api/sys/config/config'\n\nconst { showSettings, tagsView, fixedHeader, sidebarLogo } = defaultSettings\n\nconst state = {\n theme: variables.theme,\n showSettings: showSettings,\n tagsView: tagsView,\n fixedHeader: fixedHeader,\n sidebarLogo: sidebarLogo,\n siteData: {}\n}\n\nconst mutations = {\n CHANGE_SETTING: (state, { key, value }) => {\n if (state.hasOwnProperty(key)) {\n state[key] = value\n }\n },\n SET_SITE_DATA: (state, siteData) => {\n state.siteData = siteData\n }\n\n}\n\nconst actions = {\n changeSetting({ commit }, data) {\n commit('CHANGE_SETTING', data)\n },\n // 获取网站配置信息\n getSite({ commit }) {\n return new Promise((resolve, reject) => {\n fetchDetail({}).then(response => {\n const { data } = response\n commit('SET_SITE_DATA', data)\n resolve(data)\n }).catch(error => {\n reject(error)\n })\n })\n }\n}\n\nexport default {\n namespaced: true,\n state,\n mutations,\n actions\n}\n\n"],"sourceRoot":""}
呃感觉里面有点东西,那个mapping是不是就是我要的mapping啊。没看懂。再换个思路:
请求里也没找到。黔驴技穷嘞。
开始无能狂怒。
URL里这个看起来像进度,改一下:
控制台:
出现了一些奇怪的输出
学习一下路由守卫:
全局前置守卫 (beforeEach):常用于进行全局的登录验证和权限检查。在用户访问需要登录才能访问的页面时,可以使用该守卫拦截路由导航,并检查用户是否已登录。如果用户未登录,则跳转到登录页。另外,还可以在该守卫中检查用户权限,如果权限不足,则跳转到没有权限访问的页面。
全局后置守卫 (afterEach):常用于记录日志和统计数据等操作。例如,在用户访问某个页面时,可以使用该守卫记录用户的访问日志,统计用户的访问次数和时长等数据。
路由独享守卫 (beforeEnter):常用于路由级别的登录验证和权限检查。在某些特定页面需要进行特殊处理时,可以使用该守卫在路由配置中定义。例如,在管理员后台页面中,可以使用该守卫拦截路由导航,并检查用户是否是管理员。如果不是管理员,则跳转到没有权限访问的页面。
组件内守卫 (beforeRouteEnter、beforeRouteUpdate、beforeRouteLeave):常用于组件级别的登录验证和权限检查。例如,在用户访问某个需要进行登录才能访问的组件时,可以使用该守卫在组件内部进行登录验证。另外,在用户离开当前组件之前,也可以使用该守卫进行必要的数据保存和清理工作。
总之,路由守卫可以帮助我们实现更加灵活和安全的路由导航功能。在实际开发中,需要根据具体的业务需求和场景选择合适的守卫类型,并结合具体的代码实现来完成相应的功能。
作者:狂吃不胖小趴菜
链接:https://juejin.cn/post/7213598216883978300
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
不死心,最后去看看.js.mapping长什么样:
我超,这不是之前解出来的东西吗
试试:
注意要在管理员权限下运行。
解到第三个的时候看到视频相关代码了,还带注释,你人还挺好的哩.jpg:
// 监听进度条变更 onPlayerTimeupdate(player) {
this.nowtime = player.cache_.currentTime
const num2 = this.lasttime / this.videotime * 100
if (num2 > this.maxProgress) { this.maxProgress = num2 }
// 若前后时间相差1s,且进度条超过最大进度,执行回退,并回退至最大进度
if (this.nowtime - this.lasttime > 1) {
if (this.nowtime / player.cache_.duration * 100 > this.maxProgress) {
this.lasttime = this.maxProgress / 100 * player.cache_.duration
player.currentTime(this.lasttime)
找到那个破输出了。
哈哈哈哈哈哈哥们可爱的捏
又翻了第五个,这段看上去是关于搜索的。这破网站还有搜索功能。
下载插件gores,把修改好的js送进去替换掉:
不过也不重要了,因为在我搞这些东西的时候这视频已经他妈的放完了。我真是个无聊的废物。
早知道打游戏了。
upd at the next day:
关于ChunkLoadError:解决单页应用中的 ChunkLoadError - 掘金 (juejin.cn)