前端无秘密看我如何策反JS为我所用上

近日,参加金融行业某私测项目,随意选择某个业务办理,需要向客户发送短信验证码:

响应报文中包含大段加密数据:

全站并非全参数加密,加密必可疑!尝试篡改密文,页面提示“实名认证异常”:

猜测该密文涉及用户信息,且通过前端JS解密,验证之。

手工分析

要分析前端,自然得打开浏览器的开发者工具。习惯性按下F12键,无反应,显然页面禁用F12,没有调试环境,所有后续工作均无法开展,我得创造环境。

1.1创造前端调试环境

虽然禁用F12,但未禁用shift-F5,它也能启用开发者工具,或者,页面也未禁用右键,我从元素审查菜单项同样进入开发者工具。前端采用webpack打包,通过开发者工具的{}简单美化:

刚执行前端代码,页面卡死,应该存在反调试逻辑:

多次单步执行,发现setTimeout(e,)语句:

业务上几乎不可能用到毫秒的定时器,猜测用于反调试。全局搜索(ctrl-shift-f)该语句,发现只存在于businessReservation.js中:

尝试删除该语句,看能否禁掉反调试。由于JS已被浏览器加载至内存,即便通过开发者工具删掉该语句,浏览器照样会执行它,所以,必须得在浏览器拿到JS前就将其删除,也就是说,得让服务端重新下发该JS,拦截响应包,删除该语句后放行至浏览器。具体而言,JS作为静态资源,优先从本地缓存中获取而非服务端,必须强制刷新页面(ctrl-shift-r),拦截返回businessReservation.js的响应包,搜索关键字setTimeout(e,),无果:

考虑到关键字setTimeout(e,)是经浏览器美化(代码格式化)之后的,尝试去掉逗号后面的空格,用关键字setTimeout(e,)再次搜索,命中:

将setTimeout(e,)改为空语句;:

放行修改后的JS至客户端,之后,前端代码可正常执行,也可随意下断点:

这下算是创建出了前端调试的环境。

长按下方


转载请注明:http://www.aierlanlan.com/rzfs/989.html

  • 上一篇文章:
  •   
  • 下一篇文章: