一、前言

xxx是一款用于前端防御自动化工具的安全网关,核心代码由服务器下发给客户端执行,通过cookie将执行结果带回,再根据js获取的前端数据判断用户是否异常,完成安全检测

二、代码入口

js计算结果通过cookie传给服务器,参数名为:8PHkpr8y、JF7cGtR5、SflKxwRJ

经过调试分析,代码明文存放在ng_dynamic_defend文件中,核心逻辑位于尾部这几行

三、读取配置

get_global()函数读取配置信息,放入_global_config

window**.**config **=** 'eyJmaW5nZXIiOnsibmFtZSI6IkpGN2NHdFI1In0sImJvdCI6eyJlbmFibGVkIjp0cnVlLCJuYW1lIjoiOFBIa3ByOHkifSwic3VibWl0Ijp7ImVuYWJsZWQiOnRydWUsIm5hbWUiOiJVVmpES082biIsInVybCI6IiJ9LCJ0b2tlbiI6eyJlbmFibGVkIjp0cnVlLCJuYW1lIjoiU2ZsS3h3UkoiLCJ1cmwiOiJqc190ZXN0LmNvbTsiLCJpc19jaGVja191cmkiOnRydWUsImlzX2NoZWNrX2dldCI6dHJ1ZX0sImNvbnRlbnQiOnsiZW5hYmxlZCI6ZmFsc2UsIm5hbWUiOiJTZmxLeHdSSiIsImNvbmZ1c2VfdHlwZSI6IjAifSwic2NyaXB0Ijp7ImlzX2FudGlfZGVidWciOmZhbHNlfX0='**;**
**!****function**  **(**global**)** **{****function**  _base64_parse**(**e**)** **{****return** CryptoJS**.**enc**.**Base64**.**parse**(**e**).**toString**(**CryptoJS**.**enc**.**Utf8**)****}****function**  get_global**()** **{****var** e **=** _base64_parse**(**global**.**config**),**t **=** JSON**.**parse**(**e**);**_global_config **=** global**.**nY1vq7Gi **=** t**}**
**}(**window**);***/**
*{**"finger": {**"name": "JF7cGtR5"**},**"bot": {**"enabled": true,**"name": "8PHkpr8y"**},**"submit": {**"enabled": true,**"name": "UVjDKO6n",**"url": ""**},**"token": {**"enabled": true,**"name": "SflKxwRJ",**"url": "js_test.com;",**"is_check_uri": true,**"is_check_get": true**},**"content": {**"enabled": false,**"name": "SflKxwRJ",**"confuse_type": "0"**},**"script": {**"is_anti_debug": false**}*
*}*
**/*

【点击查看资料详细】

四、数据采集

以下三个函数会使用到window对象来采集客户端数据:

  • get_tool_feature() 获得工具特征
  • get_browser_feature() 获得浏览器特征
  • get_fingerprint() 获得浏览器指纹

1.get_tool_feature()

get_webdriver**()**  *//window.navigator.webdriver*
get_phantomjs**()**  *//window.navigator.userAgent*
get_bot**()**  *//检测关键字:'__webdriver_evaluate','__selenium_evaluate','__webdriver_script_function','__webdriver_script_func','__webdriver_script_fn','__fxdriver_evaluate','__driver_unwrapped','__webdriver_unwrapped','__driver_evaluate','__selenium_unwrapped','__fxdriver_unwrapped''_phantom','__nightmare','_selenium','callPhantom','callSelenium','_Selenium_IDE_Recorder'*
get_navigator_for_tool**()**  *//window.navigator.languages*
get_canvas_for_tool**()**  *//window.document.createElement('canvas').getContext*
get_storage_for_tool**()**  *//window.localStorage && window.sessionStorage*
get_consol**()**  *//window.console.log(1)*
get_awvs**()**  *//检测关键字:'SimpleDOMXSSClass','MarvinHooks','MarvinPageExplorer','HashDOMXSSClass'*
get_appscan**()**  *//检测关键字:'appScanSendReplacement','appScanOnReadyStateChangeReplacement','appScanLoadHandler','appScanSetPageLoaded'*

2.get_browser_feature()

