当前位置: 首页 > news >正文

实用指南:微信公众号网页调试, 某讯参数,drviceToken V2

实用指南:微信公众号网页调试, 某讯参数,drviceToken V2

引言
  • 该文章只适用于学术研究,不得用于商业用途,如有侵权,联系主包下架!!!
  • 主包断更了几天,还望大家体谅,没发文章就是在研究新东西。今天主包给大家带来微信公众号网页的调试,网站aHR0cHM6Ly9zcHJpbmcubGlxdW5jaGluYS5jb20=
核心技术与原理

1 利用charles抓包分析

2 利用微信开发者工具调试

3  跟栈分析

4 成果展示

实现方法

1第一咱们分析出发条件,当我们点击提交的时候,会发送一个请求,里面包含了drivceToken

2抓包分析,利用charler进行抓包,,可以清楚的看到,在头部的参数有一个device-token,接口是save

所选的答案,了解玩大家需要的就开始调试跟栈就是请求参数

3 跟栈调试,上一步主包,抓包测试,并把响应的js保存下来,我们全局搜索answer/save,发现在paper.js里面

通过接下来搜索C(e,t)这个方法在哪里触发了,我们能够看到,这里触发了函数,并提交。再次之前先调用了ue()这个方法,

继续搜索ue()技巧,这里可能看到,ue()是调用deviceToken传入一个回调函数和布尔值

把ue口下来,调用测试,发现需要先初始化sdk,主包再次搜索init

全局搜索init,发现在创建的时候进行了初始化,这里调用了TDID的初始化

4 挂代理,调试

咱们首先在微信开发者工具中调试一下正确的输出,发现返回一个promise。

接下来就是打上断点分析,发现调用了y1,继续跟栈

发现了加密方法,一个是SHA256,一个是AES256。

挂上代理调试,补一个nav,canvs,window,常见的dom元素,location,session等

fs = require('fs');
path = require('path');
dtavm = {}
dtavm.log = function(...args) {
const message = args.join(' ');
const timestamp = new Date().toISOString();
const logEntry = `[${timestamp}] ${message}\n`;
try {
fs.appendFileSync(path.join(__dirname, 'log.txt'), logEntry);
} catch (err) {
console.error('写入日志文件失败:', err);
}
}
// dtavm=console.log
function proxy(obj, objname, type) {
function getMethodHandler(WatchName, target_obj) {
let methodhandler = {
apply(target, thisArg, argArray) {
if (this.target_obj) {
thisArg = this.target_obj
}
let result = Reflect.apply(target, thisArg, argArray)
if (target.name !== "toString") {
if (target.name === "addEventListener") {
dtavm.log(`调用者 => [${WatchName}] 函数名 => [${target.name}], 传参 => [${argArray[0]}], 结果 => [${result}].`)
} else if (WatchName === "window.console") {
} else {
dtavm.log(`调用者 => [${WatchName}] 函数名 => [${target.name}], 传参 => [${argArray}], 结果 => [${result}].`)
}
} else {
dtavm.log(`调用者 => [${WatchName}] 函数名 => [${target.name}], 传参 => [${argArray}], 结果 => [${result}].`)
}
return result
},
construct(target, argArray, newTarget) {
var result = Reflect.construct(target, argArray, newTarget)
dtavm.log(`调用者 => [${WatchName}] 构造函数名 => [${target.name}], 传参 => [${argArray}], 结果 => [${(result)}].`)
return result;
}
}
methodhandler.target_obj = target_obj
return methodhandler
}
function getObjhandler(WatchName) {
let handler = {
get(target, propKey, receiver) {
let result = target[propKey]
if (result instanceof Object) {
if (typeof result === "function") {
dtavm.log(`调用者 => [${WatchName}] 获取属性名 => [${propKey}] , 是个函数`)
return new Proxy(result, getMethodHandler(WatchName, target))
} else {
dtavm.log(`调用者 => [${WatchName}] 获取属性名 => [${propKey}], 结果 => [${(result)}]`);
if (`${propKey}` === 'top') {
return window
}
if (`${propKey}` === 'self') {
return self
}
}
return new Proxy(result, getObjhandler(`${WatchName}.${propKey}`))
}
if (typeof (propKey) !== "symbol") {
dtavm.log(`调用者 => [${WatchName}] 获取属性名 => [${propKey?.description ?? propKey}], 结果 => [${result}]`);
}
return result;
},
set(target, propKey, value, receiver) {
if (value instanceof Object) {
dtavm.log(`调用者 => [${WatchName}] 设置属性名 => [${propKey}], 值为 => [${(value)}]`);
} else {
dtavm.log(`调用者 => [${WatchName}] 设置属性名 => [${propKey}], 值为 => [${value}]`);
}
return Reflect.set(target, propKey, value, receiver);
},
has(target, propKey) {
var result = Reflect.has(target, propKey);
dtavm.log(`针对in操作符的代理has=> [${WatchName}] 有无属性名 => [${propKey}], 结果 => [${result}]`)
return result;
},
deleteProperty(target, propKey) {
var result = Reflect.deleteProperty(target, propKey);
dtavm.log(`拦截属性delete => [${WatchName}] 删除属性名 => [${propKey}], 结果 => [${result}]`)
return result;
},
defineProperty(target, propKey, attributes) {
var result = Reflect.defineProperty(target, propKey, attributes);
dtavm.log(`拦截对象define操作 => [${WatchName}] 待检索属性名 => [${propKey.toString()}] 属性描述 => [${(attributes)}], 结果 => [${result}]`)
// debugger
return result
},
getPrototypeOf(target) {
var result = Reflect.getPrototypeOf(target)
dtavm.log(`被代理的目标对象 => [${WatchName}] 代理结果 => [${(result)}]`)
return result;
},
setPrototypeOf(target, proto) {
dtavm.log(`被拦截的目标对象 => [${WatchName}] 对象新原型==> [${(proto)}]`)
return Reflect.setPrototypeOf(target, proto);
},
preventcExtensions(target) {
dtavm.log(`方法用于设置preventcExtensions => [${WatchName}] 防止扩展`)
return Reflect.preventcExtensions(target);
},
isExtensible(target) {
var result = Reflect.isExtensible(target)
dtavm.log(`拦截对对象的isExtensible() => [${WatchName}] isExtensible, 返回值==> [${result}]`)
return result;
},
}
return handler;
}
if (type === "method") {
return new Proxy(obj, getMethodHandler(objname, obj));
}
return new Proxy(obj, getObjhandler(objname));
}
结论

  上成果

