前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Js逆向必备技能之-动态hook找入口

Js逆向必备技能之-动态hook找入口

作者头像
sergiojune
发布2020-02-25 10:28:36
4.2K0
发布2020-02-25 10:28:36
举报
文章被收录于专栏:日常学python日常学python

今天我们来讲一下 hook找入口方法,动态调试动态hook。

代码语言:javascript
复制
先介绍一下 Object.defineProperty

Object.defineProperty(obj, prop, descriptor)
obj:必需。目标对象 
prop:必需。需定义或修改的属性的名字
descriptor:必需。目标属性所拥有的特性 

此方法可以重写js对象方法属性。

首先我们写个基本的hook:

代码语言:javascript
复制
Object.defineProperty(document, 'cookie', {
        get: function() {
            debugger;
            return "";
        },
        set: function(value) {
            debugger;
            return value;
        },
});

这样的话我们就可以hook cookie的读写,只要接下来的代码读写cookie就会断点断下来。让他的混淆代码无所遁形 ,我们来演示一下

我们在控制台执行hook代码之后,他读取cookie被hook劫持到我们的函数里面了,这样我们就能从右边的调用堆栈去看看他操作cookie的地方。轻松分析

这里我们拿某个网站举例测试,因为他很多反爬混淆比较典型

随便划一下,他有个提交 我们看一下提交的内容

他这个post没有任何字段只有一串加密后的字符串,这样我们就不能搜关键字了,这里谷歌浏览器给我们提供了一个功能,查看调用堆栈

这里我们可以看到从点击到提交所有调用过程,我们点第一跳到他的代码段再点左下角格式化

一般人看到一脸懵逼,我们先下断点,再滑动一下手工去解一下看看

我们可以看到f是XMLHttpReque对象,f[_0xd5fe("0x548", "iunZ")]是send发送数据,具体逻辑就是post发送window._tt_log_val 字段到服务器

很明显这个字段就是加密后的字符串,我老方法搜一下这个._tt_log_val ,这里我用的是qq浏览器

没有任何的地方,是不是感觉无从下手,他这里我们暂时猜测是动态生成的字段名称动态设置的,我们可以利用hook来找入口,既然他可以写这个字段 我们可以hook这个字段,只要他提交这个肯定要生成赋值,我们在他赋值之前hook。

代码语言:javascript
复制
Object.defineProperty(window, '_tt_log_val', {
        get: function() {
            debugger;
            return "";
        },
        set: function(value) {
            debugger;
            return value;
        },
    });

然后我们滑动的时候他提示这个 属性重定义,不管怎么触发的 他肯定在操作这个字段,我们看他的位置

我们下个断点看看他怎么操作的

可以看到他用了一点小聪明,Object.defineProperty他利用这个对象进行的赋值操作,我们找一下具体哪里。

字符串拼接,中间是取加密后的算法,剩下的就是看他这个方法怎么计算的,无论是抠算法还是其他方式,我们就很轻松分析他。至于扣代码我们程序调用,由于篇幅关系,后面单独讲怎么扣代码为我们所用。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-01-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 日常学python 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档