最近感觉微信小程序比较火,周围很多人在玩“跳一跳”和“头脑王者”之类的小游戏。

对于小程序我也产生了浓厚的兴趣。

一开始看到官方的小程序的介绍,也看了小程序的部分开发文档,本能以为微信小程序不过是一个浏览器框架,小程序也只是网页而已。首先认为小程序通过了HTTP协yi传输了相应的JS、HTML文件。开始抓HTTP协yi,发现进入小程序内部之后的数据包可以找到,但是小程序的结构包死活找不到。因此猜想可能通过其他协yi进行了传输。

使用中惊奇的发现将小程序添加至桌面,断网后发现有些小程序依旧可以使用,这个时候猜想小程序在本地有缓存。

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

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

首先先直接将可疑数据包pull到本地电脑,方便进一步分析。这儿的小程序的文件名也是一串字符。

通过HEX分析软件分析其中一个apkg包,浏览中发现很多地方直接明文,因此猜想可能整个apkg包都没有加密。

比如开头的很多文件路径,但是中间部分有较多的乱码,在后半部分又出现了明文。在这些明文中,我发现了关键字question.hortor.net。这个是我在抓包的时候的一个host。因此,90%的可能性发现的apkg包就是关键性的数据包。

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

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

文件开头都是0xBE,0x00000000,接下来是一个四字节的索引长度、四字节的文件长度。然后就是0xED的尾部。接下来是一个四字节的文件数量,我这边的数据为0x00000045,用计算器计算是十进制的69,先按下不表。接下来数据就比较清楚了,四字节的文件名长度N,N字节的文件名,四字节的文件开始位置,四字节的文件大小。整个索引长度过后,就是正常的文件主体了。

写个代码帮我们自动进行数据包的解析

代码可以在底部下载。

通过代码,成功的还原了“头脑王者”这个小程序的代码。

我们可以清楚的看到文件结构,image为游戏图片资源,template与page为游戏部分页面。

app-config.json为小程序的配置文件,定义了页面地址之类的信息

[img]file:///C:\Users\Xiaodui\AppData\Roaming\Tencent\Users\244036962\QQ\WinTemp\RichOle\{1))PS(8%(I[DZBK2R9~~CH.png[/img]

此处为经过格式化的,建议大家阅读js,json等代码,最好先格式化一下。

page-frame.html从字面直接可以理解到是页面框架。

软件的主体逻辑就在app-service.js里面了。同样格式化之后看看

通过define定义了多个js文件。这儿我想知道数据包中sign的来历。

数据包:

https://question.hortor.net/question/message/recordForm

formId=1515596516126&uid=62552339&t=1515596526234&sign=c2942c7420a22b224f514db81db5f058

直接搜索sign一般是不现实的,毕竟sign肯定很多处出现,我们搜一搜url中的关键字:message/recordForm

我们定位到了RecordForm: "/question/message/recordForm"

接着搜索RecordForm

定位到了:

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

t = require("./../const/consts.js"),

e = module.exports;

e.recordForm = function (e, r) {

s.post(t.MessageHead.RecordForm, {

params: {

formId: e

},

success: function (s) {

r(null, s)

}, fail: function (s) {

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

}

})

}

我们跟进s这个network这个js,找到了sign的地方

var n = this,

a = Object.assign({}, i.params),

d = "",

u = "";

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

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

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

"GET" == o ? (a.sign = g, d = a) : d += "&sign=" + g;

说明:此处,将uid,timestamp,以及传递进来的formId赋值给了a,接着格式化构造出来d:formId=1515596516126&uid=62552339&t=1515596526234以及u:formId=1515596516126&uid=62552339&t=1515596526234。调用e.GENNetSign进行了加密,往上翻翻看,发现了e的定义var e = require("./../util/util.js"),

接着进入util.js中,该处定义了多个方法,我们通过关键key找到了最后的地方

{

key: "GenNetSign",

value: function (e, t) {

var r = "",

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

o.sort();

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

return r = n.hex_md5(r)

}

}

这段代码什么意思呢,就是先将传经来的两个参数拼接起来,构造出来formId=1515596516126&uid=62552339&t=1515596526234&token=XXX(此处token为登录成功之后返回的token),接着按照&分割该字符串,然后再进行sort整理,最后出来的是formId=1515596516126t=1515596526234token=XXXuid=62552339,然后将该字符串进行md5加密,最后得到了我们想要的sign值。通过自己拼接取MD5,验证了该思路的正确

至此,整个分析流程完成。

整个分析过程也踩了不少坑,慢慢的才分析完成。虽然解包代码不复杂,但是论坛好像还没有微信小程序相关的源代码,特意奉上小小的一段代码。

论坛好像也没有微信小程序如何分析的文章,希望大家给个好评==有钱的捧个钱场,没钱的捧个人场。

