首页
社区
课程
招聘
未解决 hook js原型函数 50.00雪花
发表于: 2019-10-30 09:57 2790

未解决 hook js原型函数 50.00雪花

2019-10-30 09:57
2790
hook的js代码已经有了,不知道怎么调用hook原型函数。

懂js的帮个忙,帮我调用。

我自个能实现hook全局函数,但是原型函数不知道怎么调用的

hook的js代码来自----

张天琪(pnig0s),就职于阿里巴巴,FreeBuf黑ke与极客安全媒体平台创办人之一,漏洞盒子安全众测平台创办人之一,xKungFoo,xDef等安全会议演讲者,多次发现Google,Yahoo,Ebay,Twitter等国外知名厂商安全问题并获得公开致谢。

----改版的

这里是hook.js代码,代码不长,响应版规,放到蓝奏云网盘上。https://www.lanzous.com/i72ff3c


以下是参数与示例说明

[bool]hook:params{

        realFunc[String|must]:用于保存原始函数的函数名称,用于unHook;

       hookFunc[Function|must]:替换的hook函数;

        context[Object|opt]:目标函数所在对象,用于hook非window对象下的函数,如String.protype.slice,carInstance1

        methodName[String|opt]:匿名函数需显式传入目标函数名eg:this.Begin = function(){....};}



[bool]unhook:params{

        realFunc[String|must]:用于保存原始函数的函数名称,用于unHook;

        funcName[String|must]:被Hook的函数名称

        context[Object|opt]:目标函数所在对象,用于hook非window对象下的函数,如String.protype.slice,carInstance1}



<script src=hook.js></script>

var myHook = new Hooks();

myHook.initEnv();

//普通全局函数

var _alert = null;function myalert(param){

console.log("before hook");

}

alert.hook("_alert",myalert);

alert.unhook("_alert","alert");

alert(1);


//自定义对象匿名函数

function Person() {

this.getName = function(name) {

alert('Call' + name);

}

}

var p = new Person();

var _p_getName = null;function mygetName(name){

alert("Hooked");

}

p.getName.hook("_p_getName",mygetName,p,"getName");

p.getName.unhook("_p_getName","getName",p);

p.getName("pnig0s");



//原型对象函数

var _slice = null;function myslice(param){

alert("Hooked");

}

String.prototype.slice.hook("_slice",myslice,String.prototype);

String.prototype.slice.unhook("_slice","slice",String.prototype);

var str = "pnig0s";str.slice(1);

myHooks.cleanEnv(); //clear hooks


以下是我需要的hook原型对象函数



var myprototype= function() {


var e= function(a, b){

       this.x = a;

       this.y = b;   


}


e.prototype.Event = function(e, t) {  


     alert('test');      


  }


}

问题来了,怎么hook   e.prototype.Event  这一段对象的函数。。


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 688
活跃值: (3610)
能力值: (RANK:15 )
在线值:
发帖
回帖
粉丝
2
控制台输出:

2019-10-30 15:30
3
雪    币: 734
活跃值: (100)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
你这个我在吾爱还有看雪另一篇文章好像也看到了,我觉得你钻进了个死胡同
我记得你在看雪另一篇帖子里说是hook别人的代码对吧??? 
首先呢,你的myprototype方法内部对于全局上下文来说绝对是访问不了的,所以说在不修改原始代码的情况下是无法完成你所说的功能的
其次为啥我说你钻进死胡同呢,就是因为目前你的思路过于依赖hook.js了。 
这么讲,既然你能知道hook哪个函数,那么也就代表你一定看得到明文代码的,并且你肯定有个代码切入点(比如浏览器console,或者油猴脚本这类的) 那么为什么你不可以直接替换原始函数呢(你去看hook.js,它也是利用的这个原理)

最开始你是这样吧

我直接在控制台里写的所以myprototype肯定是全局的吧,那我现在再执行这么一句(console哪里随便写什么),是不是达到的效果就是hook


最后于 2019-10-31 09:51 被FuXiChen编辑 ,原因:
2019-10-31 09:50
0
雪    币: 194
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
FuXiChen 你这个我在吾爱还有看雪另一篇文章好像也看到了,我觉得你钻进了个死胡同我记得你在看雪另一篇帖子里说是hook别人的代码对吧???&nbsp;首先呢,你的myprototype方法内部对于全局上下 ...
你好,我明白您意思,您意思就是覆盖掉之前的原型函数,达到修改的效果,但是其他js不单单只有一个函数,直接覆盖掉会导致用不了。

其实在按更简单的,Javascript有继承的功能

比如
var myhook=new mypototype;
myhook.prototype=mypototype.prototype;
myhook.e=function(){
console.log("修改成功");
}

但是这些并不是我需要的,我需要的是hook.js的使用方法。。就只是使用方法而已。。
2019-11-9 02:12
0
雪    币: 194
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
很久没上看雪,不好意思,没看到您的消息。
2019-11-9 02:12
0
雪    币: 194
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
我是想知道这个hook.js,函数怎么调用。。。。
2019-11-9 02:13
0
游客
登录 | 注册 方可回帖
返回
//