JS逆向:破解某专利检索网无限反 debug 问题

1. 网页反 debug 机制分析

  • 反 debug 调试措施,是通过在代码中 添加 debugger 代码 实现,通过 debugger 阻止非法用户调试代码,一般会同时通过内部死循环逻辑让网页呈现无限 debug 状态;
  • 打开 国家知识产权局专利检索网页http://cpquery.cnipa.gov.cn/ ),打开网页调试模式,随机出现下面的状况;

  • 将跳出的代码格式化,我们发现 debugger 字符;

  • 全局搜索 debugger,我们发现如下代码逻辑,可见使用了递归循环调用 debugger,以实现无限 debugger 的效果;

2. 解决方法

2.1. 禁用浏览器断点

  • 如下图,点击箭头指示位置,禁用浏览器断点;
  • 之后按键盘 F8,问题解决;

  • 问题: – 禁用浏览器断点后将无法下断点、调试代码,所以此方法并不理想;这种方法一般用于 **获取网页元素,不能用于调试过程;

    2.2. Fiddler 绕过 debbuger

  • 有两个断点位置: – before request:也就是发送请求之后,但是Fiddler代理中转之前,这时可以修改请求的数据; – after response:也就是服务器响应之后,但是在Fiddler将响应中转给客户端之前,这时可以修改响应的结果;

    2.2.1. 下断方法一:为指定网站的请求下断点

– 打开 fiddler,找到下图箭头指向位置:

– before request

bpu cpquery.cnipa.gov.cn

– after response

bpafter cpquery.cnipa.gov.cn

– 消除 before request 断点

bpu

– 消除 after response 断点

bpafter 

2.2.2. 下断方法二:设置全局断点

  • 打开 fiddler,依次点击 Rules -> Automatic Breakpoints -> Before Reuqests

  • 刷新网页,得到下图所示红色提示,表示下断成功(点击 Go 按钮可以进行下一步);

  • 修改参数,发起请求;

  • 清除断点,依次点击:rules -> automatic breakpoint -> disabled

2.3. 条件断点(conditional breakpoint)

  • 找到 debugger 代码所在位置,在代码行天剑条件断点,设置一个 结果值为 False 的条件,这样就不会调用 debugger;

  • 在上面的位置输入下面的条件,然后 enter 输入
    1===0
    

  • 由于 debugger 代码出现在多个位置,所以需要多次添加上面的 1===0 条件断点;