拼刀刀店铺后台的参数anti-content逆向分析

点击上方“Python共享之家”,进行关注

回复“资源”即可获赠Python学习资料

天阶夜色凉如水,卧看牵牛织女星。

大家好,我是黑脸怪。今天给大家分享pin嘻嘻逆向。

分析网址:'aHR0cHM6Ly9tbXMucGluZHVvZHVvLmNvbS9nb29kcy9nb29kc19saXN0'

1.介绍-为什么要逆向anti-content参数

用代码访问后台数据不带anti参数的话会提示“访问频繁”,所以需要逆向出这个参数!

b582acdc408cce8f6e04cbb83858faeb.png

2.开始逆向js

2.1 找参数所在位置-先在控制台全局搜索参数名字

3497a79533a19e1dc0d762e9c628fd67.png

搜索出来10个结果 不算多,每个都点进去 在差不多的关键词位置打上断点先。

8bbdbbe2b96d6d096afd1343999922d5.png

因为它Ajax请求每个页面都要anti参数 所以我们下断点之后随便点个按钮都能用 已经断下来了,这个aa1d开头的js文件(你们的不一定叫这名),可以把其他断点取消了,现在来着重分析这个。

083b11904fa4b14f79cb86e19547eab6.png

2.2 跟栈-找加密的方法

826faf350c79cb3ed688b5567eb49c74.png

这里是一个异步代码调用,我们把断点打到它上一层这里先。

