温锦文欧普厨电及净水器总代理 发表于 2024-5-19 15:32:05

js逆向) 某音cookie中的__ac_signature

原文链接:https://mp.weixin.qq.com/s/NJjU7dqA1g0-_xFmr1nrIg
前言

上一篇文章测试了多个补环境的框架(多个开源的js补环境框架测试),这篇来说一下具体怎么补。用__ac_signature做测试,这个相对简单一点。
逆向

先定位cookie生成的位置,清空cookie然后革新网页,可以看到有两次请求。第一次返回了一个__ac_nonce的cookie,未携带__ac_signature。第二次就已经带上了这个cookie,那肯定是之前请求里的js加上的。
https://img2024.cnblogs.com/other/1914604/202405/1914604-20240510102643254-900441995.png
看了下中间的几个请求都不是js,只有大概是在第一次请求返回的内容,不过谷歌浏览器看不到响应内容,只能用抓包工具或者火狐看。
https://img2024.cnblogs.com/other/1914604/202405/1914604-20240510102643691-799080347.png
html里面有两个script标签,第一个里面就是核心的js,第二个script里是调用和复制cookie。里面有用的就两行
window.byted_acrawler.init({
    aid: 99999999,
    dfp: 0
});
var __ac_signature = window.byted_acrawler.sign("", __ac_nonce);而第一段js代码里就是在定义window.byted_acrawler,不需要去分析里面做了,直接拿出来整个补环境。
补环境框架

node-sandbox

先测试下node-sandbox。这里再复述一下使用方法,先把源码下载到本地。解压node.zip到当前目次,在main.js里增加下面的代码:
function test_vm() {
    const sandbox = {
      wanfeng: wanfeng,
      globalMy: globalMy,
      console: console,
    }
    let workCode = fs.readFileSync("./work/ac_sign.js");
    a = +new Date;
    var callCode = `window.byted_acrawler.init({
      aid: 99999999,
      dfp: 0
    });
    var __ac_nonce = "06639eaa4009ab37b9a75";
    var __ac_signature = window.byted_acrawler.sign("",__ac_nonce);
    console.log("__ac_signature: ", __ac_signature)`;
    var code = "debugger;\r\n" + globalMy_js + init_env + envCode + "\r\n" + workCode + "\r\n" + endCode + callCode;
    vm.runInNewContext(code, sandbox);
    console.log("运行环境Js + 工作Js 耗时:", +new Date - a, "毫秒");
}
test_vm();然后把js放到./work/ac_sign.js里,在终端输入.\node main.js就会吐出全部的环境,结果也输出出来了
https://img2024.cnblogs.com/other/1914604/202405/1914604-20240510102644180-383409934.png
qxVm

qxVm用起来也是雷同,改一下js文件名和userAgent、href等,完整代码如下:
const fs = require('fs');
const QXVM_GENERATE = require('../qxVm_sanbox/qxVm.sanbox');

function ReadCode(name, dir) {
    let file_path = dir === undefined ? `${__dirname}/${name}` : `${__dirname}/${dir}/${name}`;
    return fs.readFileSync(file_path) + "\r\n"
}

const js_code = ReadCode(`./ac_sign.js`);

const user_config = {
    isTest: false,
    runConfig: { proxy: true, logOpen: true},
    window_attribute: {},
    env: {
      navigator: {
            userAgent: "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36"
      },
      location: {
            href: "打码处理"
      },
      document: {
            referrer: "打码处理",
            cookie: ''
      }
    }
}
// 帮助信息打印
// QXVM_GENERATE.help()

let result = QXVM_GENERATE.sanbox(js_code, "get_ac_sign", user_config, false);
let ac_sign = result.get_ac_sign("0663c24340045271d4894")
console.log("__ac_signature:", ac_sign)https://img2024.cnblogs.com/other/1914604/202405/1914604-20240510102644460-1713293349.png
验证有效性

能生成结果肯定是不够,还得能出数据才行。看了一下,发现cookie中的__ac_signature实在是可有可无的。如果你直接修改cookie来验证的话,也是能返回内容的。
__ac_signature的实际作用是为了得到ttwid,如果__ac_signature有效,第二次请求就会在响应头加一个set-cookie设置ttwid的值,这个值才是后面需要用到的cookie值。
以是在charles修改第二次请求的__ac_signature,看看服务器返回的有没有set-cookie。如果没有的话,说明触发风控了(验证码),大概是__ac_signature无效,也大概是请求太多次了。
失败的请求:
https://img2024.cnblogs.com/other/1914604/202405/1914604-20240510102644855-134249508.png
成功的环境:
https://img2024.cnblogs.com/other/1914604/202405/1914604-20240510102645311-812897058.png
测试了下上面两个框架生成的__ac_signature都可以得到ttwid,也就是说环境都是通过了网站的检测。
补环境

既然都把环境吐出来,我还想手动补一下环境,补完发现压根通不过验证,检测的东西太多了。即使环境都补对了而且能在vm2里运行,在node和chakracore里的结果也通不过检测。
还是直接站在巨人的肩膀上开个服务调用吧,这样可以不消折腾那么多事。
本文由博客一文多发平台 OpenWrite 发布!

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: js逆向) 某音cookie中的__ac_signature