之前的章节有介绍过Javascript的Hook相关的基础知识,相信大部分人也知道了什么是Hook,今天我们来讲一下Hook实战,实际的运用。
0x1.事上练
// 程序员们基本都喜欢简单精辟 直入主题 不喜欢咬文嚼字 我们先直接上代码
var _log = console.log;
console.log = function(...args) {
_log(1);
_log(...args);
_log(2);
}
console.log(132);
上边代码我相信很多朋友都可以一眼看得懂,大概就是hook了原生的js打印函数,在打印的前后加上1和2。
如果有看不懂上述代码的,可以自己复制到浏览器多运行几次断点调试一步步看一下。
0x2简述要点
其实像js hook的这类技术,搞java的朋友一定特别眼熟,是不是有点像aop。
js的这个hook技术其实也可以用于日志打印,比如,在每次console.log的时候打印出当前日期,这样分析日志的时候可以精准的知道这个报错,这个信息是在什么时候产生的。代码如下
var _log = console.log;
console.log = function(...args) {
var format = function() {
const now = new Date();
const year = now.getFullYear();
const month = ('0' + (now.getMonth() + 1)).slice(-2);
const day = ('0' + now.getDate()).slice(-2);
const hours = ('0' + now.getHours()).slice(-2);
const minutes = ('0' + now.getMinutes()).slice(-2);
const seconds = ('0' + now.getSeconds()).slice(-2);
const formattedTime = year + '年' + month + '月' + day + '日 ' + hours + '时' + minutes + '分' + seconds + '秒';
return formattedTime;
}
_log('[' + format() + ']:',...args);
}
console.log('jsjiami_com 国内首家免费js在线加密站');
运行上述代码后,你会很惊奇的发现,后面每次运行console.log函数都会自动在前边加上当前时间。
当然了将hook技术用来做日志仅仅知识他作用的冰山一角。