为编程爱好者分享易语言教程源码的资源网
好用的代理IP,游戏必备 ____广告位招租____ 服务器99/年 ____广告位招租____ ____广告位招租____ 挂机,建站服务器
好用的代理IP,游戏必备 ____广告位招租____ 服务器低至38/年 ____广告位招租____ ____广告位招租____ 挂机,建站服务器

网站首页 > 易语言相关 > 易语言例程 正文

头脑王者分析笔记及微信小程序解包源码

三叶资源网 2017-02-23 01:57:32 易语言例程 876 ℃ 0 评论

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

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

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

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

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

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


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

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

头脑王者分析笔记及微信小程序解包源码1.png

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

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

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

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

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

代码可以在底部下载。

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

头脑王者分析笔记及微信小程序解包源码2.png

我们可以清楚的看到文件结构,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]

头脑王者分析笔记及微信小程序解包源码.png


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

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

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

头脑王者分析笔记及微信小程序解包源码5.png

通过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,验证了该思路的正确


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

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


文件下载

来源:三叶资源网,欢迎分享,公众号:iisanye,(三叶资源网⑤群:21414575

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

百度站内搜索
关注微信公众号
三叶资源网⑤群:三叶资源网⑤群

网站分类
随机tag
蜗牛迷宫游戏易语言教程易大漠教程TCP套接字勒索病毒文件批量下载乐玩模块MP3播放器置入代码多线程特训班精易论坛上传DirectX例程幻影动图特效外挂手游登录字节集搜索腾讯滑块识别算法RC4算法同步应用HttpProxy
最新评论