return Promise.resolve(u(t.rawFetch, d).catch((function() {}

直接f8放过去 再重新点一次 会到达上面那个断点

f11单步调试进来 会跟到这里

getCrawlerInfo: function(t) {
                return Promise.resolve(G((function() {
                    var e = I.a.getInstance(t);
                    return Promise.resolve(e.getServerTime()).then(F)
                }
                ), (function() {
                    return ""
                }
                )))
            }

对于异步不太懂的 我这里强行演示一波 (百度小抄一下改改)d70246d3cbff1f6f2a4ae7b3b3d31cb3.png

//1. Promise.resolve("111")

 Promise.resolve("111")
//Promise {<fulfilled>: '111'}
//    [[Prototype]]: Promise
//    [[PromiseState]]: "fulfilled"  这是完成的状态 
//    [[PromiseResult]]: "111"       这是结果


//2.Promise.resolve("").then(函数())


Promise.resolve("我是参数?").then(function(a){console.log("111",a);return "123"})
//111 我是参数?
//Promise {<fulfilled>: '123'}
//    [[Prototype]]: Promise
//    [[PromiseState]]: "fulfilled"
//    [[PromiseResult]]: "123"

所以e是时间戳,f是主要函数 下断点到这 f8直接过来 再单步两次到F

1d82fc312b3d786798dd5ed2590de8ef.png

要的是里面的这串代码 :new一个对象 对象传入一个包含serverTime的对象这里我也不太理解 最后messagePack肯定就是方法了。。。不管他直接复制在控制台跑一下出结果了。

new (n("eDaA"))({
    serverTime: t
}).messagePack()

7189ef89fdedab28ba3c141a4beb530a.png

2.3 代码分析

n("eDaA") 我第一眼看这不就是个webpack吗 当时觉得还是以前的玩法 找到n方法的加载器 再复制eDaA这个模块就可以跑了。没想到跟进去发现 eDaA里面又是一个加载器和模块 第一次见到这样的 没玩过,研究了半天

eDaA导出fbeZ    fbeZ又导出里面的整个webpack

所以最后我们只要fbeZ里面的webpack  跳过第一层直接取它, 因为它是第二层的 加载器不适用,需要找个通用的加载器

722b90eed504941145194fde38efe63e.png

下面的加载器可以输出"111"就行

window=global;
!(function (e) {
    var i = {}
        , o = {
        index: 0
    }

    function c(t) {
        if (i[t])
            return i[t].exports;
        var n = i[t] = {
            i: t,
            l: !1,
            exports: {}
        };
        // console.log(t)
        return e[t].call(n.exports, n, n.exports, c),
            n.l = !0,
            n.exports
    }

    window.hliang1 = c
}
)([
    function(e,t,n){
        console.log("111")
    }
])
window.hliang1(0)

94f7ca181a0cfa1c57a1952982f3e1db.png

复制过来后 把前面列表的[和屁股后面的}]删除掉一个 因为会复制多

因为用notepad++代码格式化的问题,有一个模块会提示代码有问题

去网站重新粘贴一下这串代码到vscode(pycharm)

73382f0086b94a30fabb375e8e4b12d4.png

这样就完成了,用window.hliang1 就可以调用模块了

下面开始复制qe对象

它new 的qe对象就在模块里面啊,我不知道怎么直接new 所以新建了一个函数 然后对它改写

7221e753cb485cd682c593adeca12c44.png

全部复制下来

function  hliang_qe(){

    //复制进这里来

}

(function (e, t) {}).call(this,a,b) 这种就是 把a,b传参到e,t

所以改写 匿名删除去掉,.call去掉,传参的e,t直接设置成

var e=window.hliang1(3) 还有其他地方n() 这里加载器名字改一下

t原本的作用是导出(t.exports)那我这里不要t了 直接导出改成return

如下图

c005e49002ac6d10e12be83194771a57.png

8a5daa2d539c81fbfe70d269f7488759.png

复制到浏览器执行,成功出结果。但是这个代码在node.js还需要补环境和改环境。

dd010bd302540f409a30aa1acda6ee58.png

3.环境检测

在浏览器能跑 在node.js跑不了  需要补环境。

这都啥报错啊,看不懂。 先上环境吧。

ff6d8134da6dfe64ce4d53d4ad4e4163.png


算了懒得写了。

直接告诉你们要补啥吧。

cookie和localStorage.Item传入自己的就行了 过期的也没事

window = global
document={
    addEventListener:function addEventListener(a,b){
        // console.log("addevent",a,b)
        return undefined
    },
    referrer:'',
    getElementById:function getElementById(a){
      console.log("getbyid",a)
      return "<head></head>"
    },
    cookie:''//这里传一个自己的cookie 过期了的也没事
}
var Plugins={0:{}}
navigator={
    webdriver:false,
    plugins: Plugins,
    languages:["zh-CN","zh"],
    hasOwnProperty:function hasOwnProperty(a){
      // console.log(a,"hasOwnProperty");
      if (a=="webdriver"){
        return false
      }

    },
    userAgent:"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.81 Safari/537.36"
}

screen={availWidth:1920,availHeight:1040}
history={
  back:function back(){console.log("back",arguments)}
}
location={
  href:"https://mms.pinduoduo.com/goods/goods_list",
  port:""
}
chrome={}

localStorage={
  getItem:function getItem(a){
      
    // console.log("item",arguments)
    if (a=="_nano_fp"){
      return "" //这里也传一个自己的
    }
  }
}

window["chrome"]=chrome
window["location"]=location
window["navigator"]=navigator
window["history"]=history
window["document"]=document
window["screen"]=screen
window["localStorage"]=localStorage


Object.defineProperty && Object.defineProperty(window, "outerHeight", {
    value: 1040,
    writable: false
});
Object.defineProperty && Object.defineProperty(window, "outerWidth", {
    value: 1920,
    writable: false
});

function DeviceOrientationEvent(){
   console.log("DeviceOrientationEvent",arguments)
}
window["DeviceOrientationEvent"]=DeviceOrientationEvent
function DeviceMotionEvent(){
  console.log("DeviceMotionEvent",arguments)
 }
 window["DeviceMotionEvent"]=DeviceMotionEvent
//delete window.Buffer //e("0x3c", "anZ%")
document.getElementById.toString=function(){
    return 'function getElementById() { [native code] }'
}

可以了。环境+上面的代码就能跑了

{"success":true,"errorCode":1000000,"errorMsg":null,"result":{"sessionId":"e70ae011c9c64f8fbf0e70fada362385","total":0,"goods_list":[]}}

演示地址:

http://z.hl98.cn/index.php?share/file&user=102&sid=CiAXx7ry

小伙伴们,快快用实践一下吧!如果在学习过程中,有遇到任何问题,欢迎加我好友,我拉你进Python学习交流群共同探讨学习。

9eb797bc6cfe4419d97dde8b140a5784.png

------------------- End -------------------

往期精彩文章推荐:

c43aba857141cda4bd4856b4aa6a01bb.png

欢迎大家点赞,留言,转发,转载,感谢大家的相伴与支持

想加入Python学习群请在后台回复【

万水千山总是情,点个【在看】行不行

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
爬虫(Web Crawler)是一种自动化程序,用于从互联网上收集信息。其主要功能是访问网页、提取数据并存储,以便后续分析或展示。爬虫通常由搜索引擎、数据挖掘工具、监测系统等应用于网络数据抓取的场景。 爬虫的工作流程包括以下几个关键步骤: URL收集: 爬虫从一个或多个初始URL开始,递归或迭代地发现新的URL,构建一个URL队列。这些URL可以通过链接分析、站点地图、搜索引擎等方式获取。 请求网页: 爬虫使用HTTP或其他协议向目标URL发起请求,获取网页的HTML内容。这通常通过HTTP请求库实现,如Python中的Requests库。 解析内容: 爬虫对获取的HTML进行解析,提取有用的信息。常用的解析工具有正则表达式、XPath、Beautiful Soup等。这些工具帮助爬虫定位和提取目标数据,如文本、图片、链接等。 数据存储: 爬虫将提取的数据存储到数据库、文件或其他存储介质中,以备后续分析或展示。常用的存储形式包括关系型数据库、NoSQL数据库、JSON文件等。 遵守规则: 为避免对网站造成过大负担或触发反爬虫机制,爬虫需要遵守网站的robots.txt协议,限制访问频率和深度,并模拟人类访问行为,如设置User-Agent。 反爬虫应对: 由于爬虫的存在,一些网站采取了反爬虫措施,如验证码、IP封锁等。爬虫工程师需要设计相应的策略来应对这些挑战。 爬虫在各个领域都有广泛的应用,包括搜索引擎索引、数据挖掘、价格监测、新闻聚合等。然而,使用爬虫需要遵守法律和伦理规范,尊重网站的使用政策,并确保对被访问网站的服务器负责。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值