探索微信小程序:从 HTTP 协议到本地缓存的奥秘

2024-11-07
来源:网络整理

最近感觉微信小程序挺火的,身边很多人都在玩“跳一跳”、“脑王”等小游戏。

我对小程序也有浓厚的兴趣。

当我第一次看到小程序的官方介绍并阅读一些小程序的开发文档时,我本能地认为微信小程序只是一个浏览器框架,而小程序只是一个网页。首先认为小程序通过HTTP协议传输相应的JS和HTML文件。我开始抓HTTP协议,发现进入小程序后的数据包可以找到,但是找不到小程序的结构包。因此猜测可能是通过其他协议传输。

在使用过程中,我惊奇地发现,在桌面添加小程序后,发现有些小程序在断网后仍然可以使用。这时候我猜测小程序是缓存在本地的。

所以,笨手笨脚的人先删除微信目录下的数据文件,记录此时的文件信息,然后登录自己的账号,进入小程序,添加到桌面,然后退出微信。对比文件信息,发现多了几个可疑的数据包。

文件的具体目录是./data/data/com..mm//[你自己的微信目录,是一串字符]//pkg/

首先,将可疑数据包直接拉取到本地计算机,以方便进一步分析。这里小程序的文件名也是一串字符。

通过HEX分析软件对其中一个apkg包进行了分析。浏览过程中发现很多地方都是明文,所以猜测整个apkg包没有加密。

例如,开头有很多文件路径,但中间乱码较多,后半部分出现纯文本。在这些明文中我找到了关键字。这是我在捕获数据包时使用的主机。因此,找到的 包有 90% 的可能性是关键数据包。

通过分析多个小程序的数据包。得出以下结论:

文件的开头是一个结构体,标识了数据包的一些信息,文件的结尾是具体文件的主体。

文件以 0xBE 开头,后跟四字节索引长度和四字节文件长度。然后是0xED的尾部。接下来是一个四字节的文件号。这里的数据,用计算器算一下,十进制是69。首先按下按钮。接下来,数据就比较清晰了。四字节文件名长度为N,N字节文件名,四字节文件起始位置,四字节文件大小。超过整个索引长度后,就是正常的文件体了。

写一段代码帮助我们自动解析数据包

代码可以在底部下载。

通过代码,成功恢复了小程序“心王”的代码。

我们可以清晰的看到文件结构,其中是游戏图片资源,page是游戏部分页面。

app-.json是小程序的配置文件,定义了页面地址等信息

这是格式化的。建议大家阅读js、json等代码。最好先格式化一下。

page-.html从字面上可以理解为页面框架。

软件的主要逻辑在app-.js中。格式化后看一下

通过定义多个js文件。这里我想知道数据包中的标志的由来。

数据包:

=26&uid=&t=34&符号=

直接搜索标志通常是不现实的。毕竟,标志必须出现在很多地方。我们来搜索一下URL中的关键词:/

我们找到了:“///”

然后搜索

定位:

var s = ("./../net/.js"),

t = ("./..//.js"),

e = .;

e. =(e,r){

s.post(t.., {

:{

:e

},

: (s) {

r(空,s)

},失败:(s) {

.warn("失败。-" + s.), r(s)

})

我们顺着这个js,找到了sign的地方

var n = 这个,

a = .({}, i.),

d =“”,

你=“”;

a.uid = t.uid, at = Date.now();

for (var c in a) "" != d && (d += "&", u += "&"), d += c + "=" + (a[c]), u += c + “=”+a[c];

var g = e.(t., u);

“获取”== o? (a.sign = g, d = a) : d += "&sign=" + g;

注意:这里将uid,,和传入的值赋值给a,然后格式化构造d:=26&uid=&t=34和u:=26&uid=&t=34。致电 e.加密。抬头一看,发现了 e var e = ("./../util/util.js") 的定义,

然后进入util.js,这里定义了多个方法,我们通过key键找到最后一个地方

钥匙: ””,

:(e,t){

var r =“”,

o = (t += "&=" + e).("&");

o.sort();

for (var a = 0; a < o.; a++) r += o[a];

r = n.(r)

这段代码是什么意思?就是先将传入的两个参数拼接在一起,构造=26&uid=&t=34&=XXX(这里登录成功后返回),然后根据&分割字符串,然后排序后,最终结果为=26t=== ,然后对字符串进行md5加密,最后得到我们想要的符号值。通过自己拼接得到MD5,验证了这个想法的正确性。

至此,整个分析过程就完成了。

整个分析过程也遇到了很多坑,慢慢分析完成。

分享