充电学习中...
微信小程序爬虫解决方案 经过多个小程序爬虫的摸索开发,本虫子总结出了一套针对微信小程序的爬虫开发流程。 1.抓包 抓微信包即可,不管是使用VPN方式还是代理方式都行。这边介绍两款VPN抓包工具,安卓下可以使用Packet Capture,IOS下可以使用Stream。抓包的目的是了解目标小程序的请求参数,一般来说,都会带有一些签名字段。 2.反编译 2.1获取微信小程序包 即获取微信小程序编译后的文件,后缀名为.wxapkg。在安卓环境下的路径为 /data/data/com.tencent.mm/MicroMsg/{数字串}/appbrand/pkg/,windows端的路径为 C:\Users{用户名}\Documents\WeChat Files\Applet。安卓端可能会有分包。存在多个小程序包的情况下可以在微信里将小程序删除然后重新打开,最新生成的就是目标小程序的包。 2.2反编译获得源代码 参考工具 3.寻找签名关键位置 如果代码没有经过混淆,直接搜索关键词,大概率就能找到关键位置。如果经过混淆则需要进行调试。 4.调试 小程序项目一般都通过Webpack进行了打包。参考.....
QQ音乐sign签名字段解析 字段描述 出现在歌单详情等接口,请求url后面会跟一个sign字段,例如"zzap4rd5hjs5zkv626bc180091010583fc33cd2e160eca2",经过验证发现这个参数无法缺省,必须携带。 分析过程 1.找到加密位置 搜索对应的js中的sign关键词,如下图 这边可以看到sign来自于g参数赋值,那么向上找到g参数赋值位置:"z.getSecuritySign(m.data)",下断点调试。 可以发现传入的参数即为Post请求的body部分 2.g_tk字段解析 请求体中会带上这个字段,生成位置如下图: 生成逻辑比较简单,可以用自己的语言重写。 3.调用验证 通过静态分析js发现,加密的一系列方法,最终都在一个全局对象"M"中,那么我们传入加密参数进行验证 将加密值代入请求中,成功获得数据 sign字段构成分析 测试中发现sign由3端字符串拼接而成:"zzaj|51ny550yk|626bc180091010583fc33cd2e160eca2"(示例用|分割) 其中 第一部分固定 都为"zza",第二部分是一串随机字符....
网易云音乐web端加密解析 API加密部分 即params和encSecKey字段,其中params字段通过两次aes cbc模式加密得到,密钥和偏移量都是固定的。encSecKey由rsa加密得到,最后输出的是byte数组转换成的16进制字符串。这块内容网上一搜一大把,本文不再赘述,如有需要可以参考这篇文章,讲的很详细。 内容加密部分 这部分加密出现在歌单等页面,即主要内容是 textarea 标签中的一段加密字符串,例如下图: 而在渲染完成的页面(审查元素)中,这部分代码则变成了正确的数据: 接下来就是分析js了(PS:又臭又长的JS) 首先搜索这串加密字符串相关的字符,在某段js中找到了下图的js代码: 尝试下断点调试,但是断点始终无法命中。(后来才知道这是网易云音乐原先的数据解析方式)。说明这部分代码应该是被废弃了,不过结合网上的一些过时代码可以看到这部分数据可能最终是转化为json来使用的。那么,是否能在json上下文章呢?马上想到了一个思路,将JSON.parse方法进行hook,然后加上debugger断点,再通过调用栈堆来找到关键位置。 hook代码如下(hoo....
裁判文书网瑞数加密解决方案 本文研究对象:裁判文书网 话不多说,直奔主题 1. 反调试突破 在裁判文书网页面,打开浏览器控制台,会自动命中断点。如下图 突破方案在另一篇文章里有详细介绍,如果只是单纯地调试,在断点处启用"Nerver pause here"即可 2. 加密分析 瑞数的加密一般都是重写了XMLHttpRequest对象的open方法,这里也不例外,先找到加密位置: 这边可以看到加密的位置,加密的参数为发起请求的url地址。 尝试在控制台直接调用加密方法,由于加密部分代码是通过匿名函数注入的,调用失败 只在命中断点的时候才能成功调用 2. 请求拦截篡改 直接调用走不通,只能走拦截这条路了(解密是不可能解密的,这辈子都不可能解密的) 先上个流程图: 简单来说,就是通过代理服务阻断浏览器的请求,以获得加密有后的url和cookie值,保存起来以供使用,由于请求并未真正到达后端,依靠这种方式能够无限量地产出加密值以供使用 3. 结果展示
JS标准内置对象 Object.defineProperty(document, 'cookie', { get: function() { console.log('getcookie'); debugger; return ""; }, set: function(value) { console.log('setcookie', value); debugger; return value; }, }); Everything-Hook 来源 // ==UserScript== // @name Everything-Hook // @namespace https://gitee.com/HGJing/everthing-hook/ // @updateURL https://gitee.com/HGJing/everthing-hook/raw/master/src/everything-hook.js // @version 0.5.9054 // @include * // @description it can hook everything // @author C.....