http://www.sczhlp.com/news/145663/

相关文章:

  • 做电商有哪些网站有哪些wordpress建手机版6
  • 重庆企业型网站建设北京网站
  • 象客企业网站做优化排名海外购物app排行
  • 用discuz建设企业网站网站搭建软件工具
  • 网站怎样和首页做链接地址网站建设的设计方案
  • 做网上夫妻去哪个网站手机网站设计教程
  • 2025 年芝麻灰厂家 TOP 企业品牌推荐排行榜,芝麻灰路沿石,花岗岩石材,火烧板,地铺石,板材,挡车球,桥栏杆,楼梯踏步,门牌石,水篦子公司推荐
  • 网站配色与布局营销型网站 开源程序
  • 企腾做的网站怎么样舆情报告2023
  • 哪里做网站优化杭州百度推广
  • 润滑油 东莞网站建设网络公司哪个效果好
  • 专业模板建站提供商门户网站流程图
  • 化妆培训网站 源码免费装修设计软件哪个好
  • 微信扫码即可打开的网站如何做响应式网站定制开发
  • 遵义市播州区建设厅网站公司建网站软件
  • 成都手机网站建设价格进口跨境电商网站制作
  • wordpress 站外调用如何用ppt做网站
  • 网站开发公司的销售方式大千科技网站建设
  • 手机网站源码教程做网站一个月能挣多少钱
  • 做搜狗网站优化点网推软件有哪些
  • 凯里网站设计公司哪家好佛山网站代运营
  • 重庆建设门户网站龙泉网站开发
  • 租房子做民宿在哪个网站.net微信网站开发
  • 网站集约化建设调研报告做网站建设注册商标是多少类
  • html如何做自己的网站电销系统外呼软件
  • 2025.9.28
  • 深入解析:宝塔面板搭建RustDesk教程:告别命令行,一键拥有私有远程桌面
  • Windows 安装达梦数据库
  • 有旋Treap
  • 十佳网站wordpress去掉作者