最近在学习某标局的js逆向,接下来会不断更新逆向过程中遇到的难点,
网址:aHR0cDovL3dzZ3Muc2JqLmNuaXBhLmdvdi5jbjo5MDgwL3RtcHUv。
浏览器输入网址回车,打开F12,发现浏览器被debugger断住了,类似这样:

还有这样:

而且无论跳过多少次断点,都会回到这两种debugger处,俗称无限debugger反调试,目的就是不让你对网站的js进行调试。解决无限debugger,就是是某数逆向的第一步。
对于第一种debugger,跳过几次断点可以发现,会在两行固定的代码处中进行debugger,这样的话,我们可以直接利用谷歌浏览器的编辑断点,或者直接指定这一行Never pause here即可,处理之后就不会在这里断住了。
而第二种却没法使用第一种方法,通过分析调用栈发现,他是每次是在不同的地方进入eval中执行的代码,第一种方法没有效果,代码仍然会被断住。那有没有其他方法呢?
有,跟踪调用栈往回找,可以找到eval调用的位置,可以发现这一段debugger代码是通过加密后,存放在一个变量中,每次读取的都是这个变量中的代码,我们在此处下断,当下一次在此处断住的时候,我们在console中直接将这一段代码修改,把debugger给去掉,这样的话,当eval执行这个变量中的代码时,就不会有debugger了。

至此,两种无限debugger就顺利过掉了,可以开始开心的调试js代码了。
Comments | NOTHING