头脑王者对战游戏html5源码,头脑王者分析笔记及微信小程序解包源码相关推荐

  1. 小程序源码:端午送粽子祝福微信小程序源码下载支持打赏模式带背景音乐

    端午节的时候很火的一款小程序 给亲朋好友送祝福也是一款引流非常不错的一款小程序 支持打赏小程序模式实现盈利模式 当然了,有能力的小伙伴也可以魔改一下做成别的小程序也是可以的 该小程序无需服务器和域名, ...

  2. 最新WordPress微信小程序社区论坛源码多端应用

    WordPress多端应用 WordPress作为后端生成多端小程序.快应用及APP,可用于资讯.新闻.博客.企业官网等 后端 使用开源博客建站系统wordpress和微慕小程序开源版插件 前端使用u ...

  3. 七夕节微信表白墙小程序源码/基于Laravel的表白墙微信小程序源码

    七夕节微信表白墙小程序源码/基于Laravel的表白墙微信小程序源码 ☑️ 编号:ym499 ☑️ 品牌:无 ☑️ 语言:小程序 ☑️ 大小:11.2MB ☑️ 类型:微信表白墙小程序 ☑️ 支持:小 ...

  4. 小程序源码:网课查题微信小程序源码下载,题库资源丰富自动采集,支持语音拍照识别

    这是一款网课查题微信小程序源码 题库资源丰富自动采集, 支持语音拍照识别 该款采用接口方式,所以题库自动全网采集 而且该款小程序无需服务器和域名即可搭建 大家解压源码然后使用微信开发者工具打开源码 然 ...

  5. 健康菜谱微信小程序+项目前后台源码(JavaSSM+Mysql)

     博主介绍:✌在职Java研发工程师.专注于程序设计.源码分享.技术交流.专注于Java技术领域和毕业设计✌ 项目名称 健康菜谱微信小程序+项目前后台源码(JavaSSM+Mysql) 视频效果 ht ...

  6. PHP开发B2C商城 微信小程序商城系统源码+数据库,轻量级前后端分离的电商系统,支持微信小程序 + H5+ 公众号 + APP

    项目介绍 一款轻量级.高性能.前后端分离的电商系统,支持微信小程序 + H5+ 公众号 + APP,前后端源码完全开源,看见及所得,完美支持二次开发,可学习可商用,让您快速搭建个性化独立商城. 完整代 ...

  7. 【快递下单小程序源码】可运营+快递下单微信小程序

    [快递下单小程序源码]可运营+快递下单微信小程序 演示小程序:快递大师兄 需要准备的材料 需要准备一台2H4G的服务器,并安装宝塔. 一个已经备案的域名. 下载完整安装包文件 一.首先登录宝塔创建网站 ...

  8. 小程序源码:后台版本趣味测试微信小程序源码下载支持自定义问题等等

    这是一款有后台版本的趣味测试小程序 支持用户自定义添加和删除问题 支持流量主后台设置 支持用户个人中心等等 该程序是微擎框架的,所以后台需要有微擎 PS:该小程序的登录接口并未替换更新还是采用的旧版登 ...

  9. 【增强版短视频去水印源码】去水印微信小程序+去水印软件源码

    源码简介与安装说明: 2021增强版短视频去水印源码 去水印微信小程序源码网站 去水印软件源码 安装环境(需要材料):备案域名–服务器安装宝塔-安装 Nginx 或者 Apache php5.6 以上 ...

最新文章

  1. 太有缘!和同专业师兄同名同姓同年同月同日生还是同导师是什么体验?
  2. opencv-dark channel -实现暗通道去雾详解
  3. byte数组转字符串_leetcode刷题844比较含退格的字符串(带代码解析,带知识点回顾)...
  4. linux安装mysql详细过程【easy】
  5. performance improvement in Distribution chain scenario
  6. linux 环境变量_如何管理你的 Linux 环境变量 | Linux 中国
  7. C#线程调用带参数的方法,给控件赋值
  8. ztree局部刷新节点_神经网络训练的世界记录是怎样被刷新的 -- 总结分布式训练的计算场景...
  9. 年轻人“颜值消费”崛起 分期乐联手屈臣氏发力95后美妆护理市场
  10. “Talk is cheap, show me the code”你一行代码有多少漏洞?
  11. 21矩阵——Schur分解定理、酉相似下的标准型、Hermite正定矩阵、正规矩阵
  12. UML教程6:状态图
  13. 音视频技术开发周刊 85期
  14. html5画智利国旗,智利国旗与得州州旗,你能分的清么?
  15. virtualbox 设置静态IP
  16. table元素无法固定列宽,width设置无效
  17. python主进程 子进程_Python关闭主进程时关闭子进程
  18. Techo TVP物联网开发者峰会青润的总结(带视频和完整未剪切音频版本)
  19. Android技能树 — 动画小结
  20. miui 10 android 9.0,小米基于安卓9.0的MIUI10稳定版来了,你的手机可以更新吗?

热门文章

  1. Windows如何远程连接服务器?Linux服务器如何远程登录?远程连接服务器命令
  2. matlab kdj线,kdj指标详什么时候买入,kdj金叉和死叉图解
  3. 小白 uBuntu20.04 2 安装TP Link TL-WDN5200 无线网卡驱动 亲测有效
  4. @value值获取不到配置文件值
  5. 化工专业和计算机专业哪个好就业前景,2019化学工程与工艺专业就业前景和就业方向分析...
  6. 不越狱iPhone安装破解插件的应用商店
  7. 批处理文件bat 语法备忘
  8. 龙迅LT8612UX 是一款 HDMI 至 HDMIVGA 转换器
  9. python把手机做电脑摄像头
  10. Lpc1768 常见错误及解决方法