你想逆向我的 js 代码?呵呵,先过了我的反 debug 再说吧!

点击“简说Python”,选择“星标公众号”

福利干货,第一时间送达!

你想逆向我的 js 代码?呵呵,先过了我的反 debug 再说吧!_第1张图片

图片by@unsplash

本文授权转载自学习Python的正确姿势,禁二次转载

作者:小帅b

阅读文本大概需要 4 分钟。

有时候我们在爬取

某个用 js 渲染的网站


需要去分析一下

别人网站的数据展示规则


这个时候就不得不用 Chrome 的 DevTools 进行分析了



你想逆向我的 js 代码?呵呵,先过了我的反 debug 再说吧!_第2张图片


对于一般的网站
我们在具体的位置
打个断点就可以进行调试了


你想逆向我的 js 代码?呵呵,先过了我的反 debug 再说吧!_第3张图片


不过有一些网站
当你打开 DevTools 的时候
你都还没打断点
他妈的直接就这样了


你想逆向我的 js 代码?呵呵,先过了我的反 debug 再说吧!_第4张图片



你想逆向我的 js 代码?呵呵,先过了我的反 debug 再说吧!_第5张图片


一直 debug
只要一按 F2 就一直 debug

就算你运行过去
还是 一直 debu g
一直调用
卡死你
卡死你
卡死你
你想逆向我的 js 代码?呵呵,先过了我的反 debug 再说吧!_第6张图片


就是不让你进行调试
你奈我何


你想逆向我的 js 代码?呵呵,先过了我的反 debug 再说吧!_第7张图片



哇靠啊
怎么解决呢

接下来就是
学习反反 debug 的正确姿势

来来来
莫慌

小帅b先跟你说说
在 Chrome 的开发者工具中
怎么样在代码里面打断点


我们最常用的操作
就是在想要打断点的代码行左侧
用鼠标轻轻点一下
就可以生成一个图标


然后就可以对这行代码
开始进行调试了


你想逆向我的 js 代码?呵呵,先过了我的反 debug 再说吧!_第8张图片


这样的操作
也可以直接在代码中操作
使用 debugger 这个
关键字就可以了

比如这样的 js

console.log('a');
	
console.log('b');	
debugger;	
console.log('c');

当 Chrome 在运行的时候
发现了 debugger

就会停下来
进入调试模式

其实在代码中
声明 debugger 
就和我们点击代码行
左侧进行调试是一样的

也正是因为这个关键字
所以就可以从它入手

只要在首页的 js 中
写一个方法
不断的循环执行 debugger

比如

 
   


那么当我们打开这个网页
的调试面板的时候

就会不停的处于 debug 模式

即使你疯狂的点击运行按钮

640?wx_fmt=png

也无济于事


你想逆向我的 js 代码?呵呵,先过了我的反 debug 再说吧!_第9张图片


其实 Chrome 有一个 忽略断点 的功能

只要在代码行左侧
点击右键
选择 Never pause here  即可
然后就会有个黄色的标识


640?wx_fmt=png


当下次运行到这里的时候
就会忽略这个断点


这对于一些简单的很有效


但是
有些比较 变态 的就没那么容易了


比如这个


你想逆向我的 js 代码?呵呵,先过了我的反 debug 再说吧!_第10张图片


就算我忽略了
它还是会疯狂进入 debug 模式
看看右边的 Call stack
一直疯狂的调用 _0xa3e3cc
吃你的内存

把你搞的不要不要的
你想逆向我的 js 代码?呵呵,先过了我的反 debug 再说吧!_第11张图片

那怎么办好呢?
只能看看它的源码了


你想逆向我的 js 代码?呵呵,先过了我的反 debug 再说吧!_第12张图片


可以看到
2949 行
一直在 递归 调用_0xa3e3cc 函数

所以
我们才会一直处于 debug 模式

既然已经问题出现在哪里了
那就想办法把这个给搞掉


你想逆向我的 js 代码?呵呵,先过了我的反 debug 再说吧!_第13张图片



还记不记得我们
之前说的 mitmproxy

没错
这次走它的代理
然后拦截这个网页
把 js 中的 debugger 代码去掉

然后我们不用受这个罪了呀

快点开启我们的 mitmweb

设置地址拦截

你想逆向我的 js 代码?呵呵,先过了我的反 debug 再说吧!_第14张图片

浏览器设置好代理

640?wx_fmt=png

打开代理之后访问一波


640?wx_fmt=png

这时候被我们拦截下来了

640?wx_fmt=png


请求我们直接让它过去


640?wx_fmt=png


因为我们只要 拦截返回的数据
然后对它进行修改

ok
现在我们就拦截到返回的数据了


你想逆向我的 js 代码?呵呵,先过了我的反 debug 再说吧!_第15张图片


修改一下代码
点击这支笔


640?wx_fmt=png


可以看到现在的代码难看

640?wx_fmt=png

复制出来用编辑器打开吧

你想逆向我的 js 代码?呵呵,先过了我的反 debug 再说吧!_第16张图片

把调用递归的代码去掉


640?wx_fmt=png


把 debugger 关键字换成 return

640?wx_fmt=png


复制到 mitmweb 替换

你想逆向我的 js 代码?呵呵,先过了我的反 debug 再说吧!_第17张图片


右上角的勾给打上
然后运行

640?wx_fmt=png
640?wx_fmt=png


此时此刻
浏览器得到的就是修改过的文件


你想逆向我的 js 代码?呵呵,先过了我的反 debug 再说吧!_第18张图片


打开 F12


你想逆向我的 js 代码?呵呵,先过了我的反 debug 再说吧!_第19张图片


可以看到
不会在一直 debug 恶心我们了


可能不同的网站
反 debug 的实现不同
思路就是这么个思路


以不变应万变
下回见了哦
peace

前天最佳留言读者:麦

请于2日内联系微信:jjxksa888,领取奖励。

640?wx_fmt=png

你若迎难而上

问题终究会迎刃而解

昨天最佳留言读者:飞仙

请于2日内联系微信:jjxksa888,领取奖励。

640?wx_fmt=png

这是个贼眼熟的读者朋友
几乎转发/留言了没一篇文章
感谢,希望后面留言可以多说点话

今日留言主题

说说你看了本文后的感触?

或者一句激励自己的话?

(字数不少于15字)

我会选出一名同学赠出下面书籍

Python网络爬虫从入门到实践


电子工业出版社赞助

《Python网络爬虫从入门到实践》

640?wx_fmt=png

点击图片,查看书籍详情


2小时快速掌握Python基础知识要点

完整Python基础知识要点

640?wx_fmt=jpeg
学Python | 聊赚钱

你可能感兴趣的:(你想逆向我的 js 代码?呵呵,先过了我的反 debug 再说吧!)