开发人员工具、断点技巧、搜索技巧等 视频版本:【JavaScript 代码调试方法】How To Debug In Chrome -> link
# 学会使用开发人员工具
preserve log
disable cache
source -> search
、 snippet script
、 override
重写覆盖脚本 (也可以用 fiddler 支持正则更智能)、 Ctrl键
切换智能提示…
# 学会使用 console
- console 的不同日志级别: console.log console.warn console.error console.debug console.info
- 用列表的形式展示 JSON 和数组数据: console.table
- 日志占位符(可以使用自定义字体样式):
console.log('%c%s', 'font-size: 24px;color: red', 'This is a important message!')
% s: 字符串占位符;% o: 对象占位符;% c: 样式占位符;% d: 数字占位符
# 断点技巧
dom断点
、 dom事件断点
、全局 event listener
、 xhr断点
…
下断点一般选在方法开头、结尾、return 处,遇到平坦流(for switch)在 case return 处下断
学会编辑断点条件(false -> 跳过该断点),切换断点禁用
# 搜索关键字技巧
一些常见的加密方式:
- 取盐校验 -> 不可逆
md5 md2 md4 带密码的 md5(hmac)
分 16 位、32 位、40 位
123456 经过 md5 后 ->
49ba...057
/e10adc...3e
sha1 sha256 dha512 分 40 位、64 位、128 位 123456 经过 sha1 后:7c4a...941b
- 对称加密 -> 可逆 AES、DES、3DES
- 非对称加密 -> 可逆 RSA(私钥 setprivate、公钥 setpublic) 同一个明文可以生成不同密文
- 对于加密无非以下几种情况:
- 16 进制的(以上的 3 种都是 16 进制的) 0-9 A-F
- base64 A-Z a-z 0-9 _ =
# 快速定位(无混淆的情况下)
- 使用魔法值搜索: 123456789、1732584193(md5)
- 使用 url 后缀搜索
- 使用关键字 & 属性搜索: password、.password、password=、[‘password’]、[“password”]
- md5 默认 key 0123456789abcdef
- RSA 特征 加密过程:new 一个 rsa 对象 ->setpublickey(key,iv (模值))->encrypt
# 其他技巧
- 巧用
JSON.stringify/parse
来提取 js 对象 - 扣 js 代码或补环境(DOM、BOM),扣代码则要善于导出变量(
window.xxx = ...
) - 学会识别统一格式的代码,过滤掉无用的格式要求的固定代码
- 学会识别 webpack 打包的代码,导出时导出加载器即可,一般位于 webpack 代码的顶部方法
- 对于 webSocket 协议,学会搜索对应关键词(
new websocket
、.onopen
、.onmessage
) - 方法里有
this
则需要导出对象,调用对象。方法,不能直接调用方法 - 灵活使用 hook,而不是一味地搜索关键字(能 hook 找就用 hook 找 (
var send_ = send;send = function(arg...){debugger;send_(...arg);}
)
参考链接