RS4 某房产补环境

本文详细描述了对RS4项目中cookie生成机制的逆向工程,通过hook定位生成函数,分析了外部链接JS和自执行函数的作用,以及如何通过补环境(如proxy和修改原型)来模拟真实浏览器环境并获取所需数据。
摘要由CSDN通过智能技术生成

声明

此帖仅为记录我的逆向学习,过程文章中所有内容仅供学习交流使用,不用于其他任何目的,严禁用于非法用途,否则由此产生的一切后果均与作者无关!

RS4特征介绍

这里我们已经确定此网址为RS4 关于RS4的一些细节特征 可以移步其他帖子 我们这里只做简单介绍

我们可以看到 在cookie参数中 有T结尾和S结尾的两个参数 其中S结尾的参数为服务器返回 T参数为js生成 其中还有经典debugger

cookie定位

我们已经清楚 T结尾 4开头的cookie值为js生成 接下来就是找到cookie生成的入口函数 这里我们使用hook来进行定位

(function (){
    'use strict'
    var _cookie = ""
    Object.defineProperty(document, 'cookie',{
        set:function (val){
            console.log('cookie set->',new Date().getTime(),val);
            debugger;
            _cookie = val
            return val
        },
        get: function (){
            return _cookie
        }
    })
})()

 我们点击打开Script断点 此时运行我们的hook脚本 或者这边使用插件 都是可以的 运行成功放开断点 我们发现值已经被断住了

 我们往上跟栈发现 这个函数是没有传入参数的 但是却跟到这里了 不出意外cookie的生成地址就是这里了

 这里 (5)位置 为假cookie生成 (768,1)为真cookie生成 这里我们是补环境全扣拿最后的cookie就好 不用在意这个问题 我们可以看到这个文件为vm 继续跟栈找到call位置

这里我们来到这个文件 可以发现 整个文件有三部分 

分别是content标签 外链js  和一个自执行函数部分 在自执行函数部分 我们看到了call 其中 外链js中的代码将会被自执行函数还原并且执行为正常的vm文件 而content也会在生成cookie的时候用到 所以我们这边全扣 并且做一下小小更改 其中meta 标签的 content 内容是变化的 外链js在不同页面也会改变 自执行函数是动态变量名 整体逻辑是不变的

我们既然是补环境 本地准备一份 全扣下来 然后还要做一些更改 此时我们把代码放在浏览器运行 发现可以正常出值 

 

补环境

接下来就是补环境 我们挂上代理开冲

// proxy代理输出日志
function get_enviroment(proxy_array) {
    for(var i=0; i<proxy_array.length; i++){
        handler = '{\n' +
            '    get: function(target, property, receiver) {\n' +
            '        console.log("方法:", "get  ", "对象:", ' +
            '"' + proxy_array[i] + '" ,' +
            '"  属性:", property, ' +
            '"  属性类型:", ' + 'typeof property, ' +
            // '"  属性值:", ' + 'target[property], ' +
            '"  属性值类型:", typeof target[property]);\n' +
            '        return target[property];\n' +
            '    },\n' +
            '    set: function(target, property, value, receiver) {\n' +
            '        console.log("方法:", "set  ", "对象:", ' +
            '"' + proxy_array[i] + '" ,' +
            '"  属性:", property, ' +
            '"  属性类型:", ' + 'typeof property, ' +
            // '"  属性值:", ' + 'target[property], ' +
            '"  属性值类型:", typeof target[property]);\n' +
            '        return Reflect.set(...arguments);\n' +
            '    }\n' +
            '}'
        eval("tr"+"y"+"{\n" + proxy_array[i] + ';\n'
        + proxy_array[i] + '=new Proxy(' + proxy_array[i] + ', ' + handler + ')}catch (e) {\n' + proxy_array[i] + '={};\n'
        + proxy_array[i] + '=new Proxy(' + proxy_array[i] + ', ' + handler + ')}')
    }
}
proxy_array = ['window','document','navigator','location']


get_enviroment(proxy_array)

这里我们拿出几个举例 比如window.top 在真实的浏览器环境中,当一个页面不是嵌套在任何iframe或其他窗口中时,window.top 默认指向自身 所以我们这里直接补

window.top = window;

在我代码中  if (_$2P[_$BI][_$GJ[4]]('r') === 'm')这个地方补完一直报错这个方法未定义 然后我就直接补在原型了

// 此方法不在doument或者window下调用 直接在Object.prototype原型顶部伪造
// 其下所有原型都会存在这个方法
Object.prototype.getAttribute = function (val) {
    if (val === 'r') {
        return 'm'
    }
}

正常修修补补 不认识的方法去文档看 看完浏览器调试 最后终于也是出值了

  python部分就不继续了 拜拜

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值