专栏首页日常学pythonJs逆向必备技能之-动态hook找入口

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

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

先介绍一下 Object.defineProperty

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

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

首先我们写个基本的hook:

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。

Object.defineProperty(window, '_tt_log_val', {
        get: function() {
            debugger;
            return "";
        },
        set: function(value) {
            debugger;
            return value;
        },
    });

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

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

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

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

本文分享自微信公众号 - 日常学python(daily_learn),作者:海绵

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-01-21

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 教你用Python爬去QQ音乐评论

    去年夏天,好像于我而言,重要的事就是毕业来临,从此踏上了搬砖之路,从学校到职场,之间身份的转变,让我又多了一份责任。当然还有一段感情经历,现在回头去看,只能说且...

    sergiojune
  • Python 如何爬取实时变化的 WebSocket 数据

    作为一名爬虫工程师,在工作中常常会遇到爬取实时数据的需求,比如体育赛事实时数据、股市实时数据或币圈实时变化的数据。如下图:

    sergiojune
  • 某弹幕网分析-1

    我们看这个函数 onProto,一般有经验的可以看出来是一种tlv结构,去掉on剩下Proto谷歌开源了一个pb全称Google Protocol Buffer...

    sergiojune
  • Python教学——第六天

    今天我们要说说dict,在第四天里我们说到了tuple,list也知道了list比tuple好用多了,至少能添加删除还能修改里面的值 在Python里,我们知道...

    企鹅号小编
  • 那些年我们一起学XSS - 7. 宽字节、反斜线与换行符一起复仇记

    2. 一共有3处输出,位于HTML属性里的那一处,我们放弃了,因为双引号被灭掉了。那么还剩下2处。都是位于<script>..</script>里,而且挨在了...

    漏洞知识库
  • Linux学习_003_虚拟机CentOS 7.5 如何固定IP地址

      我们在使用虚拟机的时候,虚拟机的IP往往会变化,前期配置的SecureCRT连接、FTP连接需要重新修改,给我们的使用造成很大的不便。本文介绍了如何固定虚拟...

    黑泽君
  • 从 0 到 1:中小金融企业如何开心玩 DevOps

    在开始之前,我们先把分享的题目稍微修改一下(原标题为“开心玩转DevOps”),把“玩转”去掉,改成“开心玩 DevOps”——因为 DevOps 涉及的内容特...

    DevOps时代
  • 利用Excel的名称定义来使得计算公式更有逻辑化,自动化

    我们可以观察到当我们点击总海运费,也就是F8单元格的时候,在公示栏里显示的不是我们平时所看到的引用单元格的计算,而是是目的港费用+本地费,这个代表的可能就是使用...

    逍遥之
  • 十年java架构师分享:我是这样手写Spring的

    人见人爱的 Spring 已然不仅仅只是一个框架了。如今,Spring 已然成为了一个生态。但深入了解 Spring 的却寥寥无几。这里,我带大家一起来看看,我...

    美的让人心动
  • 爬虫遇到了点问题

    golang爬珍爱网代码优化后,运行报了如下的错,找了半小时才找到原因,在此记录一下。

    我的小碗汤

扫码关注云+社区

领取腾讯云代金券