ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

[007]爬虫系列 | 某条加密参数_signature(短)逆向解析

2021-07-02 13:31:10  阅读:1435  来源: 互联网

标签:undefined void window 某条 007 typeof signature var acrawler


一、背景

最近脑子瓦特了,无法专心学习,只能写写逆向了。记得前端时间也有人问过我关于某条_signature参数问题,现在就写篇文章叭。

该文章主要提供交流学习使用,请勿利用其进行不当行为!

如本篇文章侵犯了贵公司的隐私,请联系我马上删除!

如因滥用解密技术而产生的风险与本人无关! 

 备注:本文仅仅分析短_signature参数,长_signature参数下次再解析。

二、正文

1、找到_signature位置

打断点分析:

调试器调试

很明显_signature参数通过j函数生成,进去看下j函数详情并断点调试:

分析后发现,真正生成_signature参数的函数:

n = window.byted_acrawler
a = n.sign
a.call(n, o)

o的值为:

{url:'xxxxxxxxxxxx'}

 byted_acrawler是什么?全局搜索一下:

上面我们发现两个东西:

1、

<script src="//sf1-cdn-tos.toutiaostatic.com/obj/rc-web-sdk/acrawler.js" crossorigin="anonymous"></script>

2、

<script>
            window.byted_acrawler && window.byted_acrawler.init({
                aid: 24,
                dfp: !0
            })
        </script>

那么我们先模拟一下浏览器生成_signature参数

2、模拟生成_signature参数

<script src="//sf1-cdn-tos.toutiaostatic.com/obj/rc-web-sdk/acrawler.js" crossorigin="anonymous"></script>
<script>
    window.byted_acrawler && window.byted_acrawler.init({
        aid: 24,
        dfp: !0
    })
    var i = {url:''}
    var a = window.byted_acrawler;
    var r = a.sign;
    var c = r.call(a,i);
    document.write(c);
</script>

可以正常生成!!!

3、逻辑&扣代码

3.1扣代码

将整一个acrawler.js直接扣下来,通过node运行:

 

报错!补代码

3.2补代码 

既然浏览器可以正常运行,但是通过node无法运行,那么肯定就是环境问题,既然涉及浏览器环境,那么就肯定和window属性有关!补window属性!

var window = global;

不存在referrer属性?百度一下referrer属性在哪!?

 

在 window.document里面。那么我们直接去浏览器调试调试,看看里面的referrer里面到底是什么!

 补上之后,再运行,发现并没有报错了!补完之后如下:

3.3补上逻辑,生成_signature参数

var i = {url:'xxxxxx'}
var a = window.byted_acrawler;
var r = a.sign;
var c = r.call(a,i);
console.log(c)

补完之后发现并不存在a.sign函数:

 我们打印一下window看看,并不存在byted_acrawler:

依然还是原本的解析:既然浏览器可以生成,node不可以,那么就是环境的问题。似乎好像都没啥问题了,后来发现了一个传入参数e里面存在三目运算符,很有可能就是这里存在问题:

[, , "undefined" != typeof exports ? exports : void 0, "undefined" != typeof module ? module : void 0, "undefined" != typeof define ? define : void 0, "undefined" != typeof Object ? Object : void 0, void 0, "undefined" != typeof TypeError ? TypeError : void 0, "undefined" != typeof document ? document : void 0, "undefined" != typeof InstallTrigger ? InstallTrigger : void 0, "undefined" != typeof safari ? safari : void 0, "undefined" != typeof Date ? Date : void 0, "undefined" != typeof Math ? Math : void 0, "undefined" != typeof navigator ? navigator : void 0, "undefined" != typeof location ? location : void 0, "undefined" != typeof history ? history : void 0, "undefined" != typeof Image ? Image : void 0, "undefined" != typeof console ? console : void 0, "undefined" != typeof PluginArray ? PluginArray : void 0, "undefined" != typeof indexedDB ? indexedDB : void 0, "undefined" != typeof DOMException ? DOMException : void 0, "undefined" != typeof parseInt ? parseInt : void 0, "undefined" != typeof String ? String : void 0, "undefined" != typeof Array ? Array : void 0, "undefined" != typeof Error ? Error : void 0, "undefined" != typeof JSON ? JSON : void 0, "undefined" != typeof Promise ? Promise : void 0, "undefined" != typeof WebSocket ? WebSocket : void 0, "undefined" != typeof eval ? eval : void 0, "undefined" != typeof setTimeout ? setTimeout : void 0, "undefined" != typeof encodeURIComponent ? encodeURIComponent : void 0, "undefined" != typeof encodeURI ? encodeURI : void 0, "undefined" != typeof Request ? Request : void 0, "undefined" != typeof Headers ? Headers : void 0, "undefined" != typeof decodeURIComponent ? decodeURIComponent : void 0, "undefined" != typeof RegExp ? RegExp : void 0]

