最近感觉微信小程序挺火的,身边很多人都在玩“跳一跳”、“心灵王”等小游戏。我对小程序也有浓厚的兴趣。当我第一次看到小程序的官方介绍并阅读一些小程序的开发文档时,我本能地认为微信小程序只是一个浏览器框架,而小程序只是一个网页。首先认为小程序通过HTTP协议传输相应的JS和HTML文件。我开始捕获HTTP协议,发现进入小程序后的数据包可以找到,但是找不到小程序的结构包。因此猜测可能是通过其他协议传输的。在使用过程中,我惊奇地发现,在桌面添加小程序后,发现有些小程序在断网后仍然可以使用。这时候我猜测小程序是缓存在本地的。因此,笨手笨脚的人先删除微信目录下的数据文件,记录此时的文件信息,然后登录自己的账号,进入小程序,添加到桌面,退出微信。对比文件信息,发现多了几个可疑的数据包。文件的具体目录是./data/data/com..mm//[你自己的微信目录,是一串字符]//pkg/。首先,将可疑数据包直接拉取到本地计算机,以方便进一步分析。这里小程序的文件名也是一串字符。通过HEX分析软件对其中一个apkg包进行了分析。浏览过程中发现很多地方都是明文,所以猜测整个apkg包没有加密。
例如,开头有很多文件路径,但中间部分乱码较多,后半部分出现纯文本。在这些明文中我找到了关键字。这是我在捕获数据包时使用的主机。因此,找到的 包有 90% 的可能性是关键数据包。通过分析多个小程序的数据包。得出以下结论:文件的开头是标识数据包的一些信息的结构体,文件的结尾是具体文件的主体。文件以 0xBE 开头,后跟四字节索引长度和四字节文件长度。然后是0xED的尾部。接下来是一个四字节的文件号。这里的数据,用计算器算一下,十进制是69。首先按下按钮。接下来,数据就比较清晰了。四字节文件名长度为N,N字节文件名,四字节文件起始位置,四字节文件大小。超过整个索引长度后,就是正常的文件体了。编写一段代码,帮助我们自动解析数据包。代码可以在底部下载。通过代码,成功恢复了小程序“心王”的代码。我们可以清晰的看到文件结构,其中是游戏图片资源,page是游戏部分页面。 app-.json是小程序的配置文件,定义了页面地址等信息 [img]file:///C:\\\\\\\\QQ\\\\{1))PS(8% ( I[~~CH.png[/img] 这个是格式化的,建议大家看js、json等代码,最好先格式化一下。
page-.html从字面上可以理解为页面框架。软件的主要逻辑在app-.js中。同样格式化后,查看定义的多个js文件。这里我想知道数据包中的标志的来源。数据包: ==== 直接查找sign一般不太现实。毕竟,标志必须出现在很多地方。让我们搜索URL中的关键字:/,找到:“///”,然后搜索并定位:var s = ("./../net/.js"),t = ("./.. //.js"),e = .; e. = (e, r) {s.post(t.. , {: {: e},: (s) {r(null, s)}, 失败: (s) {.warn("失败.-" + s.), r(s)}}) }我们对s、this js进行跟踪,发现了符号 var n = this,