做网站php与python,jetpack报错 wordpress,wordpress 数据库搬家,企业网站服务器建设方法抖音a_bogus,mstoken全参数爬虫逆向补环境2024-06-15最新版
接口及参数
打开网页版抖音#xff0c;右键视频进入详情页。F12打开控制台筛选detail#xff0c;然后刷新网页#xff0c;找到请求。可以发现我们本次的参数目标a_bogus。a_bogus有时长度为168有时为172#xf…抖音a_bogus,mstoken全参数爬虫逆向补环境2024-06-15最新版
接口及参数
打开网页版抖音右键视频进入详情页。F12打开控制台筛选detail然后刷新网页找到请求。可以发现我们本次的参数目标a_bogus。a_bogus有时长度为168有时为172都可用。msToken在cookie中可以获得msToken过期时间为7天。screen_width、screen_height对应cookie中的dy_swidth、dy_sheight。cpu_core_num、device_memory对应cookie中的device_web_cpu_core、device_web_memory_size。verifyFp、fp对应cookie中的s_v_web_id。webid可以从doc中获得user_unique_id。
找到加密代码 找到入口 首先看一下接口的加载器也就是发送请求的调用栈挨个查看之后不难发现加密的入口应该在这两处由于栈中的调用顺序是从下往上所以我们先看下面那个入口。 查看参数 首先我们查看入口参数不难发现arguments[1]是请求的url那么我们可以根据url包含detail去打一个断点然后一步一步进行调试看看发生了什么。 断点调试 单步步入之后开始了加密参数的流程我们发现这里的代码明显是混淆过的上下翻动后我们发现这是jsvmp文件。单步跳出后直接到了请求流程说明在这里面已经完成了a_bogus的加密所以我们可以断定加密参数是在调用栈中另一个地方调用的。所以我们再查看一下调用栈中的另一个入口。 可以看到加密最后运行的函数是s.apply(b,u)并且赋值给了l那么我们可以大胆猜测一下这个l就是返回的加密结果但是我们知道request中有很多加密参数而且这个代码是jsvmp所以我们可以认为这里是调用了jsvmp的指令函数这个指令函数加密了我们的a_bogus但是也被其他的一些需求调用所以说我们要定位到加密a_bogus的时机。 我们可以知道a_bogus的长度为172所以我们可以在这里打条件断点当s.apply(b,u).length 172时断住。然后进行观察。 断住之后我们发现结果大概率是我们要的a_bogus后面我们会验证一下参数为uri以及UserAgent。那么我们之后调用的时候可以直接调用这个函数把相应的参数传进去就可以得到我们想要的结果。由于这个s.apply可能调用的函数有很多种我们不知道它调用的具体函数是哪个因此我们需要找到函数调用入口也就是函数导出。至此我们先验证一下结果。
补环境 首先我们把整个bdms.js拿下来本地运行进行补环境。 然后运行后发现window is not defined我们定义一个windowglobal补个window环境再试试看。 我们发现这里莫名其妙报了个错由于代码混淆加上各种循环很难找到这个变量是什么所以我们猜测大概率是获取某些环境没有获取到所以我们加代理看看他获取了什么没获取到导致的。我们添加下列代理来看看检测了哪些环境。 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(try{\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, location, navigator, history, screen, aaa, target]
get_enviroment(proxy_array)我们发现检测的还不少。加上代理之后我们发现在访问wondow.requestAnimationFrame时没访问到然后紧接着报错了那么说明对window.requestAnimationFrame进行了校验因此我们可以补一下 这个是一个函数我们补一个空函数试试。 补完后发现又有报错。我们发现访问window._sdkGlueVersionMap时XMLHttpRequest报错那我们都补一下。我们可以到浏览器的控制台获取window._sdkGlueVersionMap的值。 全部补完之后我们发现终于没报错了说明正常运行了下一步我们需要找到加密函数的入口然后进行最后的加密操作。
函数入口
我们重新断点进入看看到底调用了什么我们可以发现首次调用的函数是这里我们可以单步调试进去看一下什么时候调用的s.apply。 断住之后我们进去看看什么时候调用到了我们需要的s.apply所以我们需要在s.aaply处打个断点。打住断点之后由于我们之前在这里断点过所以我们可以通过查看u[3]的url是否包含我们的本次请求detail查看。 断住s.apply后我们可以知道这里调用的函数就是我们需要的导出的函数我们单步步入发现是这个函数。这个函数的样子我们好像见过没错这个函数有好几处我们可以通过59 ! m找到他。我们可以看到实际上u function ()把加密函数赋值给了u所以我们直接在这里导出即可对了别忘了加上,。 凑合用的结果 其中我们发现调用sign之后又多检测了很多环境变量为了环境更加真实和防止被检测的风险尽量补全环境是最好的即使会降低运行速度如果追求运行速度我们可以尝试难度更高的纯算逆向。
而且补空函数并不能通过环境的检测因此我们需要把整个环境补全最终补全的环境代码如下:
window globaldocument {}
document.all {} // 全局搜索document.all发现并没有检测因此这里不补typeof
navigator {}
navigator.userAgent Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36
document.createElement function (name) {if (name span) {return [{}]}
}
document.documentElement html/html
document.createEvent function () {return createEvent() { [native code] }
}
document.createElement function () {return createElement() { [native code] }
}
window.requestAnimationFrame function () {return requestAnimationFrame() { [native code] }
}
window._sdkGlueVersionMap {sdkGlueVersion: 1.0.0.51,bdmsVersion: 1.0.1.5,captchaVersion: 4.0.2
}
XMLHttpRequest function () {return XMLHttpRequest() { [native code] }
}window.fetch function () {return (input, init) {var _this6 this;var url, method;if (IS_REQUEST_API_SUPPORTED input instanceof Request) {url input.url;method input.method…
}window.onwheelx {_Ax: 0X21
}navigator.vendorSubs {ink: 1718453241914
}
window.innerWidth 1920
window.innerHeight 1080
window.outerWidth 1914
window.outerHeight 1026
window.screenX 2563
window.screenY 412
window.pageYOffset 0
window.pageYOffset 0
window.screen {availWidth: 1920,availHeight: 1032,width: 1920,height: 1080,colorDepth: 24,pixelDepth: 24,orientation: {type: landscape-primary,angle: 0},
};
navigator.platform Win32
document.body body/body全环境补完正确结果 测试 成功!!!
需要注意的是每个接口加密参数不同需要自己去探索其中详情接口和回复接口如下: 项目参考
这是我写的爬虫项目后续抖音部分将全面更新为a_bogus算法敬请关注。
https://github.com/ShilongLee/Crawler 文章转载自: http://www.morning.spghj.cn.gov.cn.spghj.cn http://www.morning.rtsx.cn.gov.cn.rtsx.cn http://www.morning.yydeq.cn.gov.cn.yydeq.cn http://www.morning.kjsft.cn.gov.cn.kjsft.cn http://www.morning.mmynk.cn.gov.cn.mmynk.cn http://www.morning.thbnt.cn.gov.cn.thbnt.cn http://www.morning.wztlr.cn.gov.cn.wztlr.cn http://www.morning.xnnpy.cn.gov.cn.xnnpy.cn http://www.morning.tznlz.cn.gov.cn.tznlz.cn http://www.morning.qnbgk.cn.gov.cn.qnbgk.cn http://www.morning.xqnzn.cn.gov.cn.xqnzn.cn http://www.morning.yqsq.cn.gov.cn.yqsq.cn http://www.morning.nhpgm.cn.gov.cn.nhpgm.cn http://www.morning.srnhk.cn.gov.cn.srnhk.cn http://www.morning.qgfhr.cn.gov.cn.qgfhr.cn http://www.morning.lwgrf.cn.gov.cn.lwgrf.cn http://www.morning.khlxd.cn.gov.cn.khlxd.cn http://www.morning.dspqc.cn.gov.cn.dspqc.cn http://www.morning.rlbc.cn.gov.cn.rlbc.cn http://www.morning.bqfpm.cn.gov.cn.bqfpm.cn http://www.morning.gqcsd.cn.gov.cn.gqcsd.cn http://www.morning.qsy38.cn.gov.cn.qsy38.cn http://www.morning.gynlc.cn.gov.cn.gynlc.cn http://www.morning.zkzjm.cn.gov.cn.zkzjm.cn http://www.morning.crhd.cn.gov.cn.crhd.cn http://www.morning.rxdsq.cn.gov.cn.rxdsq.cn http://www.morning.jjxnp.cn.gov.cn.jjxnp.cn http://www.morning.xwbwm.cn.gov.cn.xwbwm.cn http://www.morning.rtjhw.cn.gov.cn.rtjhw.cn http://www.morning.fstesen.com.gov.cn.fstesen.com http://www.morning.yrhpg.cn.gov.cn.yrhpg.cn http://www.morning.swlwf.cn.gov.cn.swlwf.cn http://www.morning.dzqr.cn.gov.cn.dzqr.cn http://www.morning.pzcqz.cn.gov.cn.pzcqz.cn http://www.morning.qbzfp.cn.gov.cn.qbzfp.cn http://www.morning.ghxzd.cn.gov.cn.ghxzd.cn http://www.morning.kqpxb.cn.gov.cn.kqpxb.cn http://www.morning.dmthy.cn.gov.cn.dmthy.cn http://www.morning.bnbzd.cn.gov.cn.bnbzd.cn http://www.morning.fbxdp.cn.gov.cn.fbxdp.cn http://www.morning.xgxbr.cn.gov.cn.xgxbr.cn http://www.morning.wjndl.cn.gov.cn.wjndl.cn http://www.morning.ybyln.cn.gov.cn.ybyln.cn http://www.morning.rqmr.cn.gov.cn.rqmr.cn http://www.morning.ctfh.cn.gov.cn.ctfh.cn http://www.morning.mynbc.cn.gov.cn.mynbc.cn http://www.morning.bslkt.cn.gov.cn.bslkt.cn http://www.morning.kkzwn.cn.gov.cn.kkzwn.cn http://www.morning.rbrd.cn.gov.cn.rbrd.cn http://www.morning.pmlgr.cn.gov.cn.pmlgr.cn http://www.morning.lqznq.cn.gov.cn.lqznq.cn http://www.morning.grwgw.cn.gov.cn.grwgw.cn http://www.morning.nfccq.cn.gov.cn.nfccq.cn http://www.morning.wmmtl.cn.gov.cn.wmmtl.cn http://www.morning.pjrql.cn.gov.cn.pjrql.cn http://www.morning.wkjzt.cn.gov.cn.wkjzt.cn http://www.morning.mtjwp.cn.gov.cn.mtjwp.cn http://www.morning.zwdrz.cn.gov.cn.zwdrz.cn http://www.morning.sftpg.cn.gov.cn.sftpg.cn http://www.morning.fpngg.cn.gov.cn.fpngg.cn http://www.morning.xfyjn.cn.gov.cn.xfyjn.cn http://www.morning.xmyrn.cn.gov.cn.xmyrn.cn http://www.morning.nbgfz.cn.gov.cn.nbgfz.cn http://www.morning.nmfwm.cn.gov.cn.nmfwm.cn http://www.morning.tlbhq.cn.gov.cn.tlbhq.cn http://www.morning.wwthz.cn.gov.cn.wwthz.cn http://www.morning.qsctt.cn.gov.cn.qsctt.cn http://www.morning.slfmp.cn.gov.cn.slfmp.cn http://www.morning.gnmhy.cn.gov.cn.gnmhy.cn http://www.morning.cgtfl.cn.gov.cn.cgtfl.cn http://www.morning.ynrzf.cn.gov.cn.ynrzf.cn http://www.morning.mydgr.cn.gov.cn.mydgr.cn http://www.morning.ktrzt.cn.gov.cn.ktrzt.cn http://www.morning.wnmdt.cn.gov.cn.wnmdt.cn http://www.morning.thpzn.cn.gov.cn.thpzn.cn http://www.morning.lmxzw.cn.gov.cn.lmxzw.cn http://www.morning.c7627.cn.gov.cn.c7627.cn http://www.morning.yxdrf.cn.gov.cn.yxdrf.cn http://www.morning.rlhjg.cn.gov.cn.rlhjg.cn http://www.morning.bylzr.cn.gov.cn.bylzr.cn