get_indexedDB**()**  *//window.indexedDB*
get_openDatabase**()**  *//window.openDatabase*
get_localStorage**()**  *//window.localStorage*
get_sessionStorage**()**  *//window.sessionStorage*
get_audio**()**  *//window.AudioContext.destination*
get_file**()**  *//'object' == typeof File || 'function' == typeof File*
isCanvasSupported**()**  *//window.document.createElement('canvas').getContext*
isWebGlSupported**()**  *//window.WebGLRenderingContext || window.document.createElement('canvas').getContext('webgl')*
get_plugins**()**  *//window.navigator.plugins*
get_languages**()**  *//window.navigator.languages*
get_platform**()**  *//window.navigator.platform*
get_cpuClass**()**  *//_navigator.cpuClass*
get_hardwareConcurrency**()**  *//_navigator.hardwareConcurrency*
get_namespaces**()**  *//window.document.namespaces*
get_documentMode**()**  *//window.document.documentMode*
get_ActivexObject**()**  *//window.document.ActivexObject*
get_StyleMedia**()**  *//window.StyleMedia*
get_opera**()**  *//window.opera*
get_firefox**()**  *//'undefined' != typeof InstallTrigger*
get_chrome**()**  *//window.chrome*
get_safari**()**  *///constructor/i.test(window.HTMLElement) || '[object SafariRemoteNotification]' === (!window.safari || safari.pushNotification).toString()*

3.get_fingerprint()

get_indexedDB**()**  *//window.indexedDB*
get_openDatabase**()**  *//window.openDatabase*
get_localStorage**()**  *//window.localStorage*
get_sessionStorage**()**  *//window.sessionStorage*
get_audio**()**  *//window.AudioContext.destination*
get_file**()**  *//'object' == typeof File || 'function' == typeof File*
get_canvas**()**  *//window.document.createElement('canvas')*
get_webgl**()**  *//window..document.createElement('canvas').getContext('webgl')*
get_webgl_render**()**  *//window.document.createElement('canvas').getContext('webgl')*
get_plugins**()**  *//window.navigator.plugins*
get_language**()**  *//window.navigator.language || window.navigator.userLanguage || window.navigator.browserLanguage || window.navigator.systemLanguage ||*
get_languages**()**  *//window.navigator.languages*
get_platform**()**  *//window.navigator.platform*
get_cpuClass**()**  *//window.navigator.cpuClass*
get_hardwareConcurrency**()**  *//window.navigator.hardwareConcurrency*
get_timezone_offset**()**  *//(new Date).getTimezoneOffset()*
get_timezone**()**  *//window.Intl && window.Intl.DateTimeFormat*
get_screen_ratio**()**  *//window.screen.width / window.screen.height * 100*
get_screen_resolution**()**  *//window.screen.availHeight + 'X' + window.screen.availWidth + 'X' + window.screen.availLeft + 'X' + window.screen.availTop*
get_touch_support**()**  *//window.navigator.maxTouchPoints || window.navigator.msMaxTouchPoints*
get_media_devices**()**  *//window.navigator.mediaDevices && window.navigator.mediaDevices.enumerateDevices*
get_battery**()**  *//window.navigator.getBattery*
get_adBlock**()**  *//window.document.getElementsByClassName('adsbox') [0].offsetHeight*
get_userAgent**()**  *//window.navigator.userAgent*


4.数据处理

set_bot_cookie()set_fingerprint()两个函数分别将tool_featurebrowser_featurefingerprint加密写入到cokie中,变量名为:8PHkpr8yJF7cGtR5

1.set_bot_cookie()

2.set_fingerprint()

五、 事件监听

1.a标签

设置EventListenerEx()监听,当页面加载完成时触发load_func(),对当前cookie执行base64编码操作,并设置参数名为KBwtGA

**function**  confuse_cookie**()**  **{****var** e**;**_document**.**cookie **&&** **0** **!=** _global_config**.**content**.**enabled **&&** '1' **==** _global_config**.**content**.**confuse_type **&&** **(**e **=** _document**.**cookie**,** clearAllCookie**(),** CookieUtil**.**set**(**'KBwtGA'**,** btoa**(**e**)))**
**}**

当发生点击事件时触发a_click_handler(),对请求地址添加令牌,变量名为SflKxwRJ

replace_url()调用get_token()生成加密tonken

2.form表单

设置EventListenerEx()监听,当发生表单事件时触发form_hook(),调用get_submit()对表单内数据加密,参数名为UVjDKO6n,调用get_token()生成加密tonken,参数名为SflKxwRJ

3.ajax请求

当发生ajax事件时触发ajax_hook(),对不同请求方式做了单独处理

监听到get请求时调用get_body_for_get()对args数据使用get_token()加密,监听到post请求时调用get_body_for_post()对请求体get_submit()加密、对url使用replace_url()调用get_token()生成加密tonken

六、总结

xxx的核心代码未经过加密或混淆以明文形式下发,格式化后通过调试分析比较容易弄清楚执行逻辑,代码主要实现以下两个功能:

  1. 采集window或者navigator的部分特征值,按位计算形成一个整数,再利用rc4算法加密,指纹特征存放在cookie中JF7cGtR5、工具特征存放在cookie中8PHkpr8y

  2. 设置a标签form表单ajax请求监听,触发时对数据内容调用get_submit()使用rc4算法加密、对url调用get_token()使用rc4算法计算token令牌

【网络安全】某安全网关前端JS分析相关推荐

  1. 云客Drupal源码分析之前端js中的翻译

    从本主题开始<云客Drupal源码分析>系列将连续发布和前端js相关的内容,如果您对JavaScript还不熟悉或者需要来一次系统性的整理回顾,在此云客为您准备了以下资料: <PHP ...

  2. 前端 js实现模糊搜索

    前端 js实现模糊搜索 template <input type="text" v-model="keyWord" @input="fuzzyQ ...

  3. 前端Js框架 UI框架汇总 特性 适用范围 选择

    身为一个资深后端工程师,面对层出不穷的前端框架,总让人眼花缭乱,做一个综合解析贴,从全局着眼,让我们明白各种前端框架的应用范围,为如何选择前端框架,从不同的维度提供一些线索,做为一个长期优化贴,欢迎指 ...

  4. 对于前端js框架对于事件处理的应用场景探讨

    2019独角兽企业重金招聘Python工程师标准>>> 之前看了WTD的一篇关于前端js框架对于事件处理的分析,有两种处理场景,一种是执行handlers的时候执行某一个handle ...

  5. 前端性能分析工具利器

    作者:basinwang,腾讯 PCG 前端开发工程师 大型项目容易遇到性能问题,一般来说,当我们遇到性能瓶颈的时候,才会开始去进行相应的分析.分析的方向除了业务本身的特点相关之外,常见的还可以借助一 ...

  6. web前端性能分析--实践篇

    当我们知道了web前端性能的关键点后,那么接下来要做的就是如何去具体实施并获取这些关键点的数据了.通过前面的学习知道了不少好的工具,经过对比后个人觉得dynatrace还是不错的. 不仅支持ie,ff ...

  7. java集合转js数值_前端js调用接口转换Map数组数据

    返回Map数据 后端接口返回数据格式 { "code": 1, "msg": "操作成功!", "count": 0, ...

  8. 基于React的PC网站前端架构分析

    代码地址如下: http://www.demodashi.com/demo/12252.html 本文适合对象 有过一定开发经验的初级前端工程师: 有过完整项目的开发经验,不论大小: 对node有所了 ...

  9. 前端Js框架汇总【转】

    概述: 有些日子没有正襟危坐写博客了,互联网飞速发展的时代,技术更新迭代的速度也在加快.看着Java.Js.Swift在各领域心花路放,也是煞是羡慕.寻了寻.net的消息,也是振奋人心,.net co ...

最新文章

  1. 超详细支持向量机知识点,面试官会问的都在这里了
  2. R使用lm构建单变量线性回归模型
  3. 机器学习漫谈:还有很长的路要走
  4. Spring Cloud alibaba版本对应
  5. [react] react声明组件有哪几种方法,各有什么不同?
  6. SpringBoot报错 org.apache.catalina.LifecycleException: Protocol handler start failed
  7. Permutation(构造+思维)
  8. phpcms9.6 ueditor_Phpcms v9深度整合百度编辑器Ueditor
  9. 【QA】基于动态协同网络(DCN)的问答模型
  10. openstack里给云主机配置vip
  11. 2021年黄石二中高考成绩查询,2020年黄石二中2020届高考总结
  12. iOS转向Flutter学习日记
  13. 利用Chrome在PC电脑上模拟微信内置浏览器
  14. 公历农历显示节日节气星期等万年历
  15. coreseek note
  16. 【推荐】AI智慧安监企业安全生产监督管理平台建设技术解决方案合集(共342份,863M)
  17. 2019年第21周-01文章词频统计
  18. 《中国游戏产业报告》出炉,爱加密呼吁重视游戏安全
  19. 北京地铁线路中心计算机系统,北京地铁DT—1型计算机联锁系统
  20. 基于python+mysql超市信息管理系统(附完整源代码)

热门文章

  1. 成功解决NVIDIA安装程序无法继续  Ths OCH driver package is not conmtibIe with the currently uistalled version of
  2. Paper:《Graph Neural Networks: A Review of Methods and Applications》翻译与解读
  3. Interview:算法岗位面试—上海某公司算法岗位(偏图像算法,互联网科技行业)技术面试考点之区块链的TPS等问题
  4. TF之DeepDream:DeepDream前世今生之简介、安装、使用方法之详细攻略
  5. DL之NN:基于(sklearn自带手写数字图片识别数据集)+自定义NN类(三层64→100→10)实现97.5%准确率
  6. 20 道 Spring Boot 面试题
  7. UOJ #310 黎明前的巧克力 (FWT)
  8. 《精通Python设计模式》学习结构型之享元模式
  9. BZOJ2822 [AHOI2012]树屋阶梯
  10. WinCE 系统刚启动时运行应用,在应用启动时偶尔出现异常