当前位置: 首页 > 科技观察

拼多多店铺后台Anti-content参数逆向分析

时间:2023-03-22 16:59:30 科技观察

大家好,我是黑脸怪。今天就给大家分享一下品熙熙反。分析网址:'aHR0cHM6Ly9tbXMucGluZHVvZHVvLmNvbS9nb29kcy9nb29kc19saXN0'1.简介-为什么需要反向反内容参数?如果没有反参数使用代码访问后台数据,会提示“频繁访问”,所以需要反这个参数!2.启动反向js2.1查找参数位置-先在控制台全局搜索参数名称。10个结果不算多。依次点击它们,先在相同的关键字位置设置断点。因为Ajax的每个页面都需要anti参数,所以我们设置断点后,点击任意一个按钮就已经断了。这个以aa1d开头的js文件(你的可能不叫这个名字),其他的断点可以取消,现在重点分析这个。2.2顺栈-找到加密方法returnPromise.resolve(u(t.rawFetch,d).catch((function(){}直接把f8放过去再次点击即可到达上述断点f11单步调试会跟着这里getCrawlerInfo:function(t){returnPromise.resolve(G((function(){vare=I.a.getInstance(t);returnPromise.resolve(e.getServerTime()).then(F)}),(function(){return""})))}对于异步不太了解的朋友,我在这里强行演示一波(百度备忘单,改一下)//1.Promise.resolve("111")Promise.resolve("111")//Promise{:'111'}//[[Prototype]]:Promise//[[PromiseState]]:"fulfilled"这是完成状态//[[PromiseResult]]:"111"这是结果//2.Promise.resolve("").then(function())Promise.resolve("我是参数?").then(function(a){console.log("111",a);return"123"})//111我是参数吗?//Promise{:'123'}//[[Prototype]]:Promise//[[PromiseState]]:"已完成"//[[PromiseResult]]:"123",所以e是时间戳,f是main函数的断点,直接到f8再step两次到F,你要的就是里面的这个字符串代码:new一个对象,对象传入一个包含serverTime的对象,不太懂。最后,messagePack必须是方法。.不管他是不是直接复制过来,在控制台上跑一下就可以得到结果了。new(n("eDaA"))({serverTime:t}).messagePack()2.3代码分析n("eDaA")乍一看,这不就是一个webpack吗?当时以为还是以前的方式,找到n方法loader然后拷贝eDaA模块,就可以运行了。没想到跟进,发现eDaA里面多了一个loader和module。这是我第一次看到这样的事情。我没玩过。研究了半天,eDaA导出了fbeZ,fbeZ在里面导出了整个webpack。所以最后我们只需要fbeZ中的webpack就可以跳过第一个。Layer直接拿,因为不适合第二层的loader,需要找通用的loader,下面的loader可以输出"111"window=global;!(function(e){vari={},o={index:0}functionc(t){if(i[t])returni[t].exports;varn=i[t]={i:t,l:!1,exports:{}};//console.log(t)returne[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)复制过来后,删除前面列表中的[和}]之一,因为它会复制更多,因为使用notepad++代码格式有问题。有个模块会提示代码有问题。去网站把这串代码重新粘贴到vscode(pycharm)中就完成了。使用window.hliang1调用模块。接下来,开始复制qe对象。对象在模块里面,不知道怎么直接new,所以新建一个函数然后全部重写复制过来functionhliang_qe(){//copyhere}(function(e,t){}).call(this,a,b)这个是把a,b转成e,t,所以改写匿名删除,去掉.call,把e,t直接设置为参数给vare=window.hliang1(3)和others放置n(),这里更改了loader名称t原来的功能是导出(t.exports),所以这里不需要t。直接导出改为返回,如下图,复制到浏览器执行,结果成功,但是这段代码还是需要在node.js中补充和更改环境。3、环境检测可以在浏览器中运行,在node.js中无法运行,需要补充环境。这有什么问题,我不明白。让我们先来看看环境。算了懒得写了。只是告诉你要弥补什么。Cookies和localStorage.Item可以自己传入,过期的也可以,referrer:'',getElementById:functiongetElementById(a){console.log("getbyid",a)return""},cookie:''//这里传自己的cookie就可以了如果过期}varPlugins={0:{}}navigator={webdriver:false,plugins:Plugins,languages:["zh-CN","zh"],hasOwnProperty:functionhasOwnProperty(a){//console.日志(一个“hasOwnProperty”);if(a=="webdriver"){returnfalse}},userAgent:"Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/98.0.4758.81Safari/537.36"}屏幕={availWidth:1920,availHeight:1040}history={back:functionback(){console.log("back",arguments)}}location={href:"https://mms.pinduoduo.com/goods/goods_list",端口:""}chrome={}localStorage={getItem:functiongetItem(a){//console.log("item",arguments)if(a=="_nano_fp"){return""//这里也传一个自己的}}}window["chrome"]=chromewindow["location"]=locationwindow["navigator"]=navigatorwindow["history"]=historywindow["document"]=documentwindow["screen"]=screenwindow["localStorage"]=localStorageObject.defineProperty&&Object.defineProperty(window,"outerHeight",{value:1040,writable:false});Object.defineProperty&&Object.defineProperty(window,"outerWidth",{value:1920,writable:false});functionDeviceOrientationEvent(){console.log("DeviceOrientationEvent",arguments)}window["DeviceOrientationEvent"]=DeviceOrientationEventfunctionDeviceMotionEvent(){console.log("DeviceMotionEvent",arguments)}window["DeviceMotionEvent"]=DeviceMotionEvent//删除window.Buffer//e("0x3c","anZ%")document.getElementById.toString=function(){return'functiongetElementById(){[nativecode]}'}可以了环境+以上代码即可运行{"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小伙伴们快来试试吧!