0x00 前言
本期文章属于是临时起笔,因为前两天我在hook某些网站时发现log不出来内容,再加上console.log对我们逆向是十分重要的,所以就临时写下了这篇文章分享给大家。
不过其实我是很不喜欢在周末发布文章,但这篇文章却又不得不在这周发布,因为我之后还有更重要的要写,应该就会在不久的之后发布,这里就先向大家卖个关子。
0x01 正文
先给大家看一下我用我前两天开源的hook cookie的那个脚本hook本文这个案例的效果:
空空如也(我需要向读者明确一下,我已经确定该网站有设置cookie的操作,但可以看到在console里没有任何输出)。当时我立马就蹦出一个想法:会不会是网站把console.log重写了?遂尝试打印一个1验证一下我的想法:
和我想的一样,那么有没有办法禁止网站重写对象属性或方法呢?答案是有的,这也是我当时想出来的唯一解决方案。
所以此时此刻我要向读者介绍本文的主角Object.freeze
:
这个方法很强大,它可以使一个对象冻结,MDN里写的很清楚,大家可自行查阅,我这里就拿MDN里给的示例给大家演示一下其效果:
const obj = {
prop: 42,
};
Object.freeze(obj);
obj.prop = 33;
console.log(obj.prop);
代码中有一个obj对象,里面存了一个prop属性,随后在代码中使用了Object.freeze
冻结了obj对象,然后代码将prop属性值改为了33,最后输出还是42,也就是说只要将对象冻结了,那么其属性值就不会再通过这种赋值的方式更改了。我简单修改一下:
const obj = {
test : function () {
console.log(1);
}
};
Object.freeze(obj);
obj.test = function () {
console.log("重写成功");
}
obj.test();
我在obj对象里写了一个test方法,冻结对象后重写输出还是原来的效果,也就是说冻结对象后重写方法也是不能成功的,并且值得一提的是,这样重写并不会报错
(我只测试了冻结对象后重写它的属性和方法不会报错,其他情况并没有测试,读者如有兴趣可自行探索),所以说如果我们通过这种方式来禁止console对象的log方法被重写,这样就能很好地解决上述案例的问题,并且还不会报错,这是最关键的,如果重写会引发报错,那么我们需要考虑的就多了。
接下来我就快马加鞭写下了hook log的脚本,其实就一行:
Object.freeze(console);
为了方便读者使用我还是同步更新在了github上,地址:https://github.com/0xsdeo/Hook_JS
。接下来就看一下hook后的效果:
成功打印出设置的cookie值,并且没有报错。
参考资料:https://blog.fundebug.com/2018/06/27/wxjs-behavior-http-console/
原文始发于微信公众号(Spade sec):JS逆向系列13-反调试之console.log
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论