直接浏览器和node分别调试一下里面的值:

很明显就是这里的问题了!将其改为:

[, , void 0, void 0, "undefined" != typeof define ? define : void 0, "undefined" != typeof Object ? Object : void 0, void 0, "undefined" != typeof TypeError ? TypeError : void 0, "undefined" != typeof document ? document : void 0, "undefined" != typeof InstallTrigger ? InstallTrigger : void 0, "undefined" != typeof safari ? safari : void 0, "undefined" != typeof Date ? Date : void 0, "undefined" != typeof Math ? Math : void 0, "undefined" != typeof navigator ? navigator : void 0, "undefined" != typeof location ? location : void 0, "undefined" != typeof history ? history : void 0, "undefined" != typeof Image ? Image : void 0, "undefined" != typeof console ? console : void 0, "undefined" != typeof PluginArray ? PluginArray : void 0, "undefined" != typeof indexedDB ? indexedDB : void 0, "undefined" != typeof DOMException ? DOMException : void 0, "undefined" != typeof parseInt ? parseInt : void 0, "undefined" != typeof String ? String : void 0, "undefined" != typeof Array ? Array : void 0, "undefined" != typeof Error ? Error : void 0, "undefined" != typeof JSON ? JSON : void 0, "undefined" != typeof Promise ? Promise : void 0, "undefined" != typeof WebSocket ? WebSocket : void 0, "undefined" != typeof eval ? eval : void 0, "undefined" != typeof setTimeout ? setTimeout : void 0, "undefined" != typeof encodeURIComponent ? encodeURIComponent : void 0, "undefined" != typeof encodeURI ? encodeURI : void 0, "undefined" != typeof Request ? Request : void 0, "undefined" != typeof Headers ? Headers : void 0, "undefined" != typeof decodeURIComponent ? decodeURIComponent : void 0, "undefined" != typeof RegExp ? RegExp : void 0]

 即:

"undefined" != typeof exports ? exports : void 0, "undefined" != typeof module ? module : void 0

改为

void 0, void0

改完之后依然还是存在报错:

 

 还是和上面一样的解析:既然浏览器可以生成,node不可以,那么就是环境的问题。补window属性值!

 

window.location = {
    hash: "",
    host: "www.toutiao.com",
    hostname: "www.toutiao.com",
    href: "https://www.toutiao.com/",
    origin: "https://www.toutiao.com",
    pathname: "/",
    port: "",
    protocol: "https:"
}

补完之后依然报错:

继续补:

window.navigator = {
    userAgent: "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"
}

 终于终于!!!最后可以生成了!

 三、代码

var window = global;
window.document = {
    referrer:"https://so.toutiao.com/"
}
window.location = {
    hash: "",
    host: "www.toutiao.com",
    hostname: "www.toutiao.com",
    href: "https://www.toutiao.com/",
    origin: "https://www.toutiao.com",
    pathname: "/",
    port: "",
    protocol: "https:"
}
window.navigator = {
    userAgent: "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"
}

// 此部分和acrawler.js一样 =========
var glb;
(glb = "undefined" == typeof window ? global : window)._$jsvmprt = function(b, e, f) {
        //...................省略
,
(glb = "undefined" == typeof window ? global : window)._$jsvmprt("484e4f4a403f5243000d2d1aea78184c36c3d671000000000000ab440200 
     //...........................省略
, "undefined" != typeof RegExp ? RegExp : void 0]);
// =============

var i = {url:'xxxxxx'}
var a = window.byted_acrawler;
var r = a.sign;
var c = r.call(a,i);
console.log(c)

四、说明

        上面的结果很明显和浏览器显示的_signature参数短很多,如果有详细看上文的话,会发现为什么那个init函数没了?

 原因:加了那个init函数之后会报错!

 至于怎么解决此报错呢?!又改如何生成长_signature参数呢?!

不好意思!要去吃饭了!下篇文章再说叭!

标签:undefined,void,window,某条,007,typeof,signature,var,acrawler
来源: https://blog.csdn.net/weixin_41593408/article/details/118410703

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有