nodejs中如何实现api hook?

JavaScript中基于原型的继承机制是动态的:对象从其原型继承属性,如果创建对象之后原型的属性发生改变,也会影响到继承这个原型的所有实例对象。也就是说如果通过某种方法,修改了类的原型中的属性,那么所有通过该原型创建的实例对象的相应属性也会被改变。
nodejs的hook实现利用以上语言特性,将对象中需要hook的属性所对应的原型进行修改,实现hook之目的。以下给出一个例子。

function Range(from, to){
this.from = from; this.to = to;
}
Range.prototype.include = function(x){
return this.from <=x && x <= this.to
;};

var r = new Range(1,3);
console.log(r.include(2)); //控制台将输出true。

以下是wrap函数的实现:

function wrap(obj, meth) {
//obj: 需hook的原型对象
//meth:需hook的原型属性名
var orig = obj[meth]; obj[meth] = function wrapper(){
console.log(“function start execute.”);
var res = orig.apply(this, arguments);
console.log(“functionfinish execute.”);
return res; }
}

wrap函数调用:
wrap(Range.prototype, 'include');

注:调用wrap可以在实例化Range之前或之后,只需要在实例对象调用被hook属性之前调用该wrap即可生效。示例:
var r = new Range(1,3);
wrap(Range.prototype, 'include');
console.log(r.include(2));
控制台将输出: function start execute. function finish execute. true

运行环境:nodejs:v6.11.2     os:win7 64位

nodejs中如何实现api hook?很简单吧!!
nodejs代码加密,就用Jshaman(http://www.jshaman.com