目前使用JS来执行恶意功能或者下载恶意组件的情况已经很平常了,所以这里介绍一下关于js的调试方法。
大部分的js脚本都是经过混淆或者加密的,静态分析的话根本不可能,一般在分析之前都需要对js脚本进行一下美化,推荐JavaScript美化网站:http://jsbeautifier.org/
下面进入正题,讲解js的调试方法。
一、Alert方法
在互联网刚刚起步的时代,网页前端还主要以内容展示为主,浏览器脚本还只能为页面提供非常简单的辅助功能的时候。那个时候,网页主要运行在以IE6为主的浏览器中,JS的调试功能还非常弱,只能通过内置于Window对象中的alert方法来调试,在网页中按F12键,点击Console按钮。
直接在这里输入想要查看的值即可。如下图所示,我们输入var a = ‘abc’;alert(a);浏览器即弹出对话框,显示变量a的值。
二、Console方法
随着js能做的事情越来越多,责任越来越大,地位也越来越重要,传统的alert调试方法渐渐的跟不上技术前进的节奏,alert调试方式弹出的调试信息,窗口不太美观,而且会遮挡页面内容,另外,使用alert方法,必须在程序逻辑中添加alert(xxx)的语句才能正常工作,比较麻烦,对于开发人员来说,后期还要手动清除这些代码。为了避免这种手续,出现了console的调试方法。
也可以在js恶意脚本中添加console语句,输出想要查看的目标值。
三、JS断点调试
JS断点调试,即是在浏览器开发者工具中为JS代码添加断点,让js执行到某一位置停止,方便我们对该处的代码进行分析和逻辑处理。为了方便说明,我们先准备一段示例代码:
使用sources断点
方法一:使用前面说的,在源码中添加alert或者console,添加后如下所示:
方法二:点击F12,找到sources菜单,在左侧树中找到对应的文件,然后点击行号来添加或删除断点。
设置完断点后,刷新页面,程序将在断点处停下来,在sources界面中会看到当前作用域中所有的变量和值。
这六个按钮的功能依次为:
- Pause/Resume script execution:暂停/恢复脚本执行(程序执行到下一断点停止)。
- Step over next function call:执行到下一步的函数调用(跳到下一行)。
- Step into next function call:进入当前函数。
- Step out of current function:跳出当前执行函数。
- Deactive/Active all breakpoints:关闭/开启所有断点(不会取消)。
- Pause on exceptions:异常情况自动断点设置
通过使用这几个键,就可以像调试可执行程序一样进行调试了。
需要注意的一点是,直接在代码区打印变量值的功能是在较新版本的Chrome浏览器中才新增的功能,如果你还在使用较老版本的Chrome浏览器,可能无法直接在断点的情况下查看变量信息,此时你可以将鼠标移动到变量名上短暂停顿则会出现变量值。也可以在右边Watch面板中输入变量值来查看,此方法同样适用于表达式。此外,你还可以在断点情况下,切换到Console面板,直接在控制台输入变量名称,回车查看变量信息。
四、debugger方法
这种方法是在源程序中添加“debugger;”语句,这样当代码执行到该语句的时候就会自动断下来,接下去的操作就和上面介绍的断点调试方